Skip to content

장소 및 경로(Route) 일괄(Bulk) 조회 API 개발 및 백엔드 병렬 호출 최적화 #123

@minbros

Description

@minbros

설명

  • 프론트엔드에서 여러 장소(Places) 정보 및 일정 내 각 장소 간의 경로(Routes) 정보를 개별 API로 N번씩 호출하던 비효율을 제거하기 위해, 일괄 조회(Bulk) API를 도입합니다.
  • 백엔드 내부적으로는 전달받은 ID들 및 경로 구간들 중 Redis 캐시에 존재하지 않는 대상에 대해 가상 스레드(Virtual Threads) 기반의 병렬 작업(CompletableFuture 등)을 실행하고, JdkClientHttpRequestFactory를 통해 HTTP/2 멀티플렉싱 방식으로 Google Places / Routes API를 동시에 병렬 호출하여 전체 응답 시간을 최소화합니다.

변경 범위

  • 일괄 조회 API 엔드포인트 구현
    • PlaceController: 복수의 Google Place ID 목록을 요청받아 일괄 응답하는 API (예: POST /places/bulk)
    • ScheduleItemController / RouteController: 일정 내 여러 방문지 구간 사이의 이동 정보(거리, 소요 시간 등)를 한 번에 조회하는 API (예: GET /rooms/{roomId}/schedules/{scheduleId}/routes/bulk)
  • 서비스 레이어 최적화
    • PlaceDetailService / RouteService 등: Redis 캐시(장소 6시간/24시간, 경로 10분)를 먼저 1차적으로 확인
    • 캐시 미스(Cache Miss)가 발생한 데이터들만 선별해 CompletableFuture와 병렬 스레드를 이용하여 구글 API 비동기/병렬 요청 및 취합
  • 신규 테스트 케이스 작성
    • 일괄 장소 및 경로 조회 기능에 대한 컨트롤러 및 서비스 테스트 코드 추가

참고

  • JdkClientHttpRequestFactory는 멀티플렉싱을 지원하므로 동일 도메인(googleapis.com)으로 다수의 병렬 호출을 보낼 때 소켓 자원을 매우 효율적으로 재사용합니다.
  • 이를 통해 프론트엔드-백엔드 간 네트워크 왕복 횟수를 1회로 극적으로 단축하고 사용자 로딩 화면 속도를 대폭 높입니다.

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions