1. 초기 로그인 요청

  1. 사용자가 카카오 로그인 버튼 클릭
  2. /auth/oauth/kakao/login?state={디바이스 타입} 엔드포인트 호출 (디바이스 타입을 state 파라미터로 전달)
  3. OAuthController.redirectToOAuthLoginPage() 에서 카카오 로그인 페이지로 리다이렉션
  4. 카카오 인증 페이지에서 사용자가 로그인 및 권한 승인

2. 카카오 인증 콜백 처리

  1. 카카오가 승인 코드(code)를 포함하여 /auth/oauth/{provider}/callback 엔드포인트로 콜백
  2. OAuthController.handleOAuthCallback() 메서드 실행
  3. OAuthLoginService.handleOAuthCallback() 호출하여 로그인 처리 시작

3. OAuth 사용자 정보 조회

  1. OAuthLoginService.processOAuthLogin() 메서드에서 로그인 처리
  2. 적절한 OAuth 서비스 구현체(KakaoOAuthService) 선택
  3. KakaoOAuthService.getUserInfo() 메서드로 인증 코드를 통해 사용자 정보 요청:

4. 사용자 매핑 확인

  1. OAuthRepository.findBySocialUserIdAndProvider() 호출하여 기존 매핑 확인
  2. 매핑 결과에 따라 분기:

4-1. 기존 매핑이 있는 경우

  1. 기존 매핑에 새로운 OAuth 토큰으로 업데이트
  2. 매핑의 userId와 temporary 상태 확인:

4-2. 기존 매핑이 없는 경우