[TIL/React] 2025/01/11
소셜 로그인 - 휴대폰 인증 흐름 정리 📱회원 페이지에서 카카오 아이콘(네이버, 구글도 마찬가지)을 클릭하는 순간 실행되는 함수다. 해당 함수는 사용자를 http://localhost:3000/auth/${provider}/login 경로로 이동시킨다. 카카
소셜 로그인 - 휴대폰 인증 흐름 정리 📱
0. Overall Flow ⚙️

1. AuthPage -> Controller1 ⚙️

회원 페이지에서 카카오 아이콘(네이버, 구글도 마찬가지)을 클릭하는 순간 실행되는 함수다.
해당 함수는 사용자를 ``http://localhost:3000/auth/${provider}/login`` 경로로 이동시킨다.
카카오를 클릭했을 때에는 'kakao' string을 parameter로 받는다. 즉, 프로바이더 별로 로그인 요청에 대한 분기 처리를 진행한 것이다.
2. Controller1 -> RedirectPage ⚙️


이어서 getKakaoAuthUrl() 함수가 실행된다.
해당 함수는 사전에 지정해놓은 kakaoCallbackUrl로 이동함과 동시에, 인가 코드를 받도록 설정해놓은 코드다.
여기서 kakaoCallbackUrl은 ``http://localhost:5173/redirect``을 의미한다.
3. RedirectPage -> Controller1 ⚙️

RedirectPage에서는 useEffect에 의해 ``http://localhost:3000/auth/kakao/user`` 경로로 post 요청이 수행된다. 이전 작업을 통해 받아온 인가 코드를 서버로 보내, 토큰을 받기 위함이다.
4. Controller1 -> RedirectPage ⚙️


RedirectPage에서 전송한 인가 코드를 통해, 가장 먼저 getToken() 함수가 실행된다.
카카오에서 지정한 url로 그들이 요구하는 params를 형식에 맞게 지정한 후 post 요청을 보내고, 해당 data의 응답값을 반환하는 함수다.
그렇다면 controller에 있는 tokens 변수에는 response.data가 담기는데, 그 내부의 access_token 값을 getUserInfo() 함수로 전달한다.

액세스 토큰으로 kakao api에 get 요청을 보낸다. 액세스 토큰은 사용자 정보를 요청하기 위한 전제 조건이다. "액세스 토큰을 줬으니 사용자 정보를 내놓아라!"라는 의미의 코드다.
최종적으로, 기존 회원인지 신규 회원인지를 구분하려는 목적의 registerOrFindUser() 함수가 실행된다.
여기까지가 RedirectPage에서 useEffect로 실행된 내용이다.
5. RedirectPage -> PhoneVerificationPage ⚙️

서버 로직이 정상적으로 수행된 이후, /phone으로 사용자를 이동시킨다.
6. PhoneVerificationPage -> Controller2 ⚙️

이제 PhoneVerificationPage에서 사용자로부터 휴대폰 번호를 입력받는다.
사용자가 카카오로 로그인할 수 있지만, 네이버나 구글로도 로그인할 가능성이 있다. 그럴 경우 동일한 유저임에도 불구하고 계정이 세 개 이상 생길 수 있다.
따라서 휴대폰 인증 절차를 통해 타 provider로 가입한 동일한 인물인지를 판별하는 과정이 필요하다.
위 함수는 사용자가 휴대폰 번호를 입력한 뒤 send 버튼을 클릭하는 시점에 동작한다. 우리 서버의 api/send-code로 phoneNumber를 post 하는 과정을 수행한다.

twilio로부터 verification code를 받기 위한 절차가 서버에서 실행된다. 해당 함수가 정상적으로 동작한다면, 휴대폰으로 국외 발신 문자를 받게 된다. 현재 verification code는 123456이다.
7. PhoneVerificationPage -> Controller2 ⚙️
휴대폰 번호를 받았으니, 이제는 사용자로부터 verification code를 입력받는다. verify code를 send 하는 버튼을 클릭하면 다음 함수를 실행한다.

이번에는 우리 서버의 api/verify-code 경로로 post 요청을 보낸다. 사용자의 휴대전화 번호와 사용자가 받은 verification code를 서버로 전송한다.

서버에서는 최종적으로 verification code가 유효한지 확인하게 된다.
8. Next Step ⚙️

동일한 구조로 네이버와 구글을 구현하면 되겠다. 추가적으로, 현재 유저 정보를 로컬에서 관리하고 있으니, DB와 연결하는 절차를 진행하면 authentication에 관한 구현이 마무리될 것 같다. 굿!
More to read
프론트엔드와 백엔드 사이
HTTP 상태 코드는 프론트엔드에서 백엔드로 보냈던 요청의 수행 결과를 의미하는 일종의 약속이며, API를 구성하는 핵심 요소 중 하나입니다. 상태 코드와 관련하여, 백엔드는 잘 모르는 프론트엔드의 슬픈 사정이 있습니다.아래는 요청이 실패했음에도, 백엔드에서 상태 코드
JWT토큰 관리 방식 톺아보기
0. 들어가며 🎯 서비스에 접근하려는 사용자가 누구인지 확인하는 과정을 사용자 인증이라고 합니다. 인증된 사용자에게 주어진 권한을 확인하는 작업은 인가라고 부릅니다. 이번 글에서는 인가는 다루지 않습니다. 사용자 인증에는 많은 방식이 있지만, 오늘은 세션 인증 방
A2AA2A / MCP 멀티 에이전트 오케스트레이션
0. 들어가며 ✍️ Google for Developers에, 레스토랑 공급망 시나리오로 엮은 6대 프로토콜(MCP, A2A, UCP, AP2, A2UI, AG-UI)에 대한 가이드가 게시된 이후, MCP와 A2A부터 구현해 보는 것이 좋을 것 같다는 생각이 들었습니