이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.


테스트 코드가 아래와 같이 작성되어 있다고 가정하자.

@SpringBootTest
class MemberServiceV3_3Test {

    @Autowired
    MemberRepositoryV3 memberRepository;
    @Autowired
    MemberServiceV3_3 memberService;

    @TestConfiguration
    static class TestConfig {
        @Bean
        DataSource dataSource() {
            return new DriverManagerDataSource(URL, USERNAME, PASSWORD); //직접 데이터 소스 등록
        }
        @Bean
        PlatformTransactionManager transactionManager() {
            return new DataSourceTransactionManager(dataSource()); //직접 트랜잭션 매니저 등록
        }
        @Bean
        MemberRepositoryV3 memberRepositoryV3() {
            return new MemberRepositoryV3(dataSource());
        }
        @Bean
        MemberServiceV3_3 memberServiceV3_3() {
            return new MemberServiceV3_3(memberRepositoryV3());
        }
    }
}

기존에는 이렇게 데이터소스와 트랜잭션 매니저를 직접 스프링 빈으로 등록해야 했다. 그런데 스프링 부트가 나오면서 많은 부분이 자동화되었다.

 

데이터소스 - 자동 등록

스프링 부트는 데이터소스( DataSource )를 스프링 빈에 자동으로 등록한다.

자동으로 등록되는 스프링 빈 이름: dataSource

참고로 개발자가 직접 데이터소스를 빈으로 등록하면 스프링 부트는 데이터소스를 자동으로 등록하지 않는다.

이때 스프링 부트는 application.properties 에 있는 속성을 사용해서 DataSource를 생성한다.

그리고 스프링 빈에 등록한다.

 

application.properties

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.username=sa
spring.datasource.password=
  • 이 부분은 개발자가 사용하는 DB, DB 계정에 따라 수정해야 한다.
  • 스프링 부트가 기본으로 생성하는 데이터소스는 커넥션풀을 제공하는 HikariDataSource 이다.
  • 커넥션풀과 관련된 설정도 application.properties 를 통해서 지정할 수 있다.
  • spring.datasource.url 속성이 없으면 내장 데이터베이스(메모리 DB)를 생성하려고 시도한다.

 

트랜잭션 매니저 - 자동 등록

스프링 부트는 적절한 트랜잭션 매니저( PlatformTransactionManager )를 자동으로 스프링 빈에 등록한다.

자동으로 등록되는 스프링 빈 이름: transactionManager

참고로 개발자가 직접 트랜잭션 매니저를 빈으로 등록하면 스프링 부트는 트랜잭션 매니저를 자동으로 등록하지 않는다.

 

어떤 트랜잭션 매니저를 선택할지는 현재 등록된 라이브러리를 보고 판단하는데, JDBC를 기술을 사용하면 DataSourceTransactionManager 를 빈으로 등록하고, JPA를 사용하면 JpaTransactionManager 를 빈으
로 등록한다. 둘다 사용하는 경우 JpaTransactionManager 를 등록한다.

JpaTransactionManager 는 DataSourceTransactionManager 가 제공하는 기능도 대부분 지원하기 때문이다.

 

정리

데이터소스와 트랜잭션 매니저는 스프링 부트가 제공하는 자동 빈 등록 기능을 사용하는 것이 편리하다.

추가로 application.properties 를 통해 설정도 편리하게 할 수 있다.

이전에 보았던 코드는 스프링 부트가 자동으로 데이터소스와 트랜잭션 매니저 빈을 등록해주기 때문에 아래와 같이 관련 부분은 등록을 안해도 된다.

@SpringBootTest
class MemberServiceV3_3Test {

    @Autowired
    MemberRepositoryV3 memberRepository;
    @Autowired
    MemberServiceV3_3 memberService;

    @TestConfiguration
    static class TestConfig {
        @Bean
        MemberRepositoryV3 memberRepositoryV3() {
            return new MemberRepositoryV3(dataSource());
        }
        @Bean
        MemberServiceV3_3 memberServiceV3_3() {
            return new MemberServiceV3_3(memberRepositoryV3());
        }
    }
}

'Java Category > Spring' 카테고리의 다른 글

[Spring DB] 예외 추상화, jdbcTemplate  (1) 2024.03.05
[Spring DB] 예외의 이해  (0) 2024.03.04
[Spring DB] 트랜잭션 AOP  (0) 2024.03.02
[Spring DB] 트랜잭션 템플릿  (0) 2024.03.01
[Spring DB] 트랜잭션 매니저  (0) 2024.02.29