## 1. ✨ 설계 배경 및 목적 <!-- - 왜 이 구조/기능이 필요했는지 - 어떤 문제를 해결하려고 했는지 - 기존 구조의 한계 또는 새로운 요구사항 --> ## 2. 🧱 구성요소 및 구조 <!-- - 관련 파일 구조 / 디렉토리 - 역할별 컴포넌트/훅/모듈 간의 관계 - 시각적 다이어그램(선택) → Sequence Diagram, 구조도, Flowchart 등 --> 카카오 로그인 전체 흐름 이 코드는 사용자가 카카오 버튼을 클릭한 순간부터 우리 서비스에 로그인이 완료되기까지의 모든 과정을 서버에서 처리합니다. 전체 흐름은 다음과 같습니다. (사용자) 로그인 또는 회원가입 페이지에서 "카카오로 시작하기" 버튼을 클릭합니다. (프론트엔드 → 카카오) 브라우저는 카카오 인증 페이지로 이동합니다. 사용자는 여기서 동의하고 계속하기를 누릅니다. (카카오 → 우리 서버) 카카오가 사용자를 우리 서버의 특정 주소(/api/auth/kakao/callback)로 돌려보냅니다. 이때 URL에는 '인가 코드(code)'와 사용자의 최초 의도('state')가 담겨 있습니다. (우리 서버: GET 함수 실행) 1단계: 카카오와 통신 우리 서버는 받은 '인가 코드'를 카카오 서버로 보내 진짜 사용자 정보와 교환하기 위한 **'액세스 토큰'**을 받아옵니다. 다시 그 '액세스 토큰'을 카카오 서버로 보내 최종적으로 사용자의 이메일, 닉네임, 고유 ID를 얻습니다. 2단계: 의도 파악 및 작업 분배 사용자가 처음에 '회원가입' 버튼을 눌렀는지('signup'), '로그인' 버튼을 눌렀는지(state 값) 확인합니다. 회원가입 의도였다면 → handleOauthSignUp 함수를 호출합니다. 로그인 의도였다면 → handleOauthSignIn 함수를 호출합니다. (우리 서버: handleOauth... 함수 실행) 해당 함수는 카카오에서 받은 사용자 정보를 가지고, 우리 서비스의 메인 백엔드 API(.../oauth/sign-in/kakao 또는 .../sign-up/kakao)를 호출합니다. (메인 백엔드 → 우리 서버) 성공 시: 메인 백엔드는 우리 서비스에서 사용할 **'accessToken'과 'refreshToken'**을 보내줍니다. 실패 시: 왜 실패했는지에 대한 에러 정보를 보내줍니다. (예: 이미 가입된 계정, 없는 계정 등) (우리 서버 → 사용자) 로그인/회원가입 성공 시: 우리 서버는 받은 토큰들을 쿠키에 안전하게 저장한 후, 사용자를 메인 페이지(/)로 보냅니다. 실패 시: 에러 종류에 따라 적절한 에러 메시지와 함께 로그인(/signin) 또는 회원가입(/signup) 페이지로 보냅니다. ## 3. ⚙️ 동작 흐름 요약 <!-- 사용자 관점 흐름, 개발자 관점 흐름 --> ## 4. 🔮 설계 의도 및 고려사항 ## 5. 🪄 세부 설명: 주요 훅 / 컴포넌트 / 유틸 ## 6. 🧩 사용 예시 및 패턴 ## 7. ⚠️ 사용 시 주의사항 ## 8. 📎 참고 파일 및 링크
Activity