You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
프론트엔드에서 여러 장소(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회로 극적으로 단축하고 사용자 로딩 화면 속도를 대폭 높입니다.
설명
CompletableFuture등)을 실행하고,JdkClientHttpRequestFactory를 통해 HTTP/2 멀티플렉싱 방식으로 Google Places / Routes 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차적으로 확인CompletableFuture와 병렬 스레드를 이용하여 구글 API 비동기/병렬 요청 및 취합참고
JdkClientHttpRequestFactory는 멀티플렉싱을 지원하므로 동일 도메인(googleapis.com)으로 다수의 병렬 호출을 보낼 때 소켓 자원을 매우 효율적으로 재사용합니다.