스프링 시큐리티(Spring Security)
1. 스프링 시큐리티 :
Spring 에서 만든 애플리케이션의 보안을 담당하는 하위 프레임워크(인증 : Authentication, 권한인가 : Authorization 등)
인증 : 사용자가 누구인지를 확인하는 과정 <- Cookie 와 Session 에서 원했던 그 기능
권한 인가 : 인증된 사용자가 해단 자원에 접근할 수 있는지 판단 하는 단계. (권한 인가라고 해야하지만, 편의를 위해 권한 Permission 의 개념이라 생각해도 나쁘지 않음)
Spring Security 를 사용하는 이우 :
- 조금 여러 가지 이유가 있을 수도 있는데, 오랜 세월동안 살아남은 시큐리티 프레임워크이다.
- 초기 설정을 잘 해주면, 많은 로직을 작성 하지 않아도 보안 관련 서비스를 처리 해주는 편리함이 있다.
2. 스프링 시큐리티의 특징과 구조 :
- 보안과 관련하여 체계적으로 많은 옵션을 제공하여 편리하게 사용할 수 있음
- Filter 기반으로 동작.
- 어노테이션을 통한 설정
- Spring Security는 기본적으로 세션 & 쿠키 방식으로 인증
인증관리자(Authentication Manager)와 접근 결정 관리자(Access Decision Manager)를 통해 사용자의 리소스 접근을 관리
=> 상당히 스프링 기본원칙을 잘 만족하고 있다.
인증 관리자는 UserNamePasswordAuthenticationFilter, 접근 관리자는 FilterSecurityInterceptor가 수행
3. Spring Security 의 동작 원리.
스프링 시큐리티 동작원리
- User가 From을 통해 로그인 정보를 입력하고 인증 요청을 한다.
AuthenticationFilter 가 HttpServletRequest 에서 사용자가 보낸 로그인 정보를 인터셉트 한다.(백단에서도 한번더 유효성 검사를 한다.)
- HttpServletRequest에서 꺼내온 사용자 아이디와 패스워드를 진짜 인증을 담당할 AuthenticationManager 인터 페이스에게 인증용 객체로 만들어서 위임한다.
- AuthenticationFilter 에게 인증용객체(UsernamePasswordAuthenticationTocken)을 전달 받는다.
- 실제 인증을할 AuthenticationProvider에게 Authentication 객체를 다시 전달한다.
DB에서 사용자 인증 정보를 가져올 UserDetailService 객체에게 사용자 아이디를 넘겨주고 DB에서 인증에 사용될 사용자정보를 UserDeatils라는 객체로 전달 받는다.
- UserDetails : tip. 인증용 객체와 도메인 객체를 분리하지 않기 위해서 도메인에 UserDetail 을 상속 하기도 한다.(이렇게 짜여진 코드를 좀 더 많이 본거 같다.)
- AuthenticationProvider 는 UserDetails 객체를 전달 받은 이후 실제 사용자의 입력정보와 UserDetails 객체를 가지고 인증을 시도한다.
- 인증이 완료되면 사용자 정보를 가진 Authentication 객체를 SecurityContextHolder에 담은 이후 AuthenticationSuccessHandele을 실행한다. (실패시 FailureHandler 실행.)
장황하게 설명을 해놨지만... 순서대로 잘 따라가다보면 생각보다 별거 없다.
4. 스프링 시큐리티 아키택쳐
스프링 시큐리티 아키택쳐

- 클라이언트부터 쭉 진행해보자
필터(Filter) :
- 스프링 시큐리티는 기본적으로 서블릿의 필터를 기반으로 작동한다.
- 일반적으로 서블릿이 하나의 HttpServeletRequest를 받아 요청을 처리하고 응답을 클라이언트로 보내지만, Filter 가 포함되게 되면, 요청이 클라이언트에 보내기전에 컨테이너는 하나의 필터체인(FilterChain)을 생성한다.
- FilterChain안에는 필터와 서블릿이 존재한다.
- => 말 그대로 '필터'의 역할이라 보면된다. 인터셉터와 구분해서 알아둘 필요는 있다.
DelegationFilterProxy :
- 사용자의 요청이 서블릿에 전달되어 자원에 접근하기전에, 스프링 시큐리티는 필터의 생명주기를 이용해서 인증과 권한 작업을 수행한다.
- 하지만, 서블릿컨테이너 에서는 스프링 컨테이너에 등록된 빈을 인식할 수 없다.
- 따라서 DelegationFilterProxy라는 서블릿 필터의 구현체를 제공한다.
- DelegationFilterProxy는 서블릿 매커니즘을 통해 서블릿 필터로 등록 될수 있으며, 스프링에 등록된 빈을 가져와 의존성을 주입할 수 있ㄷ.
- 정리하면, 서블릿 컨테이너의 생명주기와 스프링의 ApplicationContext사이를 연결하는 다리역할을 한다.
FilterChainProxy :
- DelegationFilterProxy 를 통해 받은 요청과 응답을 스프링키슈리티의 필터체인에 전달하고 작업을 위임하는 역할을 한다.
- 중간에 체인 프록시를 두는 이유는, 서블릿을 지원하는 시작점의 역할을 하기 위해서다. 서블릿에 문제가 발생 -> 체인프록시의 문제 이렇게.
SecurityFilterChain :
- 인증을 처리하는 여러개의 시큐리티 필터를 담은 체인이다.
- 따라서 여러개의 필터체인을 구성하여 매칭되는 URL에 따라 다른 필터체인이 사용되게 할 수 있다.
Security Filters :
스프링 시큐리티 매커니즘에 따라 처리하는 필터이다. -> 실제 기능을 수행하는 지점이다.
필터 체인 api 를 통해 필터체인프록시에 삽입되고 스프링 빈으로 등록된다.
기능들을 정리하고 싶지만,, 너무 많기에.. 찾아보면서 구현하길...

필터 사진 자료
'SpringBootProject' 카테고리의 다른 글
| SpringBoot: 템플릿 메소드 패턴 (2) | 2025.07.11 |
|---|---|
| SpringBoot : 동시성 문제 (1) | 2025.07.09 |
| Project Part1 - 로그인 구현하기. (4. 세션을 활용한 로그인 기법) (0) | 2024.11.26 |
| Project Part1 - 로그인 구현하기. (3. 쿠키를 활용한 로그인 기법) (0) | 2024.11.25 |
| Project Part1 - 로그인 구현하기. (2. 로그인 컨트롤러, 로그인 기법) (0) | 2024.11.25 |