travel-supply-service는 Booking.com RapidAPI 호출 비용을 줄이고 응답 속도를 높이기 위해 Spring Cache + Redis를 사용한다. 설정은RedisCacheConfig에 집중되어 있으며, 각 어댑터 메서드에@Cacheable을 선언하는 방식으로 적용된다.
RedisCacheConfig)config/RedisCacheConfig.java
| 방식 | 클래스 | 사용처 |
|---|---|---|
Jackson2JsonRedisSerializer<JsonNode> |
jsonNodeCacheConfig |
검색 결과 / 필터 (JsonNode 반환 메서드) |
GenericJackson2JsonRedisSerializer |
pojoCacheConfig |
목적지·정렬 등 POJO 리스트 |
키는 모든 캐시에서 StringRedisSerializer로 문자열 직렬화된다.
| 캐시 이름 | 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)