내 첫 프로젝트 경험에서 겪었던 소셜 로그인 문제를 언젠가는 해결해야지... 해결해야지... 생각만 하다가 이번 기회에 제대로 파고들었다.

여기까지 찾아왔다면, 위 시퀀스 다이어그램에 조금이나마 친숙할 것 같다. 만일 처음 본다면, 관련 내용을 찾아보는 것이 도움이 될 것 같다.
단적으로 말해서, spring security는 위의 과정을 위임받아 해결한다. 게다가 위 과정을 통해 가져온 사용자 정보를 바탕으로 JWT토큰을 발행한다.
우리가 Spring Security와 OAuth2.0을 활용한 JWT 토큰 방식(쿠키로 전달) 보안 체계이다. 아래 시퀀스 다이어그램을 보자.

이를 구현하기 위해 GPT와 함께 어떤 클래스들을 구현해야 하는지 알아보며 공부해봤고, 아래와 같은 다이어그램을 완성하였다.

번호순서대로 진행하게 된다. 위의 클래스와 filter들을 구현해야 하고, 이유는 다음과 같다.
SecurityConfig : securityFilterChain을 활용해 Session정책, 아래 설명하는 함수들을 활용한 인증 정책을 총체적으로 Configuration.
OAuth2UserService : loadUser메서드 내부에서 다음과 같은 과정 진행함.
- 인가 서버에서 도착한 유저 정보가 들어있는 OAuth2User객체를 반환함.
- 인가 서버 별 JSON 응답이 다른 점 때문에, 원하는 고유 값(ID나 이메일 등)을 꺼내기 위해 공급자를 구분
- 구분한 공급자(kakao, google, naver 등)별 고유 식별자 가져옴.
- 가져온 고유 식별자로 유저 정보를 조회(회원가입처리 혹은 로그인)
- defaultOAuth2User객체 반환함
OAuth2LoginAuthenticationFilter : state(어느 유저의 로그인 요청인지 구분하는 구분자)를 활용해 인가 서버에 유저 정보 요청->결과 반환 후 OAuth2USerService로 전달
OAuth2SuccessHandler : OAuth2UserService이후 jwt 발급해 클라이언트에 쿠키 형태로 jwt반환.
JwtProvider : 유저별 고유 값들을 활용하여 jwt토큰 발행
OAuth2UserInfoFactory : 공급자별로 필요한 정보가 있는 위치가 다름. 이를 찾아내기 위해 공급자별 구분.
'Backend > Spring' 카테고리의 다른 글
| Spring에서의 테스트 (0) | 2025.09.16 |
|---|---|
| 자바와 스프링의 예외처리 (1) | 2025.09.10 |
| 스프링 Security (0) | 2025.04.12 |
| [Spring] HTTP 통신구조 기초 이해 (0) | 2025.03.14 |
| [Spring] Websocket을 활용한 STOMP (0) | 2025.03.11 |