목록 보기
Elasticsearch 병렬 테스트를 향한 여정
백엔드

Elasticsearch 병렬 테스트를 향한 여정

우아한 형제들
우아한 형제들
2024년 8월 1일

두줄요약

Elasticsearch 통합 테스트의 병렬 실행에서 발생한 alias 충돌 문제를 해결한 과정을 정리했습니다. 프로세스별 네임스페이스로 인덱스를 분리해 격리와 성능을 함께 확보했습니다.

문제 상황

  • Elasticsearch 의존 통합 테스트가 1,500개 이상으로 늘어나 CI/CD 수행 시간이 10분을 초과
  • 멀티모듈 환경에서 gradle test --parallel 적용 시 공유 ES 자원 격리 부족으로 alias 중복과 동시성 문제 발생

원인 분석

  • 병렬 테스트가 모듈 단위로 분리된 프로세스에서 실행되어 단순 스레드 락으로 제어 불가
  • 동일 alias를 여러 테스트가 동시에 확인하고 생성하는 경쟁 상태로 인해 write index 충돌 발생

해결 방법

  • 분산락을 검토했지만 DB 의존성 추가와 락 오버헤드, 문서 수준 격리 문제로 제외
  • 테스트 프로세스마다 고유한 네임스페이스를 부여해 index/alias 이름에 prefix를 붙이는 방식 채택
  • 프로세스별로 분리된 인덱스를 사용해 ES만으로 격리와 병렬 실행 성능을 동시에 확보

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...