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. 불필요한 설정 로드 가능성 : 특정 상황에서는 불필요한 설정이 활성화 될 수 있다.
'SPRING' 카테고리의 다른 글
[Spring] JWT(JSON Web Token) 방식과 주의할 점 (0) | 2025.03.05 |
---|---|
[Spring] Spring Boot Container란 무엇인가? (0) | 2024.12.26 |
[Spring] Maven vs Gradle (0) | 2024.12.24 |
[Spring] Spring Boot 2 vs Spring Boot 3 차이가 무엇일까? (1) | 2024.12.23 |
[Spring Boot] 스프링(Spring) vs 스프링 부트(Spring Boot) (0) | 2024.12.23 |