Skip to content
This repository has been archived by the owner on Jan 15, 2024. It is now read-only.

Commit

Permalink
Feat: TourAPI 비밀키 로직 변경
Browse files Browse the repository at this point in the history
`-` 하드 코딩된 키를 지움
`+` 해당 API 키 장애 발생시 다른 키를 사용되도록 설계
  • Loading branch information
laigasus committed Nov 29, 2023
1 parent a49a897 commit f65de0f
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -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<String> 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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -78,7 +78,9 @@ private static <T> 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());
Expand Down

0 comments on commit f65de0f

Please sign in to comment.