travel-supply-service는 Booking.com RapidAPI 호출 비용을 줄이고 응답 속도를 높이기 위해 Spring Cache + Redis를 사용한다. 설정은 RedisCacheConfig에 집중되어 있으며, 각 어댑터 메서드에 @Cacheable을 선언하는 방식으로 적용된다.

캐시 설정 (RedisCacheConfig)

config/RedisCacheConfig.java

직렬화 방식

방식 클래스 사용처
Jackson2JsonRedisSerializer<JsonNode> jsonNodeCacheConfig 검색 결과 / 필터 (JsonNode 반환 메서드)
GenericJackson2JsonRedisSerializer pojoCacheConfig 목적지·정렬 등 POJO 리스트

키는 모든 캐시에서 StringRedisSerializer로 문자열 직렬화된다.

캐시별 TTL 요약

캐시 이름 TTL 직렬화 담당 클래스
bookingFlights 5분 (default) JsonNode BookingComFlightSupplierAdapter
bookingFlightDetails 5분 (default) JsonNode BookingComFlightSupplierAdapter
bookingHotels 5분 (default) JsonNode BookingComHotelAdapter
flightDestinations 24시간 POJO BookingComFlightMetaClient
hotelDestinations 24시간 POJO BookingComHotelMetaClient
hotelSortBy 24시간 POJO BookingComHotelMetaClient
hotelFilter 24시간 JsonNode BookingComHotelMetaClient

bookingFlights / bookingFlightDetails / bookingHotels는 withInitialCacheConfigurations에 명시되지 않아 cacheDefaults(5분 JsonNode)가 적용된다.

캐시 적용 상세

항공편 검색 (bookingFlights)

@Cacheable(value = "bookingFlights", key = "#request")
public JsonNode searchFlightOffers(FlightSearchRequest request)

키는 FlightSearchRequest.toString() — @ToString이 모든 필드를 포함하므로 요청 파라미터 전체가 키가 된다. airlines 필터가 있으면 내부에서 페이지를 반복 호출(fetchFilteredUntilFull)하지만, 캐시는 최종 조합 결과를 #request 단위로 저장한다.

항공편 상세 (bookingFlightDetails)

@Cacheable(value = "bookingFlightDetails", key = "#token + ':' + #currencyCode")
public JsonNode getFlightDetails(String token, String currencyCode)

키는 "<token>:<currencyCode>" 형태의 문자열 조합. 동일 토큰 + 통화 조합은 5분 내 재요청 시 캐시에서 반환된다.

호텔 검색 (bookingHotels)

@Cacheable(value = "bookingHotels", key = "#request")
public JsonNode searchHotelsByCity(HotelSearchRequest request)

키는 HotelSearchRequest.toString(). @EqualsAndHashCode + @ToString이 선언되어 있어 모든 필드가 키 생성에 포함된다.

항공 목적지 메타 (flightDestinations)