주당 프로젝트 진행중(개발 작업 일지)/작업일지

카카오 간편로그인/가입 API 구현 (스프링부트,jpa)

민장미 2024. 2. 27. 19:46

 

구현하면서 많이 수정하고 고민했다.

아무리 생각해도 이메일가입(일반) 회원과 카카오 간편가입 회원을 한 테이블에 넣는 게 맞는거 같았다.

회원테이블과 연관될 테이블이 많을 거라, 2개가 되어버리면 수습이 불가능한 헬....

 

멤버엔티티에 카카오토큰 속성추가했다가, 토큰 만료기간이 짧다길래 바로 버림;

고민하다가 어쩔 수 없이 패스워드를 nullable 로 바꿈 

닉네임도 유니크였는데 카카오 생각해서 유니크도 지워버림 

 

그럴 경우는 거의 없을 거 같지만, 혹시나 어떤 사람의 카카오 이메일주소를 가지고 다른 회원이

이미 가입된 경우엔 그 가입시도자에겐 이메일 가입을 하라고 권유하는 로직으로 수정해보려고 함

 

카카오 로직이

만약 카카오 회원넘버 + 이메일이 회원테이블에서 조회가 안되면 DB에 넣고, 아니면 

회원넘버+이메일으로 검색해서 그 회원엔티티를 반환하도록 해놨다.

복합키가 안전할 거같아서 카카오 이메일도 추가한건데...머리가 복잡하네 ㅠㅠ

 

카카오 회원넘버는 DB에 없는데 이메일이 있을 경우를 처리해야하는데 머리 터진다 어떻게 해야하나??

 

카카오 간편로그인 api는 크게 

 

1 인가코드를 받아온다 

2 그 인가코드를 통해 카카오 회원정보에 접근할 액세스토큰을 받아온다

3 액세스 토큰으로 카카오 회원정보를 Json으로 받아온다

 

이 뒤는 자유롭게 로직짜면 된다. 

 

서치하다가 어느 포스팅에서 따로 기밀 프로퍼티 파일을 만들어서 

직접적으로 카카오 api 키랑 redirectUri 등을 노출 안시키도록 하는 걸 봤는데

정말 필요해보였다. 

프로퍼티 파일 따로 만들어서 

 

앱의 rest키랑 리다이렉트 uri 저장해주고

 

필드 만들어준 다음에 @Value 어노테이션에 ${"프로퍼티 파일에 적은 값"} 설정해주면 된다. 

 

 

포스팅 많이 찾아봤는데, getTokenAccess 메서드를 만들어서 액세스 토큰만 받아오는 경우가 많았다.

나는 다 가져오고 싶어서 getOAuthToken으로 만들었다.

 

우선 JSON을 담아올 자바 클래스를 만든다.  변수명이 받아와지는 카카오 json 의 키랑 일치해야한다. 

 

 

 

결과물 -  카카오 로그인이나 회원가입 버튼을 누르면 나오는 창이다.

 

 

 

 

 

만약 내 카카오 계정이 앱과 연결이 안되어 있다면 (최초라면)

아래 창이 뜬다

 

 

이후에는 로그인 창만 뜰텐데, 동의창이 다시 뜨는걸 테스트 하고 싶다면

아래 링크로 가서 본인 카카오 계정의 연결하고 앱의 연결을 끊어주면 된다.

https://accounts.kakao.com/weblogin/account/info

 

카카오계정

 

accounts.kakao.com

 

 

 

헷갈렸는데 카카오 로그인도 어찌 구현... 연결 끊기는 나중에 할 예정