목차
주행 데이터 기반 T지금 실시간 인기 장소 랭킹 (2022-03)
원문 정보
- 원문: 주행 데이터로 실시간 핫플 랭킹 서비스 개발하기
- 부제: 7편 – 실시간 데이터 수집·처리를 위한 T지금 시스템 구축기
- 매체 · 게시일: 티맵모빌리티 테크노트(브런치) · 2022-03-11
- 저자: 티맵모빌리티 (본문에 저자 미표기)
- 원문 내용을 바탕으로 재구성한 요약입니다.
T지금 서비스
T지금은 내비게이션 주행 데이터를 실시간으로 처리해, 접속 시점에 사용자 주변의 실시간 인기 장소를 랭킹으로 보여 주는 서비스입니다. T지금 탭은 물론 TMAP 검색창에서도 확인할 수 있어서, 이마트를 검색하면 가장 붐비는 지점을 알 수 있습니다.
기존 혼잡도 서비스의 한계
기존 혼잡도 서비스는 두 가지였습니다. 도로 혼잡도는 주행 차량의 속도로 원활, 서행, 혼잡을 나누지만 교통 신호나 공사 같은 외부 변수에 크게 흔들리고 혼잡 여부를 직관적으로 판단하기 어렵습니다. 시간대별 혼잡도는 시간대와 요일별로 장소에 도착하는 이용자 비율을 보여 주는데, 다른 시점과의 상대적 차이일 뿐이라 직관적인 정보로는 부족합니다. 그래서 실제 주행 데이터로 어뷰징에 강한 점수를 만들고 실시간으로 집계하는 서비스를 설계했습니다.
집계 방식
단말에서 차량 속도, 향하는 목적지, 현재 위치를 모읍니다. 로그 수집기가 주기적으로 수집하므로 같은 사용자가 길안내를 여러 번 요청해 중복될 수 있습니다. 그래서 사용자별 가장 최근 길안내 요청만 최종 목적지로 집계합니다.
장소 데이터도 손봅니다. 한 장소에는 실제 이름, 지번 주소, 도로명 주소, 전용 주차장, 건물 안의 입점 장소 같은 동의어가 있습니다. 이를 통합한 뒤에 이동 중인 사용자를 집계하는 T지금 추천 엔진과 주기적으로 연동합니다.
수집과 변환
수집은 준실시간에 맞췄습니다. 사용자 앱에서 넘어오는 정보는 Kafka를 거쳐 곧바로 Hadoop에 적재합니다. 보안 때문에 직접 가져올 수 없는 외부 데이터는 파일로 받는 즉시 읽어 Kafka로 보내 적재합니다.
적재한 데이터는 병합한 뒤 서비스에 맞게 변환합니다. es-Hadoop 라이브러리로 Spark와 Elasticsearch를 함께 쓰기 쉽게 했고, 병합은 데이터프레임, 변환은 RDD로 했습니다. 컬렉션 타입에서는 RDD의 성능이 더 좋았다고 합니다.
색인 갱신 시간 단축
최종 결과를 갱신할 때의 목표는 110만 건 이상을 5분 안에 반영하고 검색 성능에는 큰 영향을 주지 않는 것이었습니다. 검색 POI는 형태소 분석기를 써서 색인 작업이 무겁습니다. 그래서 두 가지가 필요했습니다. 같은 내용은 갱신하지 않을 것, 기존 POI 문서를 직접 갱신하면 성능이 크게 떨어지므로 분리할 것입니다.
첫째는 es-Hadoop이 update 때 같은 내용을 알아서 건너뛰므로 해결됐습니다. 둘째는 API에서 여러 번 호출해 병합할지, 색인에서 병합할지 고민한 끝에 Elasticsearch의 parent-child와 routing 기능으로 문서를 물리적으로 분리하고 Elasticsearch SQL에서 바로 병합하는 구조로 만들었습니다. POI에 곧바로 갱신하는 방식보다 시간이 30분에서 2분 정도로 줄었다고 합니다.
원문은 출시한 지 얼마 되지 않아 서비스와 시스템 모두 개선 여지가 있다고 덧붙였습니다.