피드로 돌아가기
Dev.toBackend
원문 읽기
Postgres ILIKE 한계 극복 및 MeiliSearch 도입을 통한 50ms 미만 검색 구현
I Threw Away My ILIKE Queries and My Search Bar Finally Works - MeiliSearch
AI 요약
Context
NestJS와 Postgres 기반의 금융 트래커에서 전역 검색 기능을 구현하며 ILIKE 쿼리를 사용함. 하지만 오타 허용(Typo Tolerance) 불가, 다중 테이블 JOIN으로 인한 복잡도 증가, 검색 결과 하이라이팅 구현의 어려움이라는 기술적 한계에 직면함.
Technical Solution
- 정적 SQL 쿼리에서 전용 Search Engine으로 아키텍처를 전환하여 검색 엔진의 Indexing 메커니즘 활용
- Elasticsearch의 과도한 JVM 리소스 및 설정 복잡도를 배제하고, 가벼운 Docker 기반의 MeiliSearch 채택
- Master Key를 통한 초기 부트스트랩 후, 애플리케이션 계층에는 Scoped API Key만 적용하여 보안 계층 분리
- 환경 변수(MEILISEARCH_URL) 기반의 설정 관리로 배포 환경(Local, Docker, Production) 간 코드 일관성 유지
- searchableAttributes를 명시적으로 설정하여 불필요한 필드 인덱싱을 방지하고 인덱스 크기 최적화 및 검색 속도 향상
- Docker Named Volume 사용으로 OS 간 볼륨 마운트 권한 이슈 해결 및 데이터 영속성 확보
실천 포인트
1. Docker 이미지 사용 시 :latest 태그 대신 특정 버전(v
1.
3
7.0 등)을 핀닝하여 데이터 오염 방지
2. MEILI_ENV=production 설정을 통해 인증되지 않은 API 요청을 원천 차단
3. 검색 엔진 업그레이드 전 반드시 Dump 생성 후 Import 절차 수행
4. 네트워크 토폴로지에 따라 localhost와 서비스 이름(Service Name)을 구분하여 URL 설정