221119 카카오 로그인 access token 가져오기

샨티(shanti)·2022년 11월 19일
0

하루를 마무리 하기 전, 오늘 있었던 일들을 잔잔히 되짚어봅니다.
성공과 실패의 모든 요소에서 '배울 점'을 찾아내어 기록하고,
더 성장하는 내일의 나를 위해 'action plan'을 세웁니다.

근 3일동안 고통받았던 서드파티 로그인(카카오)의 실마리가 보인 날이었다.
하지만 그 실마리가 너무 늦게 보였다는게 문제... 윽...ㅎㅎㅎ

우선 오늘 구현한 내용을 간단하게 캡쳐하고 공유한다.


시작은 창대했다. 이번주에 반드시 네이버 로그인, 카카오 로그인, 천천히 둘러볼게요(로그인 패스)를 구현하겠다고 다짐했지만. 현실은 카카오 로그인도 제대로 해결하지 못해 찌질 찌질..ㅋㅋ


카카오 로그인 버튼을 클릭하면 나타나는 로그인 창.
만약 사용하고 있는 브라우저의 다른 탭에서 카카오 계정으로 로그인이 되어있는 상태라면 이 창은 뜨지 않고 바로 redirection 설정한 링크로 이동한다.


카카오 로그인에 성공하면 나타나는 내 카카오 닉네임.
우선 정보를 받아오는지만 확인하기 위해 보안이나 회원 가입 여부는 신경쓰지 않고(;;) 카카오 닉네임을 화면에 띄워주도록 만들었다.

너무 많은 시간을 할애했다. 시간을 되돌릴 수 없으니 남은 하루동안 정말 빡세게 마무리를 지어야 카카오 로그인 기능이라도 스프린트 회의 때 공유할 수 있을 것 같은데.

막상 카카오의 액세스토큰과 닉네임을 받아오고나니 정말 노아님 말씀 대로 지금부터가 진짜이고 어려운 과정이라는 생각이 든다.

우선 오늘까지 한 내용에 대해 간략히 회고하고 스프린트 회의 하루 전인 내일의 계획을 세워보려 한다.


필요한 공부, 조사해야 할 내용에 대한 핵심을 짚어내기까지 너무 많은 시간을 할애했다.

가장 아쉬운 부분이다.
지금 돌이켜보면... 그 부분을 트레이너님들께 물어봤어야 하나? 싶기도 하지만. 한편으론 삽질을 통해서 '내가 어떤 공부를 해야 하는지 맥을 빠르게 잡는 것이 중요하다'는 사실도 절실하게 깨달았다.

'백엔드에서 외부와 통신하는 방법을 알아야 한다!' 라는 사실을 깨닫는데만 이틀 정도가 걸렸다. 그 전까지 정말 오-만가지 삽질을 했다.
카카오 로그인 API를 이해하는 데도 시간이 오래 걸렸고, 이를 클라이언트 사이드에서 하면 안된다는 느낌적인 느낌은 왔는데 빠르게 turn 하지 못하고 '그래도 될까? 우선 해볼까? 아닌데? 흠 다른걸 찾아볼까?' 하며 주저했던 시간이 너무 길었다.

한편으론 이런 고민을 하다보니 홀맨님과 노아님께 평소보다는 구체적으로 질문하고 구체적인 방법론을 제시받을 수 있었다. 삽질의 긍정적인 효과랄까...? 물론 시간만 좀 더 넉넉했다면.

사실 앞으로도 네이버 로그인 기능, 유튜브 영상 가져오기 기능 등 여러가지를 구현해야 하는데... 이런 삽질의 경험이 더 많아진다면 다음번엔 내가 '무엇을 공부하는지'를 알기까지의 시간을 줄일 수 있겠지..? ㅠㅠ 제발......


인증/인가에 대한 전반적인 이해가 부족했다.

인증과 인가에 대한 전반적인 이해가 부족했다고 생각한다. 그러다보니 카카오 API 로그인에서 이야기하는 로그인 절차를 이해하는데 시간이 좀 걸렸다. 물론 구글이나 네이버 모두 각자의 인증 절차가 다를 것이기에 갖다 쓰려면 각각에 대한 이해가 좀 있어야 겠지만... 어쨌든 배경지식이 좀 더 탄탄했다면 REST API를 갖다 쓰면서도 어떤 부분을 불러와야 할지 좀 더 빠르게 파악할 수 있지 않았을까? 하는 그런 아쉬움.

카카오 로그인의 경우 유효한 계정이 확인되는 순간에 access token을 주는 게 아니라 인가 코드라는 것을 준다. 이 인가 코드를 받아서 다시 카카오 서버에 액세스 토큰과 함께 서비스 제작자가 설정한 '사용자 정보'를 달라고 요청해야 한다.

생각보다 '인가 코드'를 받아오는 것까지는 수월했다. 클라이언트 측에서 받아오면 되는 정보였고 그 정보를 백엔드로 넘겨주면 될 일이었어서..

근데 그 이후 문제를 해결하기까지가 너-무 시간이 오래걸렸고 내 상황에 맞는 레퍼런스를 찾는 것도 쉽지 않았다.

심지어 지금 구현해 놓은 코드 중에서 Gson Library의 JsonParser는 deprecated 상태라 쓰면서도 찜찜하지만 우선 촉박한 시간 때문에 다른 것으로 대체하지 않고 구현 상태로 두었다.
외부 통신 방법도 WebClient를 사용하고 싶었으나 RestTemplate 레퍼런스를 참고해서 구현했다.

여러 요소들을 고려했을 때 밸런스를 맞추기 위해 때로는 타협해야 하는 부분들이 생기는 것 같다.

만약 WebClient를 공부해서 구현했다면? 또다른 Json Parsing 라이브러리를 찾아 공부해서 구현했다면?
지금 상황보다는 좀 더 안정적일 수 있겠으나 일정을 맞추지는 못할것 같다. 이미 구현하지 못한 많은 기능들이 남아있기에.

어제부터 다시금 떠올리는 말이 있다.
노아님이 해주셨던 이야기인데..
'퀄리티를 낮추지 말고 기능의 범위를 좁혀라'는 말이다.

이제 스프린트 회의까지 하루 하고 절반정도의 시간이 남았다. 밸런스를 맞추고 '동작하는' 상태를 만들기 위해 내일은 어떤 작업을 해야할까?


카카오 로그인 기능 마무리하기

카카오 로그인 기능을 마무리하고 싶다. 가장 덩어리가 크기도 하고 이걸 마무리 한다는 점은 사실 인증/인가에 대한 1차 구현을 마치겠다는 의미와도 통한다.

사실 오늘 오전에 카카오 로그인 기능이 너무 풀리지 않아서 풀스택 강의의 인증/인가 부분을 다시 들었다.
새삼 새롭게 다가오는 부분들이 많았다.

카카오 로그인을 구현하면서 가장 고민스러웠던 것이 '카카오 회원인건 알겠는데, 그럼 우리 회원인 것은 어떻게 증명하고 또 만들어갈 것이냐?'하는 부분이다.

현재 파악한 상황으론,
(1) 카카오 로그인 시에 받아오는 인가 코드는 매번 변한다.
(2) 카카오 인가 코드를 보내서 얻어오는 액세스 토큰 역시 매번 변한다.
(3) 심지어 유저 정보중에서 받아오는 '이메일 주소' 역시 유효한지 아닌지, 또 카카오 계정에 있는지 없는지도 확실치 않다. 카카오 측에서는 이 이메일 주소의 유효성 여부를 true, false로 알려주고 또 이메일로 가입한 사용자가 아닌 경우라면(거의 없겠으나) 이메일이 없다는 값을 반환해주고, 심지어 사용자가 카카오 계정의 이메일을 바꿔버린다면 우리 회원이라고 하더라도 이메일 값으로는 회원 여부를 증빙할 수가 없어진다. 이 때문에 카카오 API 문서에도 카카오 회원 계정의 이메일을 unique 값으로 사용하지 않을 것을 권한다고 써있다.

흡흡.. 이래서... 액세스 토큰을 받아오는 것이 시작에 불과했구나...............

만약 내일 일정에서 각이 나오지 않는다면 명확하게 한가지 방법으로 밀고 가고자 한다.

카카오 로그인 시 받아온 액세스 토큰을 그.대.로. 믿고 쓰는걸로.
기능을 아-주 단순화 시켜서 카카오 로그인 후 액세스토큰이 있다면 회원들만 가지는 메뉴 접근 권한을 동일하게 부여하고, 액세스토큰이 없다면 로그인 페이지로 이동시키는. 그런 기능을 구현하는 것이 지금 남은 시간동안 할 수 있는 최선일 것 같다.

하지만 좀 더 빡시게 밀어부쳐서 한다면, 그리고 궁극적인 방향성은 액세스 토큰과 함께 받아온 유저 이메일로 userRepository에 user 정보가 있는지를 확인한 후에 없다면 회원가입을 추가로 진행하고, 있다면 이 이메일 정보를 가지고 다시 한번 더 accessToken을 발행하여 이를 활용해야 할 것이다. - 카카오 액세스 토큰은 매번 바뀌기에.

알면 알수록 아리송한 서드파티 로그인;;

하지만 요즘은 기본으로 해야하는 부분이기에. 어쨌든 짚고 넘어가자!!!

내일은 좀 더 안정적인 서비스를 구현하도록..!! 단순한 기능부터 빠르게~!!!

profile
가벼운 사진, 그렇지 못한 글

0개의 댓글