본문 바로가기
프로그래밍/Spring

[SpringBoot] DataSourceConfig.java 설정 및 역할

by 곰 옥수수 2025. 6. 22.
728x90
반응형

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

 

728x90
반응형

댓글