데브허브 | DEVHUB | [1부] 표준프레임워크 신규버전 v4.3 검색 기능에 활용된 AWS OpenSearch 알아보기! (김세웅 리더 OpenSearch User Group)[1부] 표준프레임워크 신규버전 v4.3 검색 기능에 활용된 AWS OpenSearch 알아보기! (김세웅 리더 OpenSearch User Group)
- OpenSearch는 커뮤니티 주도 오픈소스 검색 플랫폼으로, 분석, 벡터 데이터베이스, 옵저버빌리티, 보안(SIEM), APM 등 다양한 용도로 활용됩니다. 🌐
- 2021년 ElasticSearch의 라이선스 변경(ELv2)에 대응하여 Amazon이 Apache 2.0 라이선스 버전을 포크하며 탄생했으며, 4년 만에 검색 엔진 상위권에 등극했습니다. 🚀
- OpenSearch는 코어(검색 엔진), 대시보드(시각화), 데이터 프리퍼(전처리) 세 가지 주요 플랫폼으로 구성되며, 정보 검색 및 데이터 분석/시각화에 최적화되어 있습니다. 📊
- 내부적으로 Apache Lucene 엔진을 기반으로 하며, 루신 인덱스, 세그먼트, 역색인(Inverted Index) 구조를 통해 효율적인 키워드 검색을 제공합니다. 🔍
- 데이터베이스와 달리 스케일 아웃이 어려웠던 루신의 한계를 극복하기 위해 샤딩 및 클러스터링 아키텍처(Zen Discovery)를 도입하여 고가용성과 확장성을 확보했습니다. 🏗️
- 집계 및 정렬 쿼리 성능 향상을 위해 필드 데이터 캐시(JVM 힙)와 독밸류(페이지 캐시/디스크)를 활용하여 역색인 구조의 단점을 보완합니다. 🧠
- 검색 결과의 관련성 순위 결정에는 BM25(Best Matching 25th version) 알고리즘을 사용하며, TF-IDF에 문서 길이 가중치를 추가하여 정확도를 높였습니다. 🥇
- OpenSearch 인덱스는 추상화된 레이어로, 샤드, 루신 인덱스, 불변 객체인 세그먼트로 구성되어 데이터 저장 및 관리를 효율화합니다. 🧱
- JVM 힙 메모리는 전체 네이티브 메모리의 50%를 할당하고 최대 32GB로 설정하는 것이 압축 최적화(Compression OOPs) 및 성능에 유리합니다. 💾
- 데이터 색인 과정은 인메모리 버퍼 -> 리프레시(검색 가능, 파일 시스템 캐시) -> 플러시(디스크 저장, 영속성 확보) -> 머지(세그먼트 병합, 성능 최적화) 단계를 거칩니다. 🔄
- 리프레시 후 데이터는 검색 가능하지만, 노드 장애 시 유실될 수 있으므로 메타데이터는 별도 안정적인 저장소에 관리하는 것이 권장됩니다. ⚠️
- 데이터 삭제 및 수정은 기존 세그먼트에 삭제 마커를 추가하고, 새로운 세그먼트를 생성한 후 병합 시점에 정리되는 불변 객체 특성 때문에 성능 저하가 발생할 수 있습니다. 🗑️
- 잦은 업데이트보다는 전체 재색인(Full Re-indexing)이나 인덱스 라이프사이클 관리를 통해 파편화를 줄이고 효율적인 OpenSearch 운영을 하는 것이 좋습니다. ♻️
- API 호출 시 내부적으로 Q와 스레드 풀을 사용하며, Q가 가득 차면 429 에러를 반환하므로 워크로드에 따른 Q 관리 및 스케일링이 중요합니다. 🚦