DataSourceConfig.java의 역할은 Spring Boot 애플리케이션에서 DB 연결 정보(DataSource)를 커스터마이징하고 관리하는 설정 클래스 입니다.
application.yml(properties) 로 설정하면 되지 않나? 라고 생각 할 수도 있고 다른 프로젝트에서 많이 사용한다.
하지만 application.yml(properties)은 동적으로 설정하거나 복잡한 로직이 필요한 경우 한계가 있기 때문에 DB설정 방식을 분리 시키는 게 옳은 방법이라고 생각한다.
예시 소스)
@Configuration
@EnableTransactionManagement
public class DataSourceConfig {
@Bean
@Profile("h2") // h2 환경에서만 이 Bean 사용
@Primary // 여러 DataSource 중 이걸 기본으로 사용
public DataSource h2DataSource() {
return DataSourceBuilder.create()
.url("jdbc:h2:mem:testdb")
.username("sa")
.password("")
.driverClassName("org.h2.Driver")
.build();
}
}
어노테이션 설명
@Configuration: 어노테이션을 선언한 클래스가 Spring 설정 클래스임을 명시합니다.
- 내부에 정의된 @Bean 메서드들을 스프링 빈으로 등록할 수 있게 합니다.
- 쉽게 말해, Java 기반 설정 파일로 사용하겠다는 선언입니다.
⇒ applicationContext.xml 없이도 Java 코드로 Bean 등록 가능하게 함.
@EnableTransactionManagement: 트랜잭션 관리 기능을 활설화합니다.
- @Transaction 을 사용할 수 있게 해준다.
- 서비스 로직에 @Transactional을 붙이면, 자동으로 트랜잭션이 시작되고 예외 시 롤백됩니다.
@Profile("h2"): 프로파일이 활성화되었을 때만 생성됩니다.
예를 들어, application.yml에서 spring.profiles.active=h2일 때만 이 Bean이 등록됩니다.
개발 프로젝트 진행 시 "h2" 가아닌 "dev", "prod", "test" 등으로 지정해 선언해두고 쉽게 개발 환경(dev), 운영 환경(prod), 테스트 환경(test) 등을 구분하여 사용할 수 있다.
@Primary: 여러 개의 같은 타입의 Bean을 등록했을 때 사용해서 default를 지정해준다.
예를 들어 DataSource Bean이 h2, mysql 두 개가 있을 때 어떤 걸 주입해야 할지 모호할 수 있는데, @Primary가 붙은 것을 우선 사용합니다.
DataSource를 커스터마이징하면서 커넥션 풀도 미리 설정해보자!!
[SpringBoot] HikariCP로 커넥션 풀 수동 설정 방법을 알아보자.
Spring Boot에서 HikariCP 커넥션 풀을 직접 설정하고, 초기 커넥션 풀을 미리 생성(preload) 하도록 구성하려면 DataSourceConfig.java에서 HikariDataSource를 수동으로 생성하는 방식이 필요하다. [SpringBoot] DataSou
bears-paw.tistory.com
댓글