diff --git a/src/main/java/ybe/mini/travelserver/global/api/TourAPIProperties.java b/src/main/java/ybe/mini/travelserver/global/api/TourAPIProperties.java index 58cb87f..ac9c442 100644 --- a/src/main/java/ybe/mini/travelserver/global/api/TourAPIProperties.java +++ b/src/main/java/ybe/mini/travelserver/global/api/TourAPIProperties.java @@ -2,11 +2,14 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import java.util.List; + +@Slf4j @NoArgsConstructor(access = AccessLevel.PRIVATE) public class TourAPIProperties { - public static final String KEY_DECODED = "rKtD0jUO3f83Q/Q7QJ7yxo2GMBF489d4y5NM3H48uUffmUXjeoARqF4wmsICTBt3BVS988w8vG4Nh2UZtMV2/A=="; - public static final String KEY_ENCODED = "rKtD0jUO3f83Q%2FQ7QJ7yxo2GMBF489d4y5NM3H48uUffmUXjeoARqF4wmsICTBt3BVS988w8vG4Nh2UZtMV2%2FA%3D%3D"; + private static int keyIndex = 0; public static final String BASE_URL = "https://apis.data.go.kr/B551011/KorService1/"; public static final String SEARCH_KEYWORD = "searchKeyword1"; @@ -15,4 +18,21 @@ public class TourAPIProperties { public static final String MOBILE_OS = "ETC"; public static final String MOBILE_APP = "TravelAPP"; public static final String RENDER_TYPE = "json"; + + private static final List keyList = List.of( + System.getenv("TOUR_API_KEY_1"), + System.getenv("TOUR_API_KEY_2"), + System.getenv("TOUR_API_KEY_3"), + System.getenv("TOUR_API_KEY_4"), + System.getenv("TOUR_API_KEY_5") + ); + + public static String getEncodedKey() { + return keyList.get(keyIndex); + } + + public static void changeNextKey() { + log.warn("API KEY를 변경합니다."); + TourAPIProperties.keyIndex = ++keyIndex % keyList.size(); + } } diff --git a/src/main/java/ybe/mini/travelserver/global/api/TourAPIUtils.java b/src/main/java/ybe/mini/travelserver/global/api/TourAPIUtils.java index 6db0658..e9ca78a 100644 --- a/src/main/java/ybe/mini/travelserver/global/api/TourAPIUtils.java +++ b/src/main/java/ybe/mini/travelserver/global/api/TourAPIUtils.java @@ -54,7 +54,7 @@ private static StringBuilder buildCommonUrl(String endpoint) { url.append("&MobileApp=").append(MOBILE_APP); url.append("&_type=").append(RENDER_TYPE); url.append("&contentTypeId=").append(CONTENT_TYPE_ID); - url.append("&serviceKey=").append(KEY_ENCODED); + url.append("&serviceKey=").append(getEncodedKey()); return url; } @@ -78,7 +78,9 @@ private static T fetchDataFromAPI( clientHttpResponse -> { MediaType contentType = clientHttpResponse.getHeaders().getContentType(); if (contentType != null && contentType.includes(MediaType.TEXT_XML)) { - try { + try (clientHttpResponse) { + changeNextKey(); + JAXBContext jaxbContext = JAXBContext.newInstance(TourAPIXMLErrorResponse.class); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); TourAPIXMLErrorResponse tourAPIXMLErrorResponse = (TourAPIXMLErrorResponse) unmarshaller.unmarshal(clientHttpResponse.getBody());