상황
OrderControllerTest를 작성하고 실행했더니 4개 테스트가 모두 실패했다. 오류 메시지를 분석한 결과 JPA 관련 빈 생성 실패가 원인이었다.
원인 분석
@WebMvcTest는 웹 레이어만 로드하는 슬라이스 테스트다. 그런데 @SpringBootApplication이 붙은 메인 클래스를 @SpringBootConfiguration으로 인식해서, 같은 클래스에 선언된 @EnableJpaAuditing까지 처리하려 한다.
JPA Auditing은 jpaMappingContext 빈이 필요한데, @WebMvcTest는 웹 레이어만 로드하므로 해당 빈이 존재하지 않아 빈 생성에 실패한다.
@EnableJpaAuditing ← JPA 컨텍스트 필요
@SpringBootApplication
public class GigaCoffeeApplication { ... }
@WebMvcTest 입장에서는 메인 클래스를 스캔할 때 @EnableJpaAuditing을 만나지만 JPA 컨텍스트가 없어 처리할 수 없는 상황이 된다.
해결 방법
@EnableJpaAuditing을 별도 @Configuration 클래스로 분리한다. @WebMvcTest는 분리된 @Configuration 클래스를 자동으로 포함하지 않아 충돌이 사라진다.
@Configuration
@EnableJpaAuditing
public class JpaAuditingConfig {
}
@SpringBootApplication
public class GigaCoffeeApplication {
public static void main(String[] args) {
SpringApplication.run(GigaCoffeeApplication.class, args);
}
}
결과
4개 테스트가 모두 통과했다.
인사이트
@EnableJpaAuditing은 처음부터 별도 @Configuration으로 분리해두는 것이 좋다. @WebMvcTest뿐 아니라 JPA 컨텍스트 없이 동작하는 다른 슬라이스 테스트에서도 동일한 문제가 발생할 수 있기 때문이다. 슬라이스 테스트를 사용하는 프로젝트라면 메인 클래스에 불필요한 설정을 두지 않는 것이 원칙이다.
'Projects > [Spring] Coffee Shop Project' 카테고리의 다른 글
| [Test] Spring Boot contextLoads 테스트가 실패하는 이유 (0) | 2026.04.04 |
|---|---|
| Spring 내부 이벤트와 Kafka 이벤트 처리, 무엇이 다를까? (0) | 2026.04.04 |
| [트러블슈팅] JSON 응답 필드 순서 고정하기 (JsonPropertyOrder) (0) | 2026.04.03 |
| [트러블슈팅] : data.sql 실행 시 Table doesn't exist 오류 해결하기 (0) | 2026.04.03 |
| [코드 스타일] 엔티티에선 래퍼 클래스를 쓰는데, 서비스에선 원시 타입을 사용해도 되는걸까? (0) | 2026.04.03 |