[상황]
다음 테스트가 실패했다.
- contextLoads()
- AdminRefundOptimisticLockControllerTest
- AdminRefundOptimisticLockServiceTest
[원인]
에러 트레이스를 보니 동일하게 BeanDefinitionOverrideException 때문에 실패했다.

[해결 방안]
로그를 좀 더 내려보니 아래와 같은 해결 방식을 제안했다.

Description: The bean 'redisTemplate', defined in class path resource [com/example/allinmarket/common/redis/RedisConfig.class], could not be registered. A bean with that name has already been defined in class path resource [com/example/allinmarket/common/config/TestRedisConfig.class] and overriding is disabled. Action: Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
RedisConfig.class에 정의된 redisTemplate과 같은 이름의 빈이 이미 등록되어서, 사용할 수 없다는 것이었다.
현재 오버라이딩 설정이 꺼져 있어 오버라이딩이 안 되었는데, 오버라이딩을 설정을 켜서 다시 시도해보라는 것이다.
AI의 분석도 동일했다.
원인 분석
1. @SpringBootTest가 전체 애플리케이션 컨텍스트를 로드하면 RedisAutoConfiguration이 실행됨
2. RedisAutoConfiguration이 redisTemplate 빈을 먼저 등록
3. @Import(TestRedisConfig.class) 처리 시 TestRedisConfig.redisTemplate()이 동일한 이름의 빈을 다시 등록하려 함
4. spring.main.allow-bean-definition-overriding=false (기본값) → BeanDefinitionOverrideException
RedisConfig는 @Profile("!test")로 테스트 시 제외되므로 문제 없음. 충돌은 오직 RedisAutoConfiguration vs TestRedisConfig 사이에서 발생. AllInMarketApplicationTests, AdminRefundOptimisticLockServiceTest도 동일 패턴이므로 잠재적으로 동일한 문제를 가짐.
수정 방법
application-test.yml에 spring.main.allow-bean-definition-overriding: true 추가.
- 테스트 프로파일에서만 적용되므로 프로덕션 영향 없음
- TestRedisConfig의 redisTemplate mock이 auto-configured 빈을 정상적으로 override함
- @SpringBootTest + @Import(TestRedisConfig.class) 패턴을 사용하는 모든 테스트를 한 번에 해결
수정 파일
- src/test/resources/application-test.yml — spring.main.allow-bean-definition-overriding: true 추가
트러블슈팅 과정에서 추가 에러도 확인했는데, RedisRepositoriesAutoConfiguration이 redisKeyValueAdapter 빈을 자동 생성하는데, 내부적으로 redisTemplate.getConnectionFactory()를 호출한다. mock RedisTemplate은 Null을 반환하므로 null을 받아 예외가 발생했다. 프로젝트에서 @RedisHash / @EnableRedisRepositories를 전혀 사용하지 않기 때문에, spring.data.redis.repositories.enabled: false를 통해 불필요한 자동설정을 차단해 해결했다.

'Projects > [Final] Shopping Mall Project' 카테고리의 다른 글
| 가상 스레드 적용 전 테스트 결과 (결제 생성) (0) | 2026.05.07 |
|---|---|
| [트러블슈팅?] .setAllowedOrigins("")에 특정 도메인만 허용하기 (0) | 2026.05.07 |
| Request Body 재사용 불가로 Internal API 테스트 400 오류 (0) | 2026.05.05 |
| Spring Security 커스텀 필터 순서 오류로 통합 테스트 실패 (0) | 2026.05.05 |
| [트러블슈팅] WebSocket + STOMP 적용하여 알림 구현하기 (0) | 2026.05.05 |