[기여도]
- 백엔드 개발자(본인)
[문제]
테스트 실패로 인한 배포 지연
- Spring Batch 프로젝트의 테스트코드 양이 증가하며, OOM 문제로 인해, 테스트가 50분이 넘도록 돌아가지 않고 실패
[어려웠던 점과 극복 방법]
- 테스트 환경의 복잡성
- Spring Batch 공식 문서와 기존 코드 분석을 통해 BatchJob, Step, Tasklet 간의 관계 및 실행 흐름을 파악
- Application Context의 캐싱 원리 및 의존성 주입 방식에 대해 추가 학습
- 테스트 실행 시 메모리 사용량과 성능 저하를 유발하는 불필요한 빈 및 의존성을 추적
- Mock 객체를 사용해 테스트가 꼭 필요한 로직만 실행되도록 수정
Spring Batch는 Writer/Reader/Processor 활용한 대규모 데이터 처리와 @SpringBatchTest를 활용한 Job Test로 인해 Application Context 설정이 복잡했고 이는 테스트 시 불필요한 의존성까지 로드하게 만드는 주요 원인이었음
→ Spring Batch의 동작 원리 학습
→ 코드 분석 및 불필요한 의존성 파악
- 테스트 전략이 통일되지 않아 과도한 통합 테스트와 중복 설정
- 테스트 최적화 작업 후, 이를 팀원들에게 가이드로 작성하여 전파
- 코드 리뷰 → 표준화된 테스트 전략이 유지되도록 피드백 제공
일부 테스트는 단위 테스트로 작성되어야 할 부분에서도 과도하게 통합 테스트를 수행함
→ 코드리뷰 및 사내 전파
[해결방안]
Spring Batch 테스트 코드 최적화
- Application Context 캐싱이 제대로 되지 않아 테스트 성능 저하 → 캐싱 활용
- Mock 객체 전략 부재로 Context 캐싱 방해 → 제거
- 불필요한 의존성 주입으로 전체 컨텍스트를 로드하는 비효율적인 테스트 구성 → 필요한 의존성만 주입
- Tasklet, Repository 단위 테스트에서 과도한 설정 사용 → 필요한 의존성만 주입
- 중복 어노테이션 사용으로 인한 리소스 낭비 → 제거
[결과]

개선되기 전 Heap Memory 사용량

개선 이후 Heap Memory 사용량
Heap Memory 사용량 45% 절감 (750MB → 412MB), 테스트코드 실행 속도 90% 개선
[활용기술]
- Kotlin, Spring Batch, Junit5, Kotest, JPA, QueryDSL