https://sundaland.tistory.com/390
[ ▶ AutoConfigurationImportSelector ]
AutoConfigurationImportSelector는 Spring Boot의 자동 구성(autoconfiguration) 메커니즘에서 중요한 역할을 담당하는 클래스이다. 이 클래스는 애플리케이션이 시작될 때 필요한 자동 구성 클래스를 동적으로 선택하는데 사용된다. Spring Boot에서는 기본적으로 META-INF/spring.factories 파일을 통해 자동 구성 클래스를 찾지만, Spring Boot 2.7 이후로는 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일도 함께 사용되기 시작했다.
[ ▷ AutoConfigurationImportSelector의 역할 ]
AutoConfigurationImportSelector는 애플리케이션의 클래스 경로에서 필요한 자동 구성 클래스를 선택하는 기능을 제공하는 ImportSelector 인터페이스를 구현한 클래스이다. 이 클래스는 주로 @EnableAutoConfiguration 또는 @SpringBootApplication 애노테이션이 선언된 곳에서 호출되어, 애플리케이션에 필요한 자동 구성 클래스를 로드한다.
[ ▷ 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에 추가한다.
[ ▷ 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에 의해 자동으로 선택되고, 애플리케이션의 컨텍스트에 등록된다.
[ ▷ AutoConfigurationImportSelector의 동작 방식 ]
AutoConfigurationImportSelector는 자동 구성 클래스를 선택하는 핵심 메커니즘을 다음과 같이 수행한다.
- 먼저, spring.factories와 AutoConfiguration.imports 파일을 둘 다 스캔하여 사용 가능한 자동 구성 클래스를 찾아낸다.
- 이 클래스는 @EnableAutoConfiguration의 구현체로서, getAutoConfigurationEntry 메서드를 통해 자동 구성 클래스를 선택한다.
- 이 과정에서 조건부 애노테이션인 @ConditionalOnClass, @ConditionalOnMissingBean, @ConditionalOnProperty 등이 선언된 구성 클래스가 있는 경우, 해당 조건이 충족될 때에만 그 클래스를 애플리케이션 컨텍스트에 추가한다.
[ ▷ AutoConfiguration.imports 파일 사용의 장점 ]
Spring Boot 2.7 이후로 AutoConfiguration.imports 파일을 도입한 이유는 몇 가지 장점을 제공하기 위함이다.
- 모듈성: 각 모듈의 자동 구성을 독립적으로 관리할 수 있습니다. 이는 모듈 간의 의존성을 최소화하고, 더 깔끔한 구성 관리를 가능하게 한다.
- 가독성 및 간결성: spring.factories 파일에 비해 더 간단한 형식을 제공하여 자동 구성 클래스를 나열할 때 중복된 정보를 줄일 수 있다.
- 호환성 유지: spring.factories 파일은 여전히 사용 가능하므로, 이전 버전의 Spring Boot 애플리케이션과도 호환성을 유지할 수 있다.
[ ▷ 우선순위 및 적용 ]
두 파일을 사용하는 경우, AutoConfiguration.imports 파일이 더 높은 우선순위를 갖는다. 만약 동일한 클래스가 두 파일에 정의되어 있다면, AutoConfiguration.imports 파일에 정의된 내용이 우선적으로 적용된다. 다만, spring.factories는 여전히 하위 호환성을 제공하고 있으며, Spring Boot 2.7 이전 버전에서는 계속 사용될 수 있다.
[ ▷ 정리 ]
AutoConfigurationImportSelector는 Spring Boot의 자동 구성 클래스를 동적으로 선택하는 메커니즘을 제공하며, Spring Boot 2.7 이후부터는 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일을 통해 더 간결하고 모듈화된 방식으로 자동 구성을 관리할 수 있게 되었다. 이전의 spring.factories 파일과 함께 동작하여 하위 호환성을 유지하면서도, 새로운 방식의 자동 구성을 제공한다.
'Spring Boot > Auto-Configuration' 카테고리의 다른 글
ConfigurationClassParser (0) | 2024.10.21 |
---|---|
DeferredImportSelector (0) | 2024.10.21 |
@Import (0) | 2024.10.21 |
@AutoConfigurationPackage (0) | 2024.10.21 |
Project Classpath (0) | 2024.10.21 |