이 글은 인프런 OAuth2 강의를 수강하면서 실습한 내용을 바탕으로 작성되었습니다.
실제 구현 과정에서 느꼈던 궁금증을 정리해보았어요!
[본 게시물은 파트너스 활동의 일환으로 소정의 수수료를 받을 수 있습니다.]
Spring Boot에서 카카오 소셜 로그인을 구현하면서 정말 신기한 경험을 했다.
단순히 http://localhost:8080/oauth2/authorization/kakao라는 URL에 접속했을 뿐인데,
마법처럼 카카오 로그인 페이지로 리다이렉트되었다.
도대체 Spring Security OAuth2 내부에서는 무슨 일이 일어나고 있는 걸까?
🤔 의문의 시작
처음에는 이해가 안 됐다.
나는 /oauth2/authorization/kakao라는 컨트롤러를 만든 적도 없고,
카카오 API를 직접 호출하는 코드도 작성하지 않았다.
그런데 어떻게 브라우저가 자동으로 이런 복잡한 URL로 리다이렉트되는 거지?
https://kauth.kakao.com/oauth/authorize?
response_type=code&
client_id=220049e07c364215feaa50e61a4edb6d&
scope=profile_nickname%20profile_image%20account_email&
state=EToaKWD1zq4-yhqXYwiQP5TUJdpiINa4I8IyjL2mpmI%3D&
redirect_uri=http://localhost:8080/login/oauth2/code/kakao
🔍 Spring Security OAuth2의 마법
답은 Spring Security OAuth2의 자동 설정에 있었다.
1. 자동 엔드포인트 생성
application.yml에 OAuth2 설정을 추가하는 순간,
Spring Security는 자동으로 두 개의 중요한 엔드포인트를 생성한다:
spring:
security:
oauth2:
client:
registration:
kakao: # 이 이름이 핵심!
client-id: ${KAKAO_CLIENT_ID}
# ... 기타 설정
- Authorization 요청 엔드포인트: /oauth2/authorization/{registrationId}
- Callback 처리 엔드포인트: /login/oauth2/code/{registrationId}
여기서 {registrationId}는 설정 파일의 kakao 부분이다.
즉, /oauth2/authorization/kakao와 /login/oauth2/code/kakao가 자동으로 생성되는 것!
2. OAuth2AuthorizationRequestRedirectFilter의 역할
사용자가 /oauth2/authorization/kakao에 접속하면,
OAuth2AuthorizationRequestRedirectFilter가 동작한다:
- 설정 정보 읽기: application.yml에서 카카오 관련 설정을 로드
- Authorization URL 생성: 카카오의 인증 서버 주소와 필요한 파라미터들을 조합
- State 파라미터 생성: CSRF 공격 방지를 위한 랜덤 값 생성
- 리다이렉트 응답: 브라우저에게 카카오 로그인 페이지로 이동하라고 지시
3. 파라미터 자동 생성의 비밀
가장 신기했던 건 URL 파라미터들이 어떻게 자동으로 생성되는지였다:
response_type=code // OAuth2 Authorization Code 플로우
client_id=220049... // application.yml의 KAKAO_CLIENT_ID
scope=profile_nickname... // application.yml의 scope 설정
state=EToaKWD1zq4... // Spring Security가 자동 생성한 CSRF 토큰
redirect_uri=http://... // application.yml의 redirect-uri 설정
모든 값들이 설정 파일에서 자동으로 읽어와진다!
🔄 전체 흐름 정리
💡 핵심 깨달음
Spring Security OAuth2의 진짜 장점은
개발자가 복잡한 OAuth2 플로우를 직접 구현하지 않아도 된다는 것이다.
설정 파일만 올바르게 작성하면:
- ✅ Authorization URL 자동 생성
- ✅ State 파라미터 자동 관리
- ✅ Callback 처리 자동화
- ✅ Access Token 교환 자동화
- ✅ 사용자 정보 조회 자동화
🚀 다음 단계
이제 카카오 로그인 후 돌아오는 Authorization Code를 어떻게 처리할지가 남았다.
Spring Security는 이 부분도 자동으로 처리해주지만,
실제 서비스에서는 JWT 토큰 발급이나 회원가입 로직 등 커스텀 처리가 필요하다.
다음 글에서는 OAuth2 로그인 성공 후 처리 과정을 다뤄보겠다!
참고 자료:
📚 더 깊이 학습하고 싶다면?
OAuth2와 Spring Security에 대해 더 체계적으로 학습하고 싶다면 인프런 OAuth2 강의를 추천드려요!
이론부터 실습까지 단계별로 잘 정리되어 있어서, 이 글에서 다루지 못한 심화 내용들도 배울 수 있습니다.
특히 JWT 토큰 처리, 커스텀 OAuth2 핸들러 구현, 멀티 소셜 로그인 통합 등의 실무에서 꼭 필요한 내용들이 포함되어 있어요!
오늘의 TIL: 프레임워크의 '마법' 뒤에는 항상 정교한 설계와 구현이 숨어있다. 🪄
'Spring' 카테고리의 다른 글
Spring Assert로 깔끔하게 검증하기(feat. 토비의 클린 스프링) (2) | 2025.07.17 |
---|---|
[Spring Security] 카카오 소셜 로그인 구현하며 팩토리 패턴을 처음 적용해본 후기 (0) | 2025.07.15 |
🛡️ Spring에서 JSR-305로 Null Safety 확보하기 (2) | 2025.07.11 |
Spring AOP를 활용해서 권한 체크 하기 (0) | 2025.03.06 |
LocalDateTime Jackson 직렬화 오류 해결하기 (2) | 2025.01.22 |