From e3b774da699c987b6ddc850dc60952b69e62466a Mon Sep 17 00:00:00 2001 From: Jaewon Lee <58386334+jaewonLeeKOR@users.noreply.github.com> Date: Mon, 25 Nov 2024 00:15:39 +0900 Subject: [PATCH] =?UTF-8?q?[MS-207]=20close=20=EB=90=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8D=98=20=EC=9E=90=EC=9B=90=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 애플 로그인과 메세지 서비스에서 해당 서버와 통신에 사용하던 CloseableHttpClient, CloseableHttpResponse를 try with resources 문을 이용하여 닫음 처리 해줬습니다. --- .../oauth/apple/client/AppleOauthClient.java | 24 ++++------ .../sms/service/SmsAgencyUtilAligo.java | 46 +++++++------------ 2 files changed, 26 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/modutaxi/api/common/auth/oauth/apple/client/AppleOauthClient.java b/src/main/java/com/modutaxi/api/common/auth/oauth/apple/client/AppleOauthClient.java index 1fc610f6..c40184f3 100644 --- a/src/main/java/com/modutaxi/api/common/auth/oauth/apple/client/AppleOauthClient.java +++ b/src/main/java/com/modutaxi/api/common/auth/oauth/apple/client/AppleOauthClient.java @@ -28,7 +28,6 @@ @Slf4j public class AppleOauthClient { public AppleSocialTokenResponse generateAndValidateToken(IdTokenRequest idTokenRequest) { - CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("https://appleid.apple.com/auth/token"); List nvps = new ArrayList<>(); nvps.add(new BasicNameValuePair("client_id", idTokenRequest.getClient_id())); @@ -43,28 +42,23 @@ public AppleSocialTokenResponse generateAndValidateToken(IdTokenRequest idTokenR log.error("Apple Token Request Body 인코딩 실패 : {}", idTokenRequest); throw new BaseException(AuthErrorCode.APPLE_LOGIN_ERROR); } - CloseableHttpResponse response; - try { - response = httpClient.execute(httpPost); - } catch (IOException e) { - log.error("Apple Token 요청 실패 : {}", idTokenRequest); - throw new BaseException(AuthErrorCode.APPLE_LOGIN_ERROR); - } ObjectMapper objectMapper = new ObjectMapper() .configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - AppleSocialTokenResponse responseBody; - try { - responseBody = objectMapper.readValue(EntityUtils.toString(response.getEntity(), "UTF-8"), AppleSocialTokenResponse.class); + try(CloseableHttpClient httpClient = HttpClients.createDefault()) { + try(CloseableHttpResponse response = httpClient.execute(httpPost)) { + return objectMapper.readValue(EntityUtils.toString(response.getEntity(), "UTF-8"), AppleSocialTokenResponse.class); + } catch (IOException e) { + log.error("Apple Token Payload 디코딩 실패 : {}", idTokenRequest); + throw new BaseException(AuthErrorCode.APPLE_LOGIN_ERROR); + } } catch (IOException e) { - log.error("Apple Token Payload 디코딩 실패 : {}", idTokenRequest); + log.error("Apple Token 요청 실패 : {}", idTokenRequest); throw new BaseException(AuthErrorCode.APPLE_LOGIN_ERROR); } - return responseBody; } public void revokeToken(RevokeTokenRequest revokeTokenRequest) throws BaseException{ - CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("https://appleid.apple.com/auth/revoke"); List nvps = new ArrayList<>(); nvps.add(new BasicNameValuePair("client_id", revokeTokenRequest.getClient_id())); @@ -77,7 +71,7 @@ public void revokeToken(RevokeTokenRequest revokeTokenRequest) throws BaseExcept log.error("Apple Revoke Token Request Body 인코딩 실패 : {}", revokeTokenRequest); throw new BaseException(AuthErrorCode.APPLE_REVOKE_ERROR); } - try { + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { httpClient.execute(httpPost); } catch (IOException e) { log.error("Apple Revoke Token 요청 실패 : {}", revokeTokenRequest); diff --git a/src/main/java/com/modutaxi/api/domain/sms/service/SmsAgencyUtilAligo.java b/src/main/java/com/modutaxi/api/domain/sms/service/SmsAgencyUtilAligo.java index c6e428b7..98b8f64b 100644 --- a/src/main/java/com/modutaxi/api/domain/sms/service/SmsAgencyUtilAligo.java +++ b/src/main/java/com/modutaxi/api/domain/sms/service/SmsAgencyUtilAligo.java @@ -80,16 +80,20 @@ public void checkBalance() { } private T aligoReqeust(String url, List nvps, Class responseType) { - CloseableHttpClient httpClient = HttpClients.createDefault(); - HttpPost httpPost = generateAligoHttpPost(httpClient, url, nvps); - CloseableHttpResponse response = executeAligoHttpClient(httpClient, httpPost); - AligoErrorHandle(httpClient, response); - T responseBody = mapValue(httpClient, response, responseType); - closeHttpClient(httpClient); - return responseBody; + try (CloseableHttpClient httpClient = HttpClients.createDefault()) { + HttpPost httpPost = generateAligoHttpPost(url, nvps); + try (CloseableHttpResponse response = executeAligoHttpClient(httpClient, httpPost)) { + aligoErrorHandle(response); + T responseBody = mapValue(response, responseType); + return responseBody; + } + } catch (IOException e) { + log.error("[Aligo] HTTP 클라이언트 종료에 실패했습니다."); + throw new BaseException(SmsErrorCode.SMS_AGENCY_ERROR); + } } - private HttpPost generateAligoHttpPost(CloseableHttpClient httpClient, String url, List nvps) { + private HttpPost generateAligoHttpPost(String url, List nvps) { HttpPost httpPost = new HttpPost(url); nvps.add(new BasicNameValuePair("key", apiKey)); nvps.add(new BasicNameValuePair("user_id", userId)); @@ -97,58 +101,42 @@ private HttpPost generateAligoHttpPost(CloseableHttpClient httpClient, String ur httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8")); } catch (UnsupportedEncodingException e) { log.error("[Aligo] 문자 전송 메시지 인코딩에 실패했습니다."); - closeHttpClient(httpClient); throw new BaseException(SmsErrorCode.SMS_AGENCY_ERROR); } return httpPost; } private CloseableHttpResponse executeAligoHttpClient(CloseableHttpClient httpClient, HttpPost httpPost) { - CloseableHttpResponse response; try { - response = httpClient.execute(httpPost); + return httpClient.execute(httpPost); } catch (IOException e) { log.error("[Aligo] 메세지 서버와 연결에 실패했습니다."); - closeHttpClient(httpClient); throw new BaseException(SmsErrorCode.SMS_AGENCY_ERROR); } - return response; } - private void AligoErrorHandle(CloseableHttpClient httpClient, CloseableHttpResponse response) { + private void aligoErrorHandle(CloseableHttpResponse response) { if (response.getStatusLine().getStatusCode() > 0) return; - AligoErrorResponse errorBody = mapValue(httpClient, response, AligoErrorResponse.class); + AligoErrorResponse errorBody = mapValue(response, AligoErrorResponse.class); switch (response.getStatusLine().getStatusCode()) { case (-101) -> log.error("[Aligo] 인증오류입니다."); case (-304) -> log.error("[Aligo] 발송 5분전까지만 취소가 가능합니다."); default -> log.error(String.format("[Aligo] 알 수 없는 에러가 발생했습니다. (%s, %s)", errorBody.getResult_code(), errorBody.getMessage())); } - closeHttpClient(httpClient); throw new BaseException(SmsErrorCode.SMS_AGENCY_ERROR); } - private T mapValue(CloseableHttpClient httpClient, CloseableHttpResponse response, Class bodyType) { + private T mapValue(CloseableHttpResponse response, Class bodyType) { ObjectMapper objectMapper = new ObjectMapper() .configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - T responseBody; try { - responseBody = objectMapper.readValue(EntityUtils.toString(response.getEntity(), "UTF-8"), bodyType); + return objectMapper.readValue(EntityUtils.toString(response.getEntity(), "UTF-8"), bodyType); } catch (IOException e) { log.error(String.format("[Aligo] 문자 전송 응답 메시지(%s dto) 파싱에 실패했습니다.", bodyType.getName())); - closeHttpClient(httpClient); throw new BaseException(SmsErrorCode.SMS_AGENCY_ERROR); } - return responseBody; - } - - private void closeHttpClient(CloseableHttpClient httpClient) { - try { - httpClient.close(); - } catch (IOException e) { - log.error("[Aligo] HTTP 클라이언트 종료에 실패했습니다."); - } } }