
백엔드
Elasticsearch 병렬 테스트를 향한 여정
두줄요약
Elasticsearch 통합 테스트의 병렬 실행에서 발생한 alias 충돌 문제를 해결한 과정을 정리했습니다. 프로세스별 네임스페이스로 인덱스를 분리해 격리와 성능을 함께 확보했습니다.
문제 상황
- Elasticsearch 의존 통합 테스트가 1,500개 이상으로 늘어나 CI/CD 수행 시간이 10분을 초과
- 멀티모듈 환경에서
gradle test --parallel적용 시 공유 ES 자원 격리 부족으로 alias 중복과 동시성 문제 발생
원인 분석
- 병렬 테스트가 모듈 단위로 분리된 프로세스에서 실행되어 단순 스레드 락으로 제어 불가
- 동일 alias를 여러 테스트가 동시에 확인하고 생성하는 경쟁 상태로 인해 write index 충돌 발생
해결 방법
- 분산락을 검토했지만 DB 의존성 추가와 락 오버헤드, 문서 수준 격리 문제로 제외
- 테스트 프로세스마다 고유한 네임스페이스를 부여해 index/alias 이름에 prefix를 붙이는 방식 채택
- 프로세스별로 분리된 인덱스를 사용해 ES만으로 격리와 병렬 실행 성능을 동시에 확보
