WorkHard/Project

[Project] 솔로프로젝트 - Kakao 로그인(2)

코딩공대 2023. 4. 20. 20:47
728x90

이번엔 코드를 살펴보려고 한다.

 

- KakaoService

 

  • KakaoService 클래스 내의 getAccessToken() 메서드로 Kakao API의 /oauth/token 엔드포인트로 POST 요청을 보내, 사용자로부터 받은 인증 코드로부터 access_token과 refresh_token값을 추출하여 반환한다.

 

 

  • Kakao API를 사용하여, 엑세스 토큰(access_token)을 이용해 카카오 사용자의 정보를 가져오는 메소드.
    getUserInfo() 메소드는 카카오 API의 사용자 정보 여청 URL을 host변수에 저장한다. 그리고 사용자 정보를 저장할 HashMap인 result를 생성한다.

    그 다음, URL 객체를 생성하고, HttpURLConnection 객체를 사용하여 요청을 보낸다. Authorization 헤더에는 "Bearer [access_token]"이 포함되어야 하므로, setRequestProperty() 메소드를 이용하여 Authorization 헤더를 설정한다. 이후 요청방식은 GET으로 설정하고 연결을 시작한다.

    연결이 성공하면 HTTP응답코드를 확인하고, InputStream을 BufferReader를 이용하여 읽어들이고 읽어들인 문자열 데이터는 JSON형식으로 파싱하고 사용자 정보를 추출하여 result HashMap에 저장한다. 사용자의 ID, 닉네임, 연령대 정보를 저장하고 HashMap을 반환한다.

    try - catch 블록 안에서 IOException과 ParseException 예외를 처리하고, 각각 e.printStackTrace()로 예외 메세지를 출력한다.

 

 

  • 카카오 로그인을 통해 얻은 엑세스 토큰을 이용하여 유저가 동의한 약관 정보를 가져오는 기능을 구현한 메서드이다.

    메서드에서는 카카오 REST API를 호출하여 약관 정보를 가져온다. API호출을 위해 host에 있는 URL을 호출한다. 이 URL은 카카오 API가이드 문서에서 제공하는 것이다. 엑세스 토큰과 함께 GET 방식으로 요총하면 해당 유저가 동의한 약관 정보를 반환한다.

    메서드는 먼저 URL 객체를 생성하고, URL 객체를 통해 API 서버에 연결한다. 연결을 위해 HttpURLConnection 클래스를 사용하며, 요청방식은 GET으로 설정한다. API 요청에 필요한 인증 정보인 엑세스 토큰은 HTTP 요청 Header에 포함되어 전송된다. 이 때, setRequestProperty() 메서드를 사용하여 Authorization 필드에 엑세스 토큰 정보를 추가한다.

    연결이 성공하면 API 서버는 약관 정보를 JSON 형식으로 반환한다. 반환된 JSON 데이터는 BufferedReader를 이용하여 읽어들이고, 문자열로 변환한 뒤 리턴된다.

    예외처리를 위해 MalformedURLException, ProtocoolException, IOexception클래스를 사용하여, 예외 발생 시 printStackTrace() 메서드를 호출하여 콘솔에 에러 메세지를 출력한다.


카카오 로그인을 구현해봤는데 security랑 연동하며 하는게 어려웠다.

카카오 로그인보다 Spring Security를 더 공부해봐야겠다고 느꼈다.

이렇게 일단 프로젝트를 마무리하고 일단 Spring Security를 공부하며 '왜가?' 팀 프로젝트 리펙토링할 때 해보기로 했던 Spring Batch를 사용해 리펙토링을 해봐야겠다.