Engineering
여기어때 검색서비스 ‘키워드 통합 시스템’ 구축사례
김정훈Dovy(도비) / 검색개발팀여기어때
2025년 11월 11일
원문에서 보기 ↗여기어때 검색플랫폼 ‘키워드 통합 시스템’ 구축기
1. 프로젝트 개요 — 분산된 데이터의 통합 필요성
안녕하세요. 여기어때 검색플랫폼개발팀 도비 입니다.
여기어때의 검색 서비스는 국내 숙소, 해외 숙소, 관광지 등 다양한 도메인별 데이터 소스 를 기반으로 발전해왔습니다.
초기에는 각 도메인에 맞춘 빠른 검색 품질을 유지하는 데 효과적이었지만,
서비스 확장과 데이터 연관성이 커지면서 일관된 관리 체계와 데이터 재활용성 확보가 중요한 과제로 떠올랐습니다.
이에 검색 플랫폼팀은 ‘키워드 통합 시스템’ 구축 프로젝트 를 추진했습니다.
목표는 다음과 같습니다.
- MongoDB 기반의 단일 데이터 허브 마련
- 기존 다중 소스 기반 자동완성 구조의 단순화 및 확장성 확보
- 데이터 관리의 일관성 및 운영 효율성 극대화
2. 기존 구조 분석 및 개선 방향
(1) 기존 구조의 장점
- 빠른 대응력: 각 카테고리(국내/해외 숙소, 관광지 등)를 독립적으로 관리하여 서비스별 요구사항에 빠르게 대응
- 안정적인 품질: 도메인 특성을 반영한 색인 및 랭킹 전략으로 높은 검색 품질 유지
- 다양한 정보 비교: OTA(Online Travel Agency)별 공급망 분리로, 동일 숙소라도 다양한 소스 정보 비교 가능
(2) 개선의 필요성 — 비효율 해소
- 데이터 비일관성: 키워드, 좌표, 주소 등의 구조가 출처마다 상이하여 데이터 연계 및 분석이 어려움
- 복잡한 데이터 흐름: 자동완성 시스템이 여러 DB와 API에서 데이터를 취합하는 구조로 관리 포인트 과다
개선 방향 : 기존의 장점을 유지하면서 데이터 구조를 단일화하여 확장성과 일관성을 극대화
시스템 구성도 (simple version)

3. 핵심 설계 — MongoDB 기반 통합 저장소
(1) MongoDB 기반 통합 구조 설계
각 데이터 출처의 특성을 반영하면서도
공통 속성(keyword, address, coordinate, rankScore 등)을 중심으로 하나의 통합 스키마를 정의했습니다.
MongoDB를 선택한 이유는 다음과 같습니다.

예시 스키마 (simple version)
/** 예시 MongoDB 스키마 (간략화) **/
{
"keyword": "강릉 카페거리",
"category": "관광지",
"address": "강원도 강릉시",
"coordinate": { "type": "Point", "coordinates": [128.896, 37.751] },
"synonyms": ["강릉 커피거리"],
"relatedKeywords": ["안목해변", "감성숙소"],
"rankScore": 85,
"popularity": 1200,
"source": "내부DB",
"nearbyPOI": ["강릉역", "경포대"],
"transitInfo": ["버스", "택시"]
}
(2) Elasticsearch 자동완성 구조 단순화
기존에는 다수의 DB 및 API에서 데이터를 취합해 색인하던 복잡한 구조였으나, 이제는 MongoDB 통합 저장소 하나만 바라보는 단일 구조로 개선했습니다.
- 스키마 통일로 ES 필드 매핑과 색인 정의 단순화
- 신규 데이터 추가 시 동일 로직 재사용 가능
- 검색 품질은 유지하면서 데이터 흐름은 훨씬 간결화

4. 통합 스키마 설계 및 데이터 처리 전략

- 국내/해외 데이터 정규화: 주소 체계를 동일한 깊이로 통일해 관리 일관성 확보
- 해외 숙소 매핑: 공급사별 명칭 차이를 통합 매핑, 어떤 명칭으로 검색해도 동일 결과 반환
- 랭킹 반영: 내부 검색 로그 및 트래픽 기반으로 rankScore, popularity를 재산출
예시 스키마 (simple version)
[
{
"id": "PROPERTY001",
"type": "domestic",
"name": "서울 롯데호텔",
"address": {
"country": "대한민국",
"state": "서울특별시",
"city": "중구",
"district": "을지로 30"
}
},
{
"id": "PROPERTY002",
"type": "oversea",
"mappingGroup": "LOTTE_GUAM",
"aliases": ["Lotte Hotel Guam", "롯데괌호텔", "Guam Lotte"],
"address": {
"country": "Guam",
"state": "Tamuning",
"city": "Tumon",
"district": "185 Gun Beach Rd"
}
}
]
5. 주요 성과 — 단일화, 효율화, 확장성
(1) 데이터 관리의 단일화
- 도메인별로 분리되었던 키워드/주소 데이터를 하나의 구조로 통합
- 통합 저장소 수정만으로 검색·자동완성 등 여러 서비스에 자동 반영
(2) 자동완성 데이터 흐름 단순화

(3) 데이터 활용성 확장
- 통합 스키마를 기반으로 추천 모델, 콘텐츠 자동생성, 사이트맵 등 다양한 활용 가능
- MongoDB의 유연한 구조 덕분에 향후 데이터 파이프라인 확장 용이
6. 향후 과제 — 키워드 관계 중심의 확장
이번 통합으로 단일 데이터 허브가 완성되었으며,
다음 단계로는 ‘키워드 간 관계’를 중심으로 한 확장을 계획하고 있습니다.
(1) 키워드 그래프 (Keyword Graph)
- 목표: 키워드 간 관계(유의어, 지역·테마 연계)를 그래프 구조로 확장
- 활용: 클릭률, 동시검색 빈도, 위치 근접도 등을 기반으로 관계 강도(weight) 계산
- Aggregation Pipeline + Lookup 기능으로 키워드 관계 계산
- 효과: 자동완성·추천에서 의미적으로 연관된 키워드 제안 가능
(2) 지리 기반 키워드 클러스터링 (Spatial Clustering)
- 목표: 좌표 정보를 활용해 공간적으로 인접한 키워드 그룹화
- 활용: 지도 기반 검색, 지역 추천, 주변 탐색 등 공간 연계 서비스에 활용
- GeoJSON 형태로 저장된 위치 데이터 활용
- 2dsphere 인덱스를 이용해 주변 키워드 검색 및 거리 계산 활용
(3) 콘텐츠 및 SEO 자동화 확장
- 목표: 통합 DB의 키워드 관계를 기반으로 콘텐츠 자동 생성 및 SEO 최적화
- 활용 : “서울 ↔ 가족여행 ↔ 숙소”처럼 인기 키워드 조합으로 테마 페이지 및 사이트맵 자동 생성

맺음말
이번 프로젝트는 단순한 DB 통합을 넘어,
‘키워드 간 관계’를 중심으로 데이터의 비즈니스 활용 가능성을 확장한 기반 구축이었습니다.
검색 플랫폼팀은 앞으로도 데이터 구조와 검색 경험의 정교화 를 통해,
사용자에게 더 나은 탐색 경험을 제공할 수 있도록 끊임없이 고민하고 발전해 나가겠습니다.