728x90
Spring Security
[등장 배경]
1. 보안 요구 증가
웹 애플리케이션이 점점 복잡해지고 민감한 정보를 다루게 되면서, 인증 인가에 대한 처리 필요
2. 보안을 직접 구현하기에는 에러 발생 가능성 증가 & 유지보수 어려움 등 문제 다수
3. Spring에 통합되어 동작하면서도 보안 기능을 일관되게 제공할 수 있는 프레임워크 필요
- 필터(Filter) 기반으로 동작하기 때문에 스프링 MVC와 분리되어 관리 및 동작
- 필터(Filter) 는 Dispatcher Servlet으로 가기 전 적용 => 가장 먼저 url 요청을 받음

Spring Security 인증 파트

1. Http Request
- 사용자가 로그인 폼에서 ID/PW 입력 → 서버로 전송
2. AuthenticationFilter (ex: UsernamePasswordAuthenticationFilter)
- 로그인 요청을 감지해, 사용자의 ID/PW로 UsernamePasswordAuthenticationToken 객체 생성
3. AuthenticationManager
- 인증을 시도하는 핵심 인터페이스
- 기본 구현체: ProviderManager
4. AuthenticationProvider
- 실제 인증 로직을 수행하는 인터페이스
- 주로 DaoAuthenticationProvider가 사용됨
5. UserDetailsService
- AuthenticationProvider가 이 인터페이스를 통해 사용자 정보를 불러옴
- 백엔드 개발자가 직접 구현하는 인터페이스 (loadUserByUsername())
6. UserDetails
- 유저 정보를 담는 객체 인터페이스
- 직접 구현한 User 객체가 이를 implements 함
User 와 Member 차이?
스프링에서 제공하는 User & 프로젝트에서 개발자가 직접 만드는 회원 VO( ex : Member)의 차이점이 궁금하다
User : Spring Security 내부 인증/인가용, 로그인 시 UserDetails로 사용됨
Member : DB에 저장되는 사용자 데이터, 회원가입, 조회, 수정 등 도메인 역할
UserDetailsService에서 Member를 조회해서 User로 바꿔주는 역할을 함
public class CustomUserDetailsService implements UserDetailsService { private final UserDetailsMapper mapper; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { //mapper를 통해 Member 조회 MemberVO vo = mapper.get(username); if (vo == null) { throw new UsernameNotFoundException(username + "은 없는 id입니다."); } //Member vo로 UserDetails return //업캐스팅(부모 : UserDetails, 자식 : User) return new CustomUser(vo); } }
7. UserDetailsService → UserDetails 반환
- DB 등에서 사용자 조회 후 UserDetails 구현체 반환
8. AuthenticationProvider 인증 수행
- UserDetails를 바탕으로 패스워드 검사 → 인증 성공 여부 판단
9. AuthenticationManager → Authentication 반환
- 인증 성공 시, 인증 정보를 담은 Authentication 객체 반환
10. SecurityContextHolder 저장
- 최종적으로 인증 정보를 SecurityContextHolder에 저장→ 이후 인증된 사용자 정보는 여기서 꺼내 씀
JWT(Json Web Token)
- JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web 토큰
- Header.Payload.Signature 세 가지로 구성 / 각 부분은 Base64로 인코딩, .으로 구분


Access Token
: 인증된 사용자가 특정 리소스에 접근할 때 사용되는 토큰
Refresh Token
: Access Token의 갱신을 위해 사용되는 토큰

728x90
'KB 국민은행 IT's your life 교육' 카테고리의 다른 글
| [KB IT's YOUR LIFE] 6기 우수수료생의 KB국민은행 부트캠프 후기 (5) | 2025.12.30 |
|---|---|
| [Spring framework] Spring Security + JWT 로그인 실습 (1) | 2025.07.01 |
| [DB] RDBMS vs NoSQL , 각각 활용 사례 정리 (0) | 2025.05.26 |
| [Java] 객체지향 설계 원칙 SOLID / 제어의 역전(IoC), 의존성 주입(DI) (0) | 2025.05.05 |
| [Java] 자바 최상위 클래스 & 중첩 클래스 (인스턴스 멤버 클래스, static 정적 멤버 클래스) (0) | 2025.04.22 |