자바 스프링/부트 블로그 JPA 프로젝트

#29 OAuth2.0과 카카오 연동 로그인2 (로그인 서비스 완료)

2022. 5. 18. 23:39
목차
  1. AccessToken을 통해 카카오 회원정보 가져오기
  2. BOM으로 인한 오류 발생

 

AccessToken을 통해 카카오 회원정보 가져오기

 

이전까지 code를 받는 인증처리 완료와 AccessToken을 받아 권한을 부여받는 과정까지 했다.

이번 시간엔 AccessToken으로 카카오쪽으로 카카오로 로그인한 회원의 개인정보를 요청해보겠다.

 

우선 필요한건 body 데이터니까 return response; 에서 response.getBody()로; 코드를 수정한다.

 

이 정보를 오브젝트에 담아야 한다.

이거랑 똑같이 생긴 오브젝트를 하나 만들어보자 변수명도 정확히 같아야 한다.

 

model 패키지에 OAuthToken 클래스를 생성하고

 

body 데이터를 담을 오브젝트인 OAuthToken을 만들었다.

getter/setter를 생성해줘야하니 @Data 어노테이션을 꼭 작성해야한다. 

이 JSON 데이터를 처리하기 힘드니까 이 JSON 데이터를 오브젝트에 담으면 된다.

 

 

JSON 데이터를 담을 때 사용하는 라이브러리인 ObjectMapper를 사용해서 코드를 작성한다.

 

UserController.java

UserController.java

try/catch문을 작성해야 하는 코드는 꼭 작성해주자

 

UserController.java

쉽게 말해서 json 데이터를 java object로 변경해 자바에서 처리하기 위해서

objectMapper 라이브러리를 사용한 것이다.

그런데 이렇게 코드를 작성하면 외부에서 oauthToken을 사용할 수 없으니 try문 밖에 빼내준다.

 

UserController.java

만약 JSON 데이터가 자바 오브젝트로 잘 변환됐다면 해당문구가 이상없이 출력될 것이다.

 

실행결과 :

 

자바 오브젝트로 잘 변환된 것을 확인할 수 있다.

 

UserController.java

스프링을 모르는 사람 입장에선 해당 getAccess_token()이 어디 있었는데? 할 수 있는데

 

OAuthToken.java

getter, setter, 생성자 등을 직접 작성하지 않고 @Data 어노테이션으로

@Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode 를 한꺼번에 설정해주었기 때문에

getter를 꺼내 쓸 수 있는 것이다.

 

 

다시 돌아와서, 현재 AccessToken 으로 회원정보를 가져오는 것이 목표이다.카카오 개발자 사이트에 가서 AccessToken로 어떤 정보를 가져올 것인지 확인하자

식별자인 회원번호와 카카오계정 정보들 중에서

프로필(닉네임)과 이름 이메일을 가져올 것이다.

 

왼쪽 메뉴에서 REST API를 눌러, 스크롤을 내려 AccessToken 사용을 확인한다.

GET / POST를 모두 지원한다는 것인데, 여기서는 POST로 하자

 

요청 주소 : https://kapi.kakao.com/v2/user/me

헤더 값 :

Authorization: Bearer ${ACCESS_TOKEN}

Content-type: application/x-www-form-urlencoded;charset=utf-8

 

body 값은 없다. 

 

이제 AccessToken 토큰을 사용해 회원정보를 요청하는 코드를 작성해보자

앞서 만들었었던 POST 로 AccessToken을 받는 코드랑 방식이 같기 때문에

작성했었던 해당 코드를 복사하고

해당 코드를 복사한다.

여기다가 붙여넣고,

 

body 데이터를 필요없으니 다 삭제하고, rt , headers 등 변수들의 이름을 수정한다. 

아까 카카오 개발자 사이트에서 확인했듯이

AccessToken 사용 요청 헤더 값이

Content-type: application/x-www-form-urlencoded;charset=utf-8 말고도 

Authorization: Bearer ${ACCESS_TOKEN}가 있었으니 해당하는 헤더값을 추가적으로 작성해준다.

 

AccessToken 토큰을 사용해 회원정보가 제대로 가져와지는지 실행해보자

 

실행결과 :

 

BOM으로 인한 오류 발생

 

??

코드 제대로 작성한게 맞나 계속 확인하고 링크도 확인했는데 아무 이상이 없었다.

30분동안 오류 때려잡으려고 키보드치다가 오류창을 확인해보니 

링크에 %EF%BB%BF같은 이상한 글자가 낀 것이 보였다.

검색해보니 메모장으로 utf-8 파일을 수정할 때 발생할 수 있는 오류라고 한다.

 

해당 링크를 메모장에 정리해두고 컨트롤러 파일에 붙여넣기 해서 작성했었는데 오류가 발생한 것이다.

 

1. 왜 이런 오류가 발생한 것일까?

2. 다음엔 이런 오류가 나지 않게 하거나 줄일 방법이 있을까?

 

 

왜 이런 오류가 발생한 것일까?

 

유니코드 인코딩의 방식으로 UTF-8, UTF-16 등이 있는데,

이렇게 비슷한 방식을 사용하는 문서는 Byte Order Mark(BOM)로 구별이 된다.

문서 맨 앞에 눈에 보이지 않는 특정 바이트를 넣어 어떤 인코딩 방식이 사용되었는지 알아내는 방법이다.

UTF-8의 BOM은 EE BB BF 이다. 

메모장에서 UTF-8로 저장해 BOM이 추가되었는데 이걸 복사해 가져와서 붙였더니

BOM이 컨트롤러 파일에 가져와져서 오류가 발생했던 것이다.

 

다음엔 이런 오류가 나지 않게 하거나 줄일 방법이 있을까?

 

검색을 해보니 이제는 UTF-8의 경우에 BOM이 필수도 아니고 사용을 권장하지도 않는다고 한다.

현대의 에디터(메모장 포함)은 이제 BOM이 없어도 UTF-8을 인식할 수 있다.

오히려 BOM이 오류를 유발하는 경우가 많고 웹 개발할 때 특히 메모장으로 뭘 잘못 건들면

바로 BOM이 추가되고 이로 인해서 웹에서 오류가 나는 경우가 많다고 한다.

따라서 다음에 이런 오류가 나는 것을 방지하기 위해서

윈도우 메모장을 쓰지 않고 에디트 플러스를 사용하기로 했다.

이게 EditPlus이다.

 

에디트 플러스는 기본 설정이 BOM 제거이기 때문이다.

+ BOM이 아닌, 일반 UTF-8로 설정하면 된다.

 

 

 

다시 돌아와서, BOM을 제거하고 다시 작성했더니

다람쥐 카카오 계정의 닉네임과 프로필사진,

화면엔 안 보이지만 오른쪽 끝에 이메일도 가져왔다.

 

json viewer 확장 프로그램을 사용해서 보면,

이렇게 AccessToken을 통해 회원정보를 성공적으로 가져온 것을 확인할 수 있다.

프로필 사진 링크 ex

http://k.kakaocdn.net/dn/dpk9l1/btqmGhA2lKL/Oz0wDuJn1YV2DIn92f6DVK/img_110x110.jpg

 

 

이제부턴 단순 구현이다.

이 AccessToken를 통해 얻은 정보를 가져와 강제로 회원가입을 시키고 로그인시키면 되기 때문이다.

 

 

학습자료 : https://youtu.be/WACDTFroYNI

'자바 스프링 > 부트 블로그 JPA 프로젝트' 카테고리의 다른 글

#28 OAuth2.0과 카카오 연동 로그인1 (code와 AccessToken 받기)  (1) 2022.05.18
#27 회원 수정  (0) 2022.05.17
#26 CRUD 게시판 - Update, Delete (수정, 삭제)  (0) 2022.05.16
#25 CRUD 게시판 - Read (목록,페이징,상세보기)  (2) 2022.05.16
#24 CRUD 게시판 - Create (글 작성하기)  (0) 2022.05.15
  1. AccessToken을 통해 카카오 회원정보 가져오기
  2. BOM으로 인한 오류 발생
'자바 스프링/부트 블로그 JPA 프로젝트' 카테고리의 다른 글
  • #28 OAuth2.0과 카카오 연동 로그인1 (code와 AccessToken 받기)
  • #27 회원 수정
  • #26 CRUD 게시판 - Update, Delete (수정, 삭제)
  • #25 CRUD 게시판 - Read (목록,페이징,상세보기)
daramG
daramG
dotori Java
daramG
다람쥐의 개발 블로그
daramG
전체
오늘
어제
  • 분류 전체보기 (193)
    • Java 코딩테스트 공부 (67)
      • Java 알고리즘 공부 (37)
      • Java 백준 문제풀이 (27)
      • Java 코테 나만의 팁 (3)
    • SQL Study (0)
      • Programmers SQL 문제풀이 (0)
      • SQLP 준비 (0)
    • 웹 개발 지식 정리 (0)
      • Servlet (0)
      • Java 정리 (0)
    • 자바 스프링 (45)
      • 스프링 공부 (4)
      • 스프링 게시판 프로젝트 (6)
      • 부트 블로그 JPA 프로젝트 (30)
      • react & springboot (5)
      • 스프링 오류창고 (0)
      • 리액트 + 스프링 프로젝트 (0)
      • pf (0)
      • pfError (0)
    • React (6)
      • React 정리 (3)
      • React 오류 창고 (3)
    • C++ 코딩테스트 공부 (중단) (20)
      • c++ 백준 문제풀이 (15)
      • c++ 알고리즘 공부 (5)
    • Unity (3)
      • Unity 공부 (3)
    • WebRTC (2)
      • WebRTC 강의학습 정리 (0)
      • WebRTC 프로젝트 (1)
    • 김영한님의 스프링 강의 학습 (10)
      • 스프링 강의 목차 (1)
      • 인텔리제이 & 스프링 기초 (1)
      • 스프링 핵심 원리 (8)
    • 전공 지식 정리 (40)
      • interview (0)
      • Java (0)
      • 운영체제 (4)
      • 데이터베이스 설계 (10)
      • 소프트웨어 공학 (3)
      • 유닉스 (14)
      • 디지털 논리회로 (0)
      • 인공지능 (7)
      • js (0)
      • etc (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • React&Spring 강의수강
  • 운영체제
  • Unity 공부
  • 노마드코더의 zoom클론코딩
  • 스프링 공부
  • 김영한 스프링 입문
  • 인공지능
  • 유닉스
  • Java 코테 나만의 팁
  • 김영한의 스프링 핵심 원리
  • C++ 알고리즘
  • 무서운 이야기
  • java
  • 김영한 스프링 강의
  • 스프링부트 블로그 프로젝트
  • 데이터베이스 설계
  • 백준 c++
  • 스프링부트 프로젝트
  • Java 백준 문제풀이
  • 부트 jpa 게시판 프로젝트
  • java 알고리즘
  • 코테 알고리즘
  • 디지털 논리회로
  • 스프링 프로젝트

최근 댓글

최근 글

hELLO · Designed By 정상우.
daramG
#29 OAuth2.0과 카카오 연동 로그인2 (로그인 서비스 완료)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.