Spring Security 알아보기

Nicky·2024년 2월 14일
0
post-thumbnail

0. 시작하며

이전의 한 포스팅에서 프로젝트의 로그인 구현을 위해 Spring SecurityJWT를 다룬 적이 있다. 하지만 Spring Security의 내용이 초심자가 다루기엔 쉽지 않고, 사용해 봤다고 해서 인사이트가 한 번에 생기지는 않는다고 생각하여 새로운 시리즈를 작성하고자 한다..

이번 프로젝트는 Security와 JWT 로그인 방식에 대해 조금 더 깊게 알아 보고자 한다.

1. Spring Security

Spring Security에 대해 다시 얘기해보자면, Spring 기반의 웹 애플리케이션에서 보안(인증, 권한)을 구현하기 위한 프레임워크이다.

디테일한 설명에 앞서 먼저, 인증과 인가에 대해 간단하게 알아보자.

인증(Authentication)

  • 사용자의 신원을 확인하는 기능.
  • 사용자가 제공한 인증정보(아이디, 비밀번호 등)을 검증하여 사용자의 신원을 확인한다. 즉, 로그인이 이에 해당한다.

인가(Authorization)

  • 인증된 사용자에 대한 권한 부여를 하는 기능.
  • 인증된 사용자가 특정 리소스에 접근할 수 있는지 여부를 결정한다.

Spring Security는 이러한 인증인가에 대한 부분을 Filter Chain의 흐름에 따라 처리한다. 그렇다면 과연 이 Filter Chain란 무엇일까?

2. Filter Chain?

Spring Security 프레임워크는 웹 계층에 대한 보안 기능을 서블릿 필터(servlet filter) 기반으로 제공한다. 우선 Servlet Filter Chain에 대해 알아보자.

Servlet Filter Chain

Servlet Filter Chain은 사용자 요청을 가로채고, 필터를 통해 전/후 처리 작업을 수행한다.

동작 순서

  1. 요청이 서블릿 컨테이너에 도착하면, 컨테이너는 해당 요청에 대해 필터 체인을 실행.
  2. 필터 체인은 여러 개의 필터로 구성되어 있으며, 각 필터는 특정한 작업을 수행.
  3. 요청은 필터 체인을 따라 차례대로 필터들을 거치면서 작업을 수행.
  4. 필터 체인을 통과한 후에는 서블릿이 요청에 대한 처리를 수행하고, 응답을 생성.


(https://spring.io/guides/topicals/spring-security-architecture/)

FilterChainProxy

Spring Security 프레임워크는 인증에 필요한 기능들을 FilterChainProxy를 통해 관리한다. FilterChainProxy는 서블릿 컨테이너 입장에선 하나의 필터이지만, 그 내부에는 보안 로직을 수행하는 필터들이 리스트의 형태로 존재한다.

(https://spring.io/guides/topicals/spring-security-architecture/)

다양한 내부 필터들

내부의 필터들은 저마다의 역할을 수행하게 된다.

(https://bamdule.tistory.com/52)

SecurityFilterChain

FilterChainProxySecurityFilterChain을 사용하여 요청에 따라 적절한 보안 필터 체인을 선택하여 실행한다.
즉, URL 경로에 따라 실행되는 필터들이 달라지게 된다.

(https://spring.io/guides/topicals/spring-security-architecture/)

정리

클라이언트로부터 요청을 받게 되면 바로 서블릿에 오지않고 여러 개의 필터들로 구성된 Filter Chain을 거치게 된다. 거치게 되는 필터 중 Spring Security가 관리하는 FilterChainProxy에서 SecurityFilterChain을 호출하여 요청 URL에 따른 적절한 보안 로직을 수행한다.

Reference

profile
코딩 연구소

0개의 댓글

관련 채용 정보