고민 배경

어떤 API를 사용하고 있나

쉼,부름에서는 배송 견적을 계산하고 주문을 접수하는 과정에서 카카오 주소 검색 API와 도보 길찾기 API를 사용합니다.

  1. 도로명주소를 위도와 경도로 변환합니다.
  2. 출발지와 도착지 좌표를 이용해 거리, 예상 이동 시간, 이동 경로를 계산합니다.

부름(주문)을 등록하는 과정을 사진으로 확인해보면

저희 쉼,부름 서비스에서는 출발지와 도착지 사이의 예상 이동 시간, 물품 유형과 크기,무게 등을 설정하면

이를 이용해서 요금을 결정합니다.

중요한 부분은, 요금 산정 과정에서

"출발지와 도착지 사이의 예상 이동 시간"을 사용한다는 것인데,

이 과정에서 외부 카카오 API를 한번씩 호출하는 것이였습니다.

이 방식에서는, 견적을 확인한 뒤 같은 주소 그대로 실제 주문을 접수할 수도 있기에,

사용자가 저 소형(S), 중형(M)을 반복적으로 클릭하거나

서류, 소형택배 등의 카테고리를 반복적으로 클릭할 때도 카카오 API가 반복 호출 된다는 문제를 가지고 있었습니다.

이 경우 주소나 경로는 바뀌지 않았는데도 서버에서는 동일한 작업을 반복하게 됩니다.

첫 번째 견적 조회
주소 → 좌표 변환
출발지 + 도착지 → 이동 경로 계산

물품 크기 변경 후 다시 견적 조회
주소 → 좌표 변환
출발지 + 도착지 → 이동 경로 계산

같은 주소로 주문 접수
주소 → 좌표 변환
출발지 + 도착지 → 이동 경로 계산

특히 물품 유형이나 크기는 배송 가격에는 영향을 주지만 실제 이동 경로에는 영향을 주지 않습니다.

따라서 출발지와 도착지가 동일하다면 카카오 길찾기 API를 다시 호출할 필요 없이 이전에 계산한 거리와 경로를 재사용하고 물품 조건에 따른 가격만 다시 계산할 수 있습니다.

이러한 중복 호출을 줄이기 위해 카카오 API의 응답을 Redis에 일정 시간 저장하도록 했습니다.