2024. 10. 18. 09:45ㆍSpring Boot/Spring Boot Auto Configuration
AutoConfigurationImportSelector
는 Spring Boot의 자동 구성(autoconfiguration) 메커니즘에서 중요한 역할을 담당하는 클래스입니다. 이 클래스는 애플리케이션이 시작될 때 필요한 자동 구성 클래스를 동적으로 선택하는데 사용됩니다. Spring Boot에서는 기본적으로 META-INF/spring.factories
파일을 통해 자동 구성 클래스를 찾지만, Spring Boot 2.7 이후로는 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
파일도 함께 사용되기 시작했습니다.
자세한 내용은 다음과 같습니다.
1. AutoConfigurationImportSelector
의 역할
AutoConfigurationImportSelector
는 애플리케이션의 클래스 경로에서 필요한 자동 구성 클래스를 선택하는 기능을 제공하는 ImportSelector
인터페이스를 구현한 클래스입니다. 이 클래스는 주로 @EnableAutoConfiguration
또는 @SpringBootApplication
애노테이션이 선언된 곳에서 호출되어, 애플리케이션에 필요한 자동 구성 클래스를 로드합니다.
2. META-INF/spring.factories
파일
Spring Boot의 이전 버전에서는 자동 구성을 할 때 META-INF/spring.factories
파일에 나열된 자동 구성 클래스들을 기준으로 동작했습니다. 이 파일의 형식은 아래와 같습니다.
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfiguration.Class1,\
com.example.autoconfiguration.Class2
이 파일은 EnableAutoConfiguration
키를 기반으로 자동 구성에 사용할 클래스들을 정의합니다. Spring Boot는 이 파일을 읽어 모든 자동 구성 클래스를 로드하고, 각 클래스의 조건이 만족되면 이를 애플리케이션의 ApplicationContext
에 추가합니다.
3. META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
파일
Spring Boot 2.7부터는 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
파일도 함께 사용됩니다. 이는 기존의 spring.factories
파일에서 자동 구성을 분리하고, 더 나은 모듈성과 관리성을 제공합니다. 이 파일은 자동 구성 클래스를 정의하는 새로운 방식으로 도입되었으며, 이 파일의 형식은 다음과 같습니다.
com.example.autoconfiguration.Class1
com.example.autoconfiguration.Class2
이 파일은 spring.factories
와 달리, 더 간결하게 클래스 목록을 나열하는데 중점을 둡니다. 이 파일에 정의된 자동 구성 클래스는 AutoConfigurationImportSelector
에 의해 자동으로 선택되고, 애플리케이션의 컨텍스트에 등록됩니다.
4. AutoConfigurationImportSelector
의 동작 방식
AutoConfigurationImportSelector
는 자동 구성 클래스를 선택하는 핵심 메커니즘을 다음과 같이 수행합니다.
- 먼저,
spring.factories
와AutoConfiguration.imports
파일을 둘 다 스캔하여 사용 가능한 자동 구성 클래스를 찾아냅니다. - 이 클래스는
@EnableAutoConfiguration
의 구현체로서,getAutoConfigurationEntry
메서드를 통해 자동 구성 클래스를 선택합니다. - 이 과정에서 조건부 애노테이션인
@ConditionalOnClass
,@ConditionalOnMissingBean
,@ConditionalOnProperty
등이 선언된 구성 클래스가 있는 경우, 해당 조건이 충족될 때에만 그 클래스를 애플리케이션 컨텍스트에 추가합니다.
5. AutoConfiguration.imports
파일 사용의 장점
Spring Boot 2.7 이후로 AutoConfiguration.imports
파일을 도입한 이유는 몇 가지 장점을 제공하기 위함입니다.
- 모듈성: 각 모듈의 자동 구성을 독립적으로 관리할 수 있습니다. 이는 모듈 간의 의존성을 최소화하고, 더 깔끔한 구성 관리를 가능하게 합니다.
- 가독성 및 간결성:
spring.factories
파일에 비해 더 간단한 형식을 제공하여 자동 구성 클래스를 나열할 때 중복된 정보를 줄일 수 있습니다. - 호환성 유지:
spring.factories
파일은 여전히 사용 가능하므로, 이전 버전의 Spring Boot 애플리케이션과도 호환성을 유지할 수 있습니다.
6. 우선순위 및 적용
두 파일을 사용하는 경우, AutoConfiguration.imports
파일이 더 높은 우선순위를 갖습니다. 만약 동일한 클래스가 두 파일에 정의되어 있다면, AutoConfiguration.imports
파일에 정의된 내용이 우선적으로 적용됩니다. 다만, spring.factories
는 여전히 하위 호환성을 제공하고 있으며, Spring Boot 2.7 이전 버전에서는 계속 사용될 수 있습니다.
7. 정리
AutoConfigurationImportSelector
는 Spring Boot의 자동 구성 클래스를 동적으로 선택하는 메커니즘을 제공하며, Spring Boot 2.7 이후부터는 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
파일을 통해 더 간결하고 모듈화된 방식으로 자동 구성을 관리할 수 있게 되었습니다. 이전의 spring.factories
파일과 함께 동작하여 하위 호환성을 유지하면서도, 새로운 방식의 자동 구성을 제공합니다.
'Spring Boot > Spring Boot Auto Configuration' 카테고리의 다른 글
PostProcessorRegistrationDelegate (0) | 2024.10.18 |
---|---|
AnnotationConfigServletWebServerApplicationContext (0) | 2024.10.18 |
DeferredImportSelector (0) | 2024.10.17 |
spring-boot-autoconfigure.jar (0) | 2024.10.16 |
spring.factories (0) | 2024.10.16 |