[Spring Security 입문하기] 1. 개요와 기본 동작 원리
안녕하세요.
기존에는 진행하던 토이 프로젝트를 이용해서 Spring Security에 대해서 알아보는 글을 작성했었는데요,
토이 프로젝트를 활용해서 진행하다 보니 토이 프로젝트 내용은 계속 바뀌고 개발이 진행되는데 그에 맞춰서
Spring Security에 대한 내용을 정리하는게 여간 쉬운일이 아니더라구요.
그래서 아예 Spring Security 학습을 위한 프로젝트를 새로 생성해서 기초부터 차근차근 공부를 진행하고 그 기록을 남겨볼 생각입니다. 앞으로의 글에서는 이 프로젝트를 바탕으로 직접 실제 코드를 구현해보며 Spring Security의 동작 흐름을 실제로 체험해볼 예정입니다.
시작으로는 Spring Security가 무엇인지, Spring Security의 핵심 개념 및 역할, 기본 동작 원리에 대해서 알아보겠습니다.
📌 Spring Security란?
Spring Security는 Spring 기반 애플리케이션의 인증(Authentication)과 인가(Authorization)를 비롯한 다양한 보안 기능을 담당하고 제공하는 강력하고 유연한 보안 프레임워크입니다.
처음 Spring Security를 알게 되었을 때에는 단순히 로그인 처리만 해주는거 아닌가? 라고 생각했었는데요,
Spring Security는 단순 로그인처리뿐만 아니라 그 이상의 역할을 담당하고 있습니다.
📝 1. 왜 Spring Security가 필요한가?
📍 현실에서의 보안 문제들
웹 애플리케이션에서는
로그인/로그아웃, 로그인 실패 시도 제한, 사용자 역할에 따른 페이지(기능) 접근 제한, CSRF 방지, 암호화, OAuth2 설정 등...
그 밖에도 정말 많은 보안적인 요소가 필요합니다.
이러한 인증, 인가, 보안요소들을 직접 코드로 한땀 한땀 구현한다?
- 로그인 시 입력받은 사용자 정보를 DB에서 꺼내서 비교해야하고, 일치하면 세션 관리를 해주어야하고, 로그인 실패하면
로그인 실패 횟수를 추적해야하고, 해당 기능을 이용할 수 있는 권한을 가진 계정인지 요청마다 확인해야하고...
➡ ❌ 복잡하고 그로 인한 실수가 대량 발생할 수 있으며 또한 보안 취약점이 쉽게 발생.
✅ 따라서 인증, 인가, 보안요소들을 깔끔하고 안전하고 편리하게 처리하기 위해 Spring Security가 필요합니다.
📝 2. Spring Security의 핵심 기능
기능 | 설명 |
인증(Authentication) | 사용자의 신원을 확인 |
인가(Authorization) | 사용자의 권한 확인 및 접근 제어 |
CSRF 방어 | 폼 요청 위조 방지 |
세션 보호 | 세션 고정 공격, 동시로그인 제한 |
HTTPS 설정 | HTTP 요청을 강제로 HTPPS로 리다이렉션 |
암호화 | BCrypt 등의 알고리즘으로 암호화 후 안전하게 저장 |
OAuth2 지원 | Google, Naver 등 소셜 로그인 지원 |
JWT 처리 | 토큰 기반 이증 구조도 쉽게 구현 가능 |
이처럼 Spring Security는 단순 로그인 기능뿐 아니라 웹 보안 전반을 포괄하는 다양한 기능을 제공합니다.
📝 3. Spring Security의 구조와 동작 원리
Spring Security는 여러 개의 '보안필터'로 구성된 FilterChain을 기반으로 동작합니다.
요청이 들어올 때 이 필터들이 요청을 하나씩 하나씩 검사해가며 인증/인가 처리, 세션 관리, 오류 처리 등을 수행합니다.
아래는 Spring Security의 대표적인 보안 필터들입니다.
필터 | 역할 |
UsernamePasswordAuthenticationFilter | 로그인 요청 처리 |
BasicAuthenticationFilter | HTTP Basic 인증 처리 |
SecurityContextPersistenceFilter | 인증 정보를 세션에 저장하거나 불러오기 |
ExceptionTranslationFilter | 인증/인가 실패 시 예외 처리 |
FilterSecurityInterceptor | 최종 인가 처리 (권한 확인) |
예를 들어 로그인 요청이 들어온다면,
1. UsernamePasswordAuthenticationFilter 가 로그인 요청을 가로채고,
2. 로그인 인증이 성공하면 사용자 정보를 SecurityContext에 저장하며,
3. 이후 요청마다 FilterSecurityInterceptor가 권한을 검사하게 됩니다.
지금까지 Spring Security의 개요와 핵심 기능에 대해서 정말 정말 간단하게 살펴보았습니다.
다음 글에서는 Spring Security의 핵심 기능 중 인증(Authentication)과 인가(Authorization)의 개념과 동작 방식에 대해 더 알아보도록 하겠습니다.