이번 인증/인가 리팩토링에서는 JWT 기반의 인증을 추가 구현하였습니다. 인증/인가 정책이 바뀔 경우를 대비하여 추상화된 인터페이스를 통해 다양한 인증 전략이 활용될 수 있도록 구현을 진행하였지만, 다른 기능의 비즈니스 로직까지 수정이 필요하고 유지보수 관점에서 쉽지 않을 것 같습니다. 실제 실무에서는 이와 같이 인증전략을 추상화하는 것은 어려울 것 같습니다.
(그래서 이번 프로젝트는 JWT 기반의 인증/인가 전략만 사용할 예정입니다.)
1. 주요 컴포넌트 구성
JWT 기반의 컴포넌트는 아래와 같이 구성하였습니다. Security에서 제공하는 필터와 인터페이스를 구현체로 Override하여 컴스텀하면서 구현을 진행하였습니다. 확실히 Session 로직 대비 코드 복잡도가 올라갔습니다. 코드를 구현하고 나서 다시 살펴보는데, SecurityConfig와 JWTFilter의 가독성이 좋지 않아 개선이 필요해보입니다.
컴포넌트 명 | 내용 |
SecurityConfig | 보안 설정 클래스 |
AuthStrategy | 인증 전략 인터페이스 |
JwtAuthStrategy | JWT기반 인증 구현체 |
JwtFilter | JWT 검증 필터 |
JwtTokenProvider | JWT 토큰 생성 및 검증 |
AuthenticationFilter | 사용자 인증 요청 처리 필터 |
2. 인증 시퀸스
시큐리티를 공부하면서 인증 프로세스의 추상화가 잘되어 있다는 느낌을 받았습니다. 인증 토큰 발행을 통해서 인증 상태를 관리하고, UserDetails 객체를 통해 인증 정보의 관리하는 등, 잘 구축된 객체지향 구조를 본 것 같아서 공부가 되었습니다. 인터페이스를 Override하여 구현화 시키면서 시큐리티에 대한 이해나 객체지향 프로그래밍에 대해 좀 더 이해할 수 있었습니다.
클라이언트 요청
→ AuthenticationFilter (인증 토큰 발행)
→ AuthenticationManager (인증 관리)
→ DaoAuthenticationProvider (인증된 회원 정보 객체 관리)
→ MemberDetailsService (UserDetails 객체 생성)
→ DaoAuthenticationProvider (UserDetails를 통해 회원 검증)
→ AuthStrategy.onAuthSuccess() (인증 성공 시, JWT 생성)
→ JWT 요청 Header에 등록
→ 클라이언트 응답
2.1. 로그인, 시퀸스 다이어그램 (참고)
2.3. api 요청 시, 시퀸스 다이어그램 (참고)
SecurityConfig와 JWTFilter의 코드 가독성, 결합도 및 유지보수 측면에서 개선해야될 부분이 있지만, 먼저 Naver Pay API를 활용한 결제 기능 구현 후에 리팩토링 예정입니다.
좀 더 상세한 내용은 아래 깃허브 Wiki에 정리하였습니다.
[Spring Security] 로그인 인증 인가 ver.2
Contribute to FarmorAI/farm-web-spring development by creating an account on GitHub.
github.com
728x90
'Project > SmartFarm:개발일지' 카테고리의 다른 글
[개발일지] 프로젝트 9일차 : Spring Security 로그인 인증 (0) | 2025.02.19 |
---|---|
[개발일지] 프로젝트 8일차 : Spring Security (feat. MyBatis) (1) | 2025.02.18 |
[개발일지] 프로젝트 7일차 : ERD 설계 (feat. MySQL) (0) | 2025.02.18 |
[개발일지] 프로젝트 4~6일차 : 프로젝트 (0) | 2025.02.18 |
[개발일지] 프로젝트 1~3일차 : 프로젝트 기획 & 페이지 설계 (0) | 2025.02.18 |