티스토리 뷰
목차
✅1. Spring Boot의 자동 설정이란?
Spring Boot는 @EnableAutoConfiguration을 통해
필요한 Bean 설정을 자동으로 구성해주는 기능을 제공한다.
즉, 우리가 DataSource, DispatcherServlet, Jackson, SecurityFilter 등을
직접 설정하지 않아도 자동으로 등록해주는 것
2. @SpringBootApplication 안에 숨어 있는 핵심
@SpringBootApplication
- 사실 이것은 다음 3개의 어노테이션을 묶은 복합 어노테이션이다.
@Configuration
@ComponentScan
@EnableAutoConfiguration
- 이 중 자동 설정의 핵심은 @EnableAutoConfiguration이다.
3. @EnableAutoConfiguration의 내부 동작
📌핵심 구조
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
- 이 어노테이션은 내부적으로 AutoConfigurationImportSelector를 통해 자동 설정 클래스 목록을 읽어와 등록한다.
4. 자동 설정 클래스 목록은 어디에?
✅spring-boot-autoconfigure JAR 내부에 존재하는 META-INF/spring.factories 또는 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 파이에서 로딩된다.
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
- 여기에 있는 클래스들이 조건에 맞으면 Bean으로 등록됨
5. 조건 기반 설정 : @Conditional의 세계
- Spring Boot는 무조건 Bean을 등록하지 않는다.
- 조건이 맞는 경우에만 등록한다.
📌 주요 조건 어노테이션
| 어노테이션 | 설명 |
| @ConditionalOnClass | 클래스가 클래스패스에 존재할 경우 |
| @ConditionalOnMissingBean | 특정 Bean이 없는 경우에만 등록 |
| @ConditionalOnProperty | application.yml에 특정 속성이 있을 때만 |
| @ConditionalOnWebApplication | 웹 애플리케이션 환경일 경우 |
예시 :
@ConditionalOnClass(DataSource.class)
@ConditionalOnProperty(name = "spring.datasource.url")
public class DataSourceAutoConfiguration { ... }
6. Bean 우선순위 결정 방식
- 자동 설정보다 개발자가 수동으로 등록한 Bean이 우선
- 예 : @Bean이나 @Configuration으로 등록한 경우, 해당 Bean이 사용됨
- @ConditionalOnMissingBean으로 자동 설정의 중복 방지를 처리함
7. 실무에서 자동 설정 무시하거나 커스터마이징하기
✅ 자동 설정 제외
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
✅ 특정 조건 설정
spring:
jackson:
date-format: yyyy-MM-dd
property-naming-strategy: SNAKE_CASE
- 이 설정은 JacksonAutoConfiguration에서 읽어 사용됨
8. 자동 설정 만들기 (커스텀 AutoConfiguration)
Step 1.@Configuration 클래스 정의
@Configuration
@ConditionalOnProperty(name = "featureX.enabled", havingValue = "true")
public class FeatureXAutoConfiguration {
@Bean
public FeatureXService featureXService() {
return new FeatureXService();
}
}
Step 2. 등록 파일 작성
resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
com.example.autoconfig.FeatureXAutoConfiguration
- 이후 의존성 추가만으로도 설정 자동 반영 가능
9. 자동 설정 확인 방법
1.
$ mvn spring-boot:run -Ddebug
2.
debug: true
출력 예 :
Positive matches:
- WebMvcAutoConfiguration matched
Negative matches:
- SecurityAutoConfiguration did not match
- 어떤 설정이 적용/제외됐는지 확인 가능
✅ 마무리 요약
| 항목 | 요약 |
| 핵심 어노테이션 | @EnableAutoConfiguration -> 자동 설정 클래스 등록 |
| 적용 기준 | @Conditional 계열 어노테이션으로 조건 판단 |
| 우선순위 | 개발자 수동 설정 > 자동 설정 |
| 실무 활용 | 자동 설정 활용/제외/ 확장 모두 가능 |
🔜 다음 포스팅에서는 Spring MVC 요청 처리 흐름에 대해서 알아보고자 한다. - DispatcherServlet -> HandlerMapping -> Controller
'IT > Spring' 카테고리의 다른 글
| Spring Scheduler & Async 처리 흐름 - 정기 작업과 비동기 실행 완전 정복 (0) | 2025.07.15 |
|---|---|
| Spring MVC 요청 처리 흐름 완전 정복 - DispatcherServlet부터 Controller까지 (0) | 2025.07.02 |
| 🔐 Spring Security & JWT 인증 흐름 완전 정복 - 로그인 인증부터 토큰 발급, 필터 구조 (0) | 2025.06.24 |
| ⚠️Spring 예외 처리 완전 정복 - @ControllerAdvice, @ExceptionHandler, 그리고 실무 예외 전략 (0) | 2025.06.18 |
| 🔄 Spring의 @Transactional 완전 정복 - 개념, 원리, 동작 방식, 트러블 슈팅까지 (0) | 2025.06.11 |