본문 바로가기
Spring

SpringBoot AutoConfiguration

by 혀눅짱 2023. 11. 6.

예시 소스를 먼저 본다.

 

@Slf4j
@Configuration
public class DbConfig {

    @Bean
    public DataSource dataSource(){
        log.info("dataSource 빈 등록");
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setJdbcUrl("jdbc:h2:mem:test");
        dataSource.setUsername("sa");
        dataSource.setPassword("");
        return dataSource;
    }

    @Bean
    public TransactionManager transactionManager(){
        log.info("transactionManager 빈 등록");
        return new JdbcTransactionManager(dataSource());
    }

    @Bean
    public JdbcTemplate jdbcTemplate(){
        log.info("jdbcTemplate 빈 등록");
        return new JdbcTemplate(dataSource());
    }
}

 

JDBC에 필요한 Bean들을 등록후 테스트해본다.

 

@Slf4j
@SpringBootTest
public class DbConfigTest {

    @Autowired
    DataSource dataSource;

    @Autowired
    TransactionManager transactionManager;

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Test
    void checkBean(){
        log.info("dataSource = {}",dataSource);
        log.info("transactionManager = {}",transactionManager);
        log.info("jdbcTemplate = {}",jdbcTemplate);

        assertThat(dataSource).isNotNull();
        assertThat(transactionManager).isNotNull();
        assertThat(jdbcTemplate).isNotNull();
    }
}

 

당연히 테스트는 통과된다 등록한 빈을 의존성주입을 받기 때문에 각각의 객체는 Null이아니다.

 

여기서 빈을 등록하는 @Configuration 어노테이션을 주석하면 어떻게될까?

그래도 테스트는 통과된다. Why?

 

스프링 부트는 자동 구성(Auto Configuration)이라는 기능을 제공하는데, 일반적으로 자주 사용하는 수 많은 빈들을 자동으로 등록해주는 기능이다.
JdbcTemplate , DataSource , TransactionManager 모두 스프링 부트가 자동 구성을 제공해서 자동으로 스프링 빈으로 등록된다.

 

자동 구성 덕분에 개발자는 반복적이고 복잡한 빈 등록과 설정을 최소화 하고 애플리케이션 개발을 빠르게 시작할 수 있다.

 

 

 

스프링 부트가 제공하는 자동 구성 기능을 이해하려면 다음 두 가지 개념을 이해해야 한다.

    @Conditional : 특정 조건에 맞을 때 설정이 동작하도록 한다.
    @AutoConfiguration : 자동 구성이 어떻게 동작하는지 내부 원리 이해

 

 

 

 

 

'Spring' 카테고리의 다른 글

Redis와 SpringBoot 연동  (1) 2023.11.20
@Conditional과 @AutoConfiguration  (0) 2023.11.06
SpringBoot와 웹서버  (0) 2023.10.31
인터셉터 설정  (0) 2023.10.05
전역예외처리  (1) 2023.10.05