From 63e4c5bcb44ed23881706b903b0697fb2801ecd7 Mon Sep 17 00:00:00 2001 From: Suhun0331 Date: Tue, 3 Jun 2025 16:02:00 +0900 Subject: [PATCH] =?UTF-8?q?Refactor=20:=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/auth/service/AuthService.java | 75 +++++++++++++++++-- 1 file changed, 70 insertions(+), 5 deletions(-) diff --git a/src/main/java/umc/kkijuk/server/auth/service/AuthService.java b/src/main/java/umc/kkijuk/server/auth/service/AuthService.java index 9874cb0..ac30fce 100644 --- a/src/main/java/umc/kkijuk/server/auth/service/AuthService.java +++ b/src/main/java/umc/kkijuk/server/auth/service/AuthService.java @@ -9,6 +9,9 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import umc.kkijuk.server.auth.dto.NaverTokenResponse; @@ -104,6 +107,42 @@ public Map handleNaverLogin(String code, String state) { return tokens; } +// @Transactional +// public String getKakaoAccessToken(String code, String redirectUri) { +// String tokenUri = "https://kauth.kakao.com/oauth/token"; +// +// HttpHeaders headers = new HttpHeaders(); +// headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); +// +// MultiValueMap params = new LinkedMultiValueMap<>(); +// params.add("grant_type", kakaoGrantType); +// params.add("client_id", kakaoClientId); +// params.add("redirect_uri",redirectUri); +// params.add("client_secret", kakaoClientSecret); +// params.add("code", code); +// +// HttpEntity> kakaoTokenRequest = new HttpEntity<>(params, headers); +// +// try { +// ResponseEntity response = restTemplate.exchange( +// tokenUri, +// HttpMethod.POST, +// kakaoTokenRequest, +// Map.class +// ); +// +// log.info("카카오 액세스 토큰 응답: {}", response.getBody()); +// return (String) response.getBody().get("access_token"); +// } catch (HttpClientErrorException e) { +// log.error("카카오 요청 실패: {} / {}", e.getStatusCode(), e.getResponseBodyAsString()); +// throw new RuntimeException("카카오 요청 실패", e); +// } +// catch (Exception e) { +// log.error("카카오 액세스 토큰 요청 실패: {}", e.getMessage(), e); +// throw new RuntimeException("카카오 액세스 토큰 요청 실패", e); +// } +// } + @Transactional public String getKakaoAccessToken(String code, String redirectUri) { String tokenUri = "https://kauth.kakao.com/oauth/token"; @@ -114,7 +153,7 @@ public String getKakaoAccessToken(String code, String redirectUri) { MultiValueMap params = new LinkedMultiValueMap<>(); params.add("grant_type", kakaoGrantType); params.add("client_id", kakaoClientId); - params.add("redirect_uri",redirectUri); + params.add("redirect_uri", redirectUri); params.add("client_secret", kakaoClientSecret); params.add("code", code); @@ -128,11 +167,37 @@ public String getKakaoAccessToken(String code, String redirectUri) { Map.class ); - log.info("카카오 액세스 토큰 응답: {}", response.getBody()); - return (String) response.getBody().get("access_token"); + @SuppressWarnings("unchecked") + Map body = (Map) response.getBody(); + + if (body == null) { + log.error("카카오 응답 body가 null임. 응답 상태 코드: {}", response.getStatusCode()); + throw new RuntimeException("카카오 응답 body가 null입니다."); + } + + if (!body.containsKey("access_token")) { + log.error("카카오 응답에 access_token 없음. 전체 응답: {}", body); + throw new RuntimeException("카카오 access_token이 응답에 없습니다."); + } + + log.info("카카오 액세스 토큰 응답: {}", body); + return (String) body.get("access_token"); + + } catch (HttpClientErrorException e) { + log.error("카카오 토큰 요청 실패 - 클라이언트 에러: 상태 코드 {}, 응답 내용 {}", e.getStatusCode(), e.getResponseBodyAsString()); + throw new RuntimeException("카카오 토큰 요청 실패 (클라이언트 에러): " + e.getStatusCode(), e); + + } catch (HttpServerErrorException e) { + log.error("카카오 토큰 요청 실패 - 서버 에러: 상태 코드 {}, 응답 내용 {}", e.getStatusCode(), e.getResponseBodyAsString()); + throw new RuntimeException("카카오 토큰 요청 실패 (서버 에러): " + e.getStatusCode(), e); + + } catch (ResourceAccessException e) { + log.error("카카오 토큰 요청 실패 - 연결 문제: {}", e.getMessage()); + throw new RuntimeException("카카오 토큰 요청 실패 (연결/타임아웃 문제)", e); + } catch (Exception e) { - log.error("카카오 액세스 토큰 요청 실패: {}", e.getMessage(), e); - throw new RuntimeException("카카오 액세스 토큰 요청 실패", e); + log.error("카카오 토큰 요청 실패 - 기타 예외: {}", e.getMessage(), e); + throw new RuntimeException("카카오 토큰 요청 실패 (알 수 없는 오류)", e); } }