Spring Boot Auto Configuration(스프링 부트 자동 설정)
스프링 부트는 다양한 라이브러리와 기술 스택을 지원하며, 개발자가 별도의 코드 작성 없이도 쉽게 사용할 수 있도록 자동 설정(Auto Configuration) 기능을 제공한다.
자동 설정 메커니즘(Spring Boot 3.x 기준)
1. @EnableAutoConfiguration과 Import 선택기
@SpringBootApplication에 포함된 @EnableAutoConfiguration 애노테이션이 스프링 부트의 자동 설정 기능을 활성화한다.
내부적으로
@Import(AutoConfigurationImportSelector.class)를 사용하여 자동 설정 클래스를 스프링 컨테이너에 등록AutoConfigurationImportSelector클래스는 설정된 후보군 중 실제 빈으로 등록할 클래스들을 필터링하여 결정spring-boot-autoconfigure라이브러리 내의...autoconfigure.AutoConfiguration.imports파일을 사용하여 자동 설정 클래스 목록을 관리
2. 조건부 설정(@Conditional)
로드된 모든 자동 설정 클래스가 실제로 동작하는 것은 아니며, 각각의 자동 설정 클래스는 @Conditional... 애노테이션 그룹을 통해 특정 조건이 만족될 때만 활성화된다.
@ConditionalOnClass: 특정 클래스가 클래스패스에 존재할 때@ConditionalOnMissingBean: 특정 빈이 이미 등록되어 있지 않을 때(개발자의 커스텀 설정을 우선시)@ConditionalOnProperty: 특정 설정 값이 존재하거나 일치할 때
3. 자동 설정의 우선순위 제어
여러 자동 설정이 얽혀 있을 때, 실행 순서를 제어하는 방법은 다음과 같다.
@AutoConfigureOrder: 자동 설정 클래스 간의 절대적인 우선순위 지정@AutoConfigureAfter/@AutoConfigureBefore: 특정 자동 설정 클래스가 실행된 후 또는 전에 실행되도록 명시적 의존성 정의
프로퍼티 바인딩 및 빈 생성 상세 흐름(DataSource 예시)
자동 설정 클래스는 @ConfigurationProperties가 적용된 프로퍼티 객체를 참조한다.
외부 설정(External Configuration): 설정 소스로부터 원천 데이터 수집
application.yml, .properties, 환경 변수 등 다양한 소스로부터 설정값 확보
spring.datasource와 같은 특정 접두사를 기반으로 관련 데이터를 바인더로 전달
프로퍼티 바인딩(Property Binding): 설정 파일의 값을 자바 객체에 매핑
확보된 데이터를 DataSourceProperties 클래스의 필드에 주입
문자열 기반의 직접 접근 방식보다 타입 안정성 보장
유연한 바인딩을 통해 다양한 소스의 값을 통합하여 자바 객체화 가능
자동 설정 프로세스(Auto Configuration Process): 빈 생성 조건 검증
클래스패스에 특정 라이브러리가 포함되어 있는지 확인
@ConditionalOnClass를 통해 HikariCP와 같은 실제 구현체의 존재 여부 판단주입받은 프로퍼티 객체에 필수적인 설정값(예: URL)이 누락되지 않았는지 검사
조건이 하나라도 충족되지 않으면 해당 자동 설정은 전체가 무시되어 메모리 자원 절약
빈 등록(Bean Registration): 최종 인스턴스 생성 및 컨테이너 등록
모든 조건 충족 시 주입받은 프로퍼티를 사용하여 실제 빈(예: HikariDataSource) 생성
사용자가 직접 빈을 정의 시
@ConditionalOnMissingBean조건에 의해 자동 설정 빈은 생성되지 않음(개발자의 명시적 설정을 자동 설정보다 우선시)생성된 빈은 스프링 컨테이너(ApplicationContext) 등록
참고자료
Last updated