📌개요
Spring Boot에서 애플리케이션 설정을 구성할 때 자주 쓰이는 @Configuration과 테스트 환경에서 활용되는 @TestConfiguration은 비슷해 보이지만 동작 방식과 적용 범위가 다르다.
두 어노테이션의 자동 등록 여부, 프로필 영향, 스캔 시점을 기준으로 비교해보고 어떤 상황에서 적절히 선택해야 하는지 정리한다.
📌내용
1. 자동 등록 여부
@Configuration
@Component계열 어노테이션처럼 Spring의 컴포넌트 스캔 대상에 포함된다.- 별도의 import 없이도
ApplicationContext초기화 시 자동으로 등록된다.
@TestConfiguration
- 자동 스캔 제외 대상이다.
- 테스트 컨텍스트에선 기본적으로 로드되지 않으며, 다음과 같은 경우에만 적용된다:
- 테스트 클래스 내부 static class 로 선언했을 때
@Import등을 통해 명시적으로 가져왔을 때
2. 프로필(Profile) 영향
- 두 어노테이션 모두
@Profile을 함께 사용하면 활성화된 profile에 따라 적용 여부가 결정된다. - 하지만
@TestConfiguration은 기본적으로 스캔되지 않기 때문에, import되거나 테스트 내부에 선언된 경우에만 프로필 조건이 평가된다.
3. 적용 시점 / 스캔
@Configuration
- 애플리케이션 실행 시 Spring Context 초기화 과정에서 컴포넌트 스캔, Bean 정의 등록 순서로 처리된다.
@TestConfiguration
- 테스트 실행 시 컨텍스트에 주입된다.
@Import된 경우에는 일반 컴포넌트보다 먼저 적용되며 이후 테스트 컨텍스트에 필요한 빈들을 우선적으로 교체하거나 오버라이드할 수 있다.
4. 사용 목적
@Configuration
- 프로덕션 및 애플리케이션 전역 설정을 관리한다.
- 예:
DataSource,Service Bean,MessageConverter설정 등.
@TestConfiguration
- 테스트 전용 설정을 분리하기 위한 용도로 사용한다.
- 예:
MockBean,Stub,Testcontainers 초기화, 테스트용 Repository 대체 설정 등.
🎯결론
@Configuration- 애플리케이션 전역 설정
- 컴포넌트 스캔 대상
- 프로덕션/테스트 어디든 포함될 수 있음
@TestConfiguration- 테스트 전용 설정
- 자동 스캔 제외 (명시적 import 또는 static inner class로 사용)
- 운영 환경에서는 로딩되지 않음. “운영 코드와 테스트 설정의 경계"를 안전하게 보장
⚙️EndNote
사전 지식
- Spring IoC Container (Bean 관리 메커니즘)
- Spring Boot TestContext Framework
- Profile 기반 환경 분리
더 알아보기
- Spring Framework @Configuration 공식 문서
- Spring Boot @TestConfiguration 공식 문서
- 테스트 설정 패턴:
@MockitoBean,@Import,@ActiveProfiles
