SPRING

[Spring] Spring Boot AutoConfiguration(자동 설정)

sagecode 2024. 12. 23. 22:20

Spring Boot AutoConfiguration은 개발자가 복잡한 설정을 간소화 하고 애플리케이션을 빠르게 구성할 수 있도록 설계된 기능이다. AutoConfiguration은 애플리케이션 실행 시 필요한 설정을 자동으로 적용해주며, 개발자가 비즈니스 로직에만 집중할 수 있게 해준다.

 

예를 들어, spring-boot-starter-data-jpa 의존성을 추가하면 DataSource 및 JPA 설정이 자동으로 구성된다. 웹 서버는 spring-boot-starter-web 의존성을 추가하면 내장 Tomcat과 Spring MVC가 자동으로 설정된다. 이는 Spring Framework에서 수작업으로 설정해야 했던 작업들을 간소화 해준다.

 

1. AutoConfiguration 동작 원리

  • @EnableAutoConfiguration의 역할

@EnableAutoConfiguration은 Spring Boot가 자동 설정을 활성화하도록 지시하는 핵심 Annotation이다. 이 Annotation은 Spring Boot 애플리케이션에서 기본적으로 포함된 @SpringBootApplication 클래스를 로드한다.

  • 클래스패스(classpath) 스캔 및 spring.factories 파일

Spring Boot는 애플리케이션 시작 시 클래스패스를 스캔하여 META-INF/spring.factories 파일에 정의된 AutoConfiguration 클래스를 로드한다. 이 파일은 Spring Boot가 어떤 설정 클래스를 로드해야 하는지 명시한다.

ex)

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration=\
  • 조건부 설정(@Conditional Annotation)

AutoConfiguration 클래스는 조건부 Annotation을 사용하여 특정 조건이 충족될 때만 설정을 활성화한다.

- @ConditionalOnClass : 클래스패스에 특정 클래스가 존재할 경우 설정 활성화

- @ConditionalOnMissingBean : 특정 빈이 존재하지 않을 경우 설정 적용

- @ConditionalOnProperty : 특정 프로퍼티 값에 따라 설정 활성화

  • @SpringBootApplication에서의 동작 흐름

@SpringBootApplication annotation은 내부적으로 다음의 동작을 포함한다.

1. @ComponentScan : 개발자가 정의한 @Component를 스캔하고 빈으로 등록

2. @EnableAutoConfiguration : 자동 설정 클래스를 로드하여, 애플리케이션에 필요한 추가 Bean들을 등록한다.

 

2. AutoConfiguration 장점과 한계

  • 장점

1. 생산성 향상 : 개발자가 반복적으로 설정해야 하는 작업을 자동화한다.

2. 유연성 : 기본 설정을 제공하면서도 필요시 사용자 정의 설정을 허용한다.

  • 단점

1. 디버깅 복잡성 : 자동 설정의 작동 방식이 숨겨져 있어 문제 발생 시 원인 파악이 어려우 수 있다.

2. 불필요한 설정 로드 가능성 : 특정 상황에서는 불필요한 설정이 활성화 될 수 있다.