[Spring] IoC(제어의 역전) & DI(의존성 주입)의 개념

1. IoC (Inversion of Control) 제어의 역전 IoC란 메인 프로그램에서 컨테이너나 프레임워크로 객체와 객체의 의존성에 대한 제어를 넘기는 것을 말한다. 프레임워크 없이 개발할 때는 각 객체에 대한 라이프사이클 (생성, 설정, 초기화, 호출 등)을 개발자가 직접 관리한다. 하지만 프레임워크를 사용하면 객체의 생명주기를 프레임워크에 위임하여, 프레임워크가 개발자의 코드를 호출하고 흐름을 제어하게 할 수 있다. 이처럼, 제어의 역전은 객체를 직접 생성하거나 제어하는 것이아니라 외부에서 관리하는 객체를 가져와서 사용하는 것으로, 클레스 간의 결합을 느슨하게 하여 테스트와 유지관리를 더 쉽게 설계하는 원칙이다. ...

November 6, 2023 · Jun Kang

[Spring] 스프링부트 + Mybatis 데이터소스 여러개 연결 (스프링 다중 데이터베이스 연결)

다음은 스프링부트 + 마이바티스 프로젝트에 2개 이상의 데이터소스를 연결하는 예제이다. 기존 스프링 데이터베이스 연동이 되어있다고 가정 후 진행되며, 신규 데이터베이스는 구별이 쉽도록 new 데이터베이스로 명칭 한다. 1. 신규 데이터베이스 접속정보 추가 추가될 데이터베이스의 속성을 application.properties에 추가 #기존 DB Setting spring.datasource.url={url} spring.datasource.driverClassName={driverClassName} spring.datasource.username={username} spring.datasource.password={password} spring.datasource.schema={schema} #추가될 DB Setting new.datasource.url={url} new.datasource.driverClassName={driverClassName} new.datasource.username={username} new.datasource.password={password} new.datasource.schema={schema} 2. 데이터베이스 연결 빈 속성 추가 기존 데이터베이스 연결 설정을 하는 DatabaseConfig.java 외에 NewDatabaseConfig.java신규로 추가한다. 기존 DatabaseConfig.java ...

October 20, 2023 · Jun Kang

[Spring] 스프링 배치 ItemReader의 개념, (MybatisCursorItemReader, MybatisPagingItemReader 구현)

1. ItemReader란? 스프링 배치의 ItemReader는 다음과 같은 과정을 거쳐 데이터를 처리한다. 대부분의 데이터 형태는 이미 ItemReader로 제공하고 있기에 ItemReader, ItemStream 인터페이스 자체를 구현할 필요는 없다. ItemReader는 Chunk 기반 트랜잭션을 다루며 Cursor, Paging 가 대표적인 2가지 방식이다. 2. Cursor, Paging 형식 2-1. Cursor기반 ItemReader JDBC ResultSet의 기본 기능이다. ResultSet이 Open 될 때마다 데이터베이스의 데이터가 반환된다. 데이터베이스와 연결 맺은 후 데이터를 Streaming 방식으로 I/O이다. 현재 행에서Cursor를 유지하며 다음 데이터를 호출하면 Cursor를 한 칸씩 옮기면서 데이터를 가져온다. 하나의 Connection으로 배치가 끝날때까지 사용되기에 Batch가 끝나기 전에 데이터베이스와 애플리케이션의 연결이 먼저 끊어질 수 있어 데이터베이스와 SocketTimeout을 충분한 값으로 설정하여야 한다. 모든 결과를 메모리에 할당 하기 때문에 메모리 사용량이 많아진다. Chunk 사이즈 만큼의 트랜잭션 단위로 데이터를 처리한다. Cursor 기반 ItemReader 구현체 ...

October 19, 2023 · Jun Kang

[Spring] 스프링 트랜잭션의 개념 및 적용 (@Transactional 사용법)

트랜잭션이란? [Postgresql] - [PostgreSQL] 트랜잭션(Transaction)의 개념 및 사용 스프링에서 제공하는 트랜잭션 ◆ 동기화 (Synchronization) 트랜잭션을 시작하기 위한 Connection 객체를 특별 저장소에 보관하고 필요할 때 쓸 수 있도록 한다. 작업 쓰레드마다 Connection 객체를 독립적으로 관리하기에 멀티 스레드 환경에서도 충돌이 발생하지 않는다. 하지만 JDBC가 아닌 Hiberate 같은 기능을 사용한다면 JDBC 종속적인 트랜잭션 동기화 코드들은 문제가 발생한다. 대표적으로 Hibernate는 Connection이 아니라 Session 객체를 사용하기 때문이다. 이를 해결하기 위해 트랜잭션 관리 부분을 추상화한 기술을 제공하고 있다. ...

October 17, 2023 · Jun Kang