CustomOAuth2UserService:
Principal 객체로 변환하여 반환합니다.OAuth2SuccessHandler (로그인 성공 핸들러):
CustomOAuth2UserService를 통해 인증이 성공적으로 완료되었을 때 호출됩니다.Http-Only 쿠키에 담아 응답 헤더에 설정합니다. (Http-Only 옵션은 JavaScript로 쿠키에 접근하는 것을 막아 XSS 공격을 방지합니다.)OAuth2FailureHandler (로그인 실패 핸들러):
전역 상태 관리 (Zustand authStore):
AppHeader와 같은 공통 레이아웃 컴포넌트에서 이 스토어를 구독하여, 로그인 상태에 따라 동적으로 UI(e.g., 프로필 아바타, 로그아웃 버튼)를 렌더링합니다.API 클라이언트와 인터셉터 (Interceptors):
axios와 같은 API 클라이언트를 설정했습니다.401 Unauthorized 에러가 발생하면, 이는 Access Token이 만료되었다는 신호입니다.프라이빗 라우트 (Private Route):
PrivateRoute 컴포넌트를 구현했습니다.CustomOAuth2UserService를 통해 소셜 로그인 사용자를 우리 DB와 동기화하고, 성공/실패 핸들러를 통해 로그인 후의 흐름을 제어하며, Http-Only 쿠키로 안전하게 JWT를 전달하는 정교한 OAuth 2.0 파이프라인을 구축했습니다.PrivateRoute 컴포넌트를 통해 사용자의 인증 상태에 따라 페이지 접근을 제어하는 선언적인 라우트 가드를 완성했습니다.