T
TechInsights
목록으로
BackEnd•2025. 12. 22.

Coroutine Async 로 지도보기 API 성능 개선하기

여기어때
여기어때 Engineering Team
여기어때

핵심요약

원문 보기

지도 보기 API의 8~10초에 달하는 응답 시간을 Coroutine Async와 동적 Window 분할 전략을 통해 2초로 단축시킨 경험을 공유합니다. 외부 API 수정 없이 클라이언트 측 최적화만으로 성능을 획기적으로 개선했습니다.

Coroutine Async를 활용한 지도 API 성능 개선

문제 상황

  • 지도 보기 API에서 주변 제휴점 100곳의 최저가 정보를 조회하는 데 평균 8~10초 소요.
  • 이는 표준 상품 API의 순차 처리 방식과, 해당 API를 100회 호출하는 비효율적인 구조 때문.
  • 외부 표준 상품 API는 수정이 불가능한 상황.

기존 구현 방식 (동기 처리)

  • Web API에서 표준 상품 API를 100번 순차적으로 호출하여 각 제휴점의 최저가 정보를 받아옴.
  • 표준 상품 API 내부에서는 개별 제휴점의 상품 조회, 가격 계산, 정책 적용 등을 수행.
  • 결과적으로 100개의 API 호출이 완료될 때까지 대기해야 하므로 응답 시간이 8~10초 발생.

성능 개선 방안: Coroutine Async 및 동적 Window 분할

  • 핵심 전략: Web API에서 표준 상품 API 호출을 여러 개로 분할하여 병렬 처리.
  • 동적 Window 분할: 제휴점 개수에 따라 호출 묶음(window) 개수를 동적으로 조절 (30개 이하: 1개, 31-60개: 2개, 61개 이상: 최대 3개).
  • Coroutine Async 활용: Kotlin Coroutine의 async를 사용하여 병렬 호출 및 결과 취합.
  • 순서 보장 불필요: 지도 API는 결과 순서 보장이 필요 없으므로 병렬 처리에 유리.

개선 결과

  • 응답 시간: 8~10초 → 2초 (사용자 대기 시간 1/4 이상 단축).
  • 처리량 (TPS): 30 → 215 (동시 처리 능력 약 7배 향상).
  • 사용자 경험: 거의 사용 불가능한 수준에서 실용적인 수준으로 개선.

결론

  • 외부 API 수정이 불가한 상황에서도 클라이언트(BFF) 측에서 호출 구조를 재설계하여 성능 병목을 분산하고 사용자 경험을 크게 개선할 수 있음.
  • 동적 window 분할과 병렬 처리는 효과적인 성능 최적화 기법임을 입증.
#BackEnd
여기어때
여기어때

여기어때 Engineering Team

기술 인사이트를 전달하는 공식 채널

You might also like

View all
토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기