1. Test환경에서 SpringBootTest와 DirtiesContext에 대하여
@SpringBootTest(webEnvironment = DEFINED_PORT)는 실제 서버를 고정 포트로 띄우 는 방식이라 테스트 간 충돌 가능성이 있습니다. 이미 다른 프로세스가 그 포트를 쓰고 있으면 깨지고, 테스트를 병렬로 돌리기도 불편합니다. 그래서 통합 테스트에 서 실제 서버가 꼭 필요하면 보통 RANDOM_PORT를 더 선호합니다. 더 나아가 컨트롤 러 테스트라면 경우에 따라 @WebMvcTest + MockMvc가 더 가볍고 빠릅니다.
@DirtiesContext(classMode = BEFORE_EACH_TEST_METHOD)도 기본 권장값은 아닙니다. 이유는 매 테스트마다 스프링 컨텍스트를 통째로 다시 띄워서 매우 느리고 무겁기 때문입니다. 이건 “격리 문제를 강제로 해결하는 장치”에 가깝고, 정말 컨텍스트 상 태 자체를 테스트가 오염시키는 경우에만 쓰는 편입니다. 보통은 DB 데이터만 초기 화하면 되므로:
- @Transactional 롤백
- @Sql로 정리
- @BeforeEach에서 DELETE/TRUNCATE 같은 방식이 더 일반적입니다.
지금 네 테스트 맥락에서 실무적으로 더 나은 쪽은 보통 이겁니다:
- HTTP 서버가 꼭 필요하면 @SpringBootTest(webEnvironment = RANDOM_PORT)
- 상태 정리는 @DirtiesContext 대신 DB 정리로 해결