🐢🐢꼬부기 LV.2 | 실습•에러/🛡️껍질에 숨기(에러해결)

카카오 로그인 API 자바로직 오류 해결 2

서화 2025. 11. 30. 23:27

1.SDK 충돌

처음 카카오 로그인 버튼을 만들고,
카카오 SDK 방식으로 로그인 요청을 시도했지만
SDK 스크립트가 충돌이 자주 일어나고,
서버와 통신 로직을 Java 에서 작성해야 했기 때문에
최종적으로 SDK가 아닌 a태그 + HttpURLConnection 방식으로 변경했다.

URL 예시

https://kauth.kakao.com/oauth/authorize?response_type=code 
&client_id=REST_API_KEY &redirect_uri=http://localhost:8088/kakaoLogin/kakaoLogin.do

처음엔 줄바꿈이 들어간 상태여서 정상 동작하지 않았다.
Kakao OAuth는 띄어쓰기, 줄바꿈, 값 틀림 → 즉시 오류 발생.


 2.URL에 빨간 줄

카카오 API 요청 코드 작성 중,

URL url = new URL(tokenUrl); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

여기서 url.openConnection() 부분에 빨간 줄이 떠서 제대로 동작하지 않았다.
원인은 자바 버전 문제였다.

프로젝트 Facet을 확인하니 Java 1.3 으로 설정되어 있었고,
나는 Java 8 기능 (HttpURLConnection, JSON 파싱 등)을 사용 중이었다.

🔧 해결 과정

Eclipse → Project → Properties → Project Facet → Java 버전 1.8로 변경

근데 변경하는 과정에서 또 에러 발생:

Build path contains duplicate entry: JavaSE-1.8

그래서 다시:

Project → Build Path → Library → 기존 JRE 삭제 → Add Library → JRE System Library → Workspace default JRE(1.8)

최종적으로 버전이 정상적으로 JavaSE-1.8로 세팅되었고 빨간 줄 사라짐.

어떻게 바꾸긴 했는데 수업들을 때 버전충돌 날까봐 좀걱정되긴함...


3. Access Token 요청 단계에서 발생한 에러들

여기서 가장 많이 오류가 발생했다.

❌ 오류 메시지 #1

 
Server returned HTTP response code: 401 for URL: https://kauth.kakao.com/oauth/token

원인 → 요청 파라미터 부족 / redirect_uri mismatch

뭔지도 모르고 켜둔건데 계속 에러나서 결국 사용안함으로 설정하고 나서 해결 됬다


❌ 오류 메시지 #2

Redirect URI 충돌 문제

카카오 개발자 페이지에서 등록한 URI

http://localhost:8088/kakaoLogin/kakaoLogin.do

그러나 실제 요청 URL은

http://localhost:8088/kakaoLogin/Login.jsp

 하나라도 다르면 카카오가 요청을 거절한다.

그래서 링크 수정했다

<a href="https://kauth.kakao.com/oauth/authorize?response_type=code 
&client_id=내 REST 키
&redirect_uri=http://localhost:8088/kakaoLogin/kakaoLogin.do">

그래도 같은 오류.
그래서 REST API 키 자체를 재발급함.

"error": "invalid_client", "error_description": "Bad client credentials"

원인 → REST API KEY 값이 잘못됨
카카오 개발자 센터에서 새로 발급한 키를 제대로 넣지 않아 발생.

키를 다시 복사 후 수정 → 해결.


❌ 오류 메시지 #3

📌 여전히 401 → 원인은 토큰 재사용

카카오 OAuth는 한 번 발급된 인증코드를 다시 쓰면

"error": "invalid_grant", "description": "authorization code not found"

이런 에러가 발생한다.

그래서

  • 서버 재시작
  • 브라우저 쿠키 삭제
  • 로그인 다시 진행

하지만 내 예상과 달리 오류 계속 발생했다.

👉 이유: 브라우저가 자동으로 이전 인증 세션을 유지했기 때문.

🚨 결국 다른 브라우저 / 시크릿 모드 / PC 재부팅으로 해결됨.


4. 사용자 정보 요청 단계에서 다시 오류 발생

오류 메시지

401 Unauthorized: https://kapi.kakao.com/v2/user/me

원인 → access_token 값이 null인 상태에서 user/me 요청을 보내버림.
(바로 직전 단계에서 invalid_grant 발생 후 token=null이었음)

즉,

❌ null token → 사용자 정보 요청
✔ 정상 token → 사용자 정보 응답


5. 예외 처리 개선 (null return 문제)

처음엔 catch { return null; } 구조였는데
그 경우 화면 이동 없이 프로그램이 종료되는 UX가 됨.

forward.setRedirect(false);
forward.setPath("/message.jsp");

→ 오류 발생 시 사용자에게 안내 메시지 제공.

🏁 결론: 오늘 작업을 통해 얻은 핵심 경험 6가지

내용요약
OAuth 인증은 단계별 구조가 명확함 인가 → 토큰 → 사용자정보
redirect_uri, client_id 오타는 치명적 1글자만 틀려도 인증 실패
인가코드(code)는 1회용 재사용 → invalid_grant
Access Token은 성공 신호 토큰 나오면 인증 성공
user/me 요청은 GET + Authorization Header 필요 Token 없이 요청 → 401
서버 오류처리는 forward 처리 return null X