FilterChain을 구현할 시간
- Spring Security가 해결하고자 하는 문제
- Spring Boot와 Spring Security의 통합 방식
- Spring Security 6.x 기준 주요 특징
- 보안의 기본 개념(인증, 인가)을 Spring Security 관점에서 이해하기
- Spring Security를 실무에서 활용할 때 고려해야할 사안들
보안이 없는 애플리케이션의 문제점
1. 로그인 기능(인증, Authentication)이 없음
- 사용자가 자신의 정체성을 증명할 방법이 없음
- 다른 사람이 내 계정으로 등록한 정보나 주문 정보를 제한없이 열람 가능해짐
- 대문에 자물쇠를 채우지 않고 열어둔 상태
2. API에 대한 권한 부여(인가, Authorization)가 없음
- 인증을 했다고 해서 모든 리소스에 접근할 수 있는 것은 아니다
- 일반 회원은 커피 주문만 가능해야 하지만, 보안이 없다면 커피 메뉴를 직접 등록/수정할 수 있음
- 즉, 리소스 접근 권한이 구분되지 않아 보안상 큰 위험이 발생함
3. 웹 보안 취약점에 대한 대비 부족
- 세션 고정(Session Fixation)
- 클릭 재킹(Clickjacking)
- CSRF(Cross-Site Request Forgery)
Spring Security
1. 정의
Spring MVC 기반 애플리케이션의 인증(Authentication)과 인가(Authorization) 기능을 지원하는 보안 프레임워크임
- 사실상 표준(Security De-facto Standard)으로 자리잡았다
- Spring의 Interceptor나 Servlet Filter를 직접 구현할수도 있지만, 대부분의 보안 기능을 Spring Security에서 안정적으로 제공하기 때문에 검증된 구조를 활용하는게 훨씬 안전할 것이다
2. Spring Security로 가능한 보안 기능
- 다양한 인증 방식 지원 : 폼, 로그인, 토큰 기반 인증, OAuth2, LDAP 등
- 사용자 권한(Role)에 따른 접근 제어
- 리소스 접근 제어 : 특정 리소스에 대해 허용/차단 정책 적용 가능
- 민감한 정보 암호화(비밀번호 해시, 데이터 보호)
- SSL 연동 및 전송 구간 보안 강화
- 알려진 주요 웹 보안 공격 차단(세션 고정 공격, 클릭재킹, CSRF 등)
SSO(Single Sign-On), 메서드 보안, Access Control List와 같은 고급 기능들도 제공한다
Spring Security에서 사용하는 용어
| 용어 | 설명 |
| Principal(주체) | 애플리케이션에서 작업을 수행할 수 있는 사용자, 디바이스 또는 시스템 일반적으로 인증에 성공한 사용자 계정을 말함 |
| Authentication(인증) | 사용자가 본인이 맞음을 증명하는 절차 아이디/비밀번호 입력, 주민등록증 제시 등 |
| Credential(자격 증명 정보) | 사용자를 식별하는 정보 비밀번호, 토큰, 인증서 등이 이에 해당함 |
| Authorization(인가/권한 부여) | 인증된 사용자에게 역할(Role) 또는 권한(Authority)을 부여하여 특정 리소스 접근 허용 |
| Access Control(접근 제어) | 사용자가 애플리케이션의 리소스에 접근하는 행위를 제어하는 과정 |
Spring Boot와의 통합
Spring Security는 Spring Boot와 밀접하게 통합되어있음
별도의 복잡한 설정 없이도 보안이 기본적으로 활성화된다
1. 자동 설정 특징
Spring Boot Starter를 추가하면 기본 보안 필터 체인이 자동으로 적용된다
implementation 'org.springframework.boot:spring-boot-starter-security'
기본 설정에서는 모든 엔드포인트에 인증이 필요하며, Spring Boot가 임시 비밀번호를 로그에 출력해준다
# Spring Boot 실행 로그 예시
Using generated security password: 3f6b1c2d-8d5f-4e91-9c8a-123456789abc
애플리케이션에 접속하면 자동 생성된 계정(user / 임시 비밀번호)으로 로그인해야 접근할 수 있다
2. 통합해서 좋은점(장점)
- Spring Boot의 자동 설정 덕에 초보자도 보안을 쉽게 적용할 수 있다
- SecurityFilterChain 등 주요 보안 컴포넌트를 Spring Boot가 자동으로 등록한다
- 기존의 Spring MVC 애플리케이션 구조와 자연스럽게 결합한다
Spring Security 6.x 주요 특징
1. 주요 변화
(1) WebSecurityConfigurerAdapter 제거
- 기존 : WebSecurityConfigurerAdapter를 상속받아서 보안 설정을 오버라이드
- 현재 : SecurityFilterChain Bean을 등록하는 방식으로 변경됨
// SecurityFilterChain 예시
/**
* Security filter chain
*/
@Bean // 여기에 Bean을 등록하여 사용함
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.csrf().disable()
.headers(headers -> headers.frameOptions().disable())
.formLogin().disable()
.httpBasic().disable()
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/posts/**").authenticated()
.requestMatchers("/h2-console/**").authenticated()
.anyRequest().permitAll()
)
.oauth2Login(withDefaults());
return http.build();
}
(2) Lombok + Kotlin DSL 지원 강화
- 선언적이고 간결한 보안 설정 코드 작성 가능
(3) OAuth2 / OpenID Connect(OIDC) 통합 강화
- 구글, 페이스북, 깃허브, 옥타 등 소셜 로그인 연동이 간편해짐
(4) PasswordEncoder 기본 정책 강화
- Bcrypt 해싱 알고리즘 사용이 기본임
(5)Reactive 지원(WebFlux Security)
- 리액티브 애플리케이션 환경에서도 동일한 방식으로 인증/인가 처리가 가능해짐
* 반드시 옛방식이 아닌 SecurityFilterChain 방식으로 설정하기
* 비밀번호는 반드시 BcryptEncoder와 같은 안전한 해시 함수를 사용해야함
* OAuth2, JWT 기반 보안은 Spring Security의 내장 기능 적극 활용하기
정리
| 구분 | 설명 |
| Spring Security의 역할 | 인증, 인가, 공통 보안 위협 방지 |
| Spring Boot와의 통합 | Starter 추가시 자동 보안 적용, 기본 계정 생성 |
| 최신 버전 특징 | WebSecurityConfigurerAdapter 제거 SecurityFilterChain 방식 도입 OAuth2 통합 강화 |
'Spring Boot > Security' 카테고리의 다른 글
| 필터 아키텍처 : 필터 순서와 우선순위 (1) | 2026.04.21 |
|---|---|
| 필터 아키텍처 : 주요 보안 필터 (0) | 2026.03.31 |
| 필터 아키텍처 : Spring Security 필터 구조 (0) | 2026.03.30 |
| 필터 아키텍처 : 서블릿 필터 기본 개념 (0) | 2026.03.30 |
| Security : 플랫폼별 Spring Security (0) | 2026.03.27 |