Improving Spring Boot test efficiency by Sergei Chernov @ Spring I/O 2025
- Spring Boot 기반 통합 테스트 최적화는 대규모 monolith 및 마이크로서비스 환경 모두에서 중요 🚀
- Spring 컨텍스트를 동시에 너무 많이 활성화하는 것이 주요 문제 💥
- 각 테스트 클래스 후 컨텍스트를 종료하는 @DirtiesContext는 테스트 속도를 저하시키므로 주의 🐌
- spring.test.context.cache.maxSize를 조정하여 컨텍스트 캐시 크기를 줄이는 것이 효과적 ⚙️
- 통합 테스트 구성의 중복을 줄이기 위해 공통 설정을 부모 클래스로 추출하여 재사용률을 높임 ♻️
- Mock 빈 사용 시, 부모 클래스 또는 공유 구성으로 이동하여 컨텍스트 구성을 단순화 🎭
- 데이터베이스 테스트 컨테이너를 재사용하기 위해 정적으로 캐싱하고, 정리 정책을 강화 🐳
- Flyway를 사용하는 경우, Docker 이미지를 미리 생성하여 테스트 속도를 향상 🚄
- 여러 데이터베이스를 사용하는 경우, 데이터 소스 초기화를 지연시켜 컨텍스트 초기화 비용을 절감 ⏳
- 동적 포트를 사용하여 테스트 병렬성을 높이고, 포트 충돌을 방지 🚦
- Spring 컨텍스트 종료 시 데이터 소스 및 스레드 풀의 라이프사이클을 올바르게 관리하여 리소스 누수를 방지 🧹
- Spring 배너가 로그에 나타나는 횟수를 통해 컨텍스트 생성 횟수를 추정하고 최적화 방향을 설정 🚩