피드로 돌아가기
후기 서비스 AWS Opensearch 도입기
컬리 기술블로그컬리 기술블로그
Backend

후기 서비스 AWS Opensearch 도입기

컬리가 MySQL 5.7 마이그레이션 중 과도한 IN절 쿼리로 인한 레이턴시 2~3배 증가 문제를 AWS OpenSearch 도입으로 최대 레이턴시 17초에서 200ms로 단축

2023년 11월 23일12intermediate

Context

후기 서비스는 MySQL 5.6의 중앙집중형 데이터베이스에서 MySQL 5.7의 분산 데이터베이스로 무중단 마이그레이션을 진행했다. 그러나 도메인 기능에 필수적인 과도한 IN절 쿼리로 인해 filesort 오버헤드가 발생했고, MySQL 5.7의 쿼리 옵티마이저 설정 조정에도 병목 현상이 해소되지 않았다. 2월 28일 Amazon Aurora MySQL 호환 버전 1 수명 종료라는 시간 제약이 있었다.

Technical Solution

  • 검색 엔진 선택: MongoDB 같은 NoSQL 대신 AWS OpenSearch 도입으로 역색인을 활용한 후기 내용 및 상품 검색 구현
  • 아키텍처 패턴 적용: CQRS 패턴과 Materialized View Pattern을 조합하여 역정규화된 데이터를 OpenSearch에 저장
  • 이벤트 기반 구조 도입: 후기 등록/수정/삭제 시 원본 데이터 작업과 OpenSearch 작업을 분리하기 위해 EventDriven Architecture 적용
  • 인스턴스 사양 결정: Ngrinder 성능 테스트, Datadog APM, AWS OpenSearch Monitoring을 활용하여 4xlarge 기준 1200RPS / CPU 70~80% 수준 결정
  • 점진적 배포 전략: Canary 배포로 오전 10시 일부 서버 배포 후 모니터링, 오후 3시 45분 전체 운영 인스턴스 배포

Impact

  • 최대 레이턴시: 17초 → 200ms로 감소
  • MySQL 지표 안정화 및 후기 목록 조회 속도 개선

Key Takeaway

분산 데이터베이스 마이그레이션 중 쿼리 최적화로 해결 불가능한 구조적 병목이 발생하면, 검색 성능이 필수인 도메인에서는 역색인 기반 검색 엔진 도입이 단순 SQL 튜닝보다 더 근본적인 해결책이 될 수 있다. 아울러 EventDriven Architecture로 읽기/쓰기 경로를 분리하면 복잡한 동기화 로직을 제거하고 시스템 결합도를 낮출 수 있다.


대규모 후기/댓글 데이터를 다루는 이커머스 플랫폼에서 IN절 기반 필터링과 전문 검색(후기 내용, 상품명 등)이 동시에 필요하다면, 역정규화 + Materialized View 패턴으로 AWS OpenSearch를 도입하고 EventDriven Architecture로 쓰기 경로를 분리할 때 레이턴시 85% 이상 단축이 가능하다.

원문 읽기
후기 서비스 AWS Opensearch 도입기 | Devpick