Coroutine Async 로 지도보기 API 성능 개선하기
백엔드
Coroutine Async 로 지도보기 API 성능 개선하기
두줄요약
지도보기 API의 병목이던 표준 상품 API 호출을 동적 window 분할과 Coroutine Async로 병렬화했습니다. 그 결과 응답 시간을 8~10초에서 약 2초로 줄이고 TPS도 크게 개선했습니다.
문제 상황
- 지도보기 기능의 주변 100개 제휴점 조회와 최저가 표시 과정에서 응답 시간이 8~10초까지 지연
- Search API 이후 표준 상품 API 호출 구간이 병목으로 작용
- 캐시 미스 시 TPS 30 수준으로 사용성 저하
원인 분석
- 표준 상품 API가 제휴점 단위 최저가 계산을 순차 처리하며 처리 시간이 누적
- 제휴점 수가 30개 수준인 PLP와 달리 100개를 한 번에 조회하는 지도 화면에 동일한 호출 구조를 적용
- 내부 로직 수정이 어려운 외부 서버라 호출 방식만 조정 가능
해결 방법
- 제휴점 수에 따라 1~3개 window로 동적 분할
- Kotlin Coroutine의 async와 Dispatchers.IO로 표준 상품 API를 병렬 호출
- awaitAll로 결과를 병합해 지도 핀 데이터 생성
