Spring Security는 애플리케이션의 인증(Authentication)과 인가(Authorization)를 담당하는 스프링 기반 보안 프레임워크입니다.
주로 웹 애플리케이션과 REST API의 보안을 처리하며, 개발자가 보안 관련 로직을 일일이 구현하지 않도록 많은 기본 제공 기능을 제공합니다.
인증(Authentication)
사용자의 신원을 확인하는 과정.
인가(Authorization)
인증된 사용자가 어떤 리소스에 접근할 수 있는지를 확인하는 과정.
CSRF 보호
웹 애플리케이션에서 CSRF(Cross-Site Request Forgery) 공격을 방지.
세션 관리
암호화 지원
BCryptPasswordEncoder
) 및 다양한 암호화 알고리즘 지원.SecurityFilterChain
HTTP 요청을 가로채 인증 및 인가를 처리하는 필터 체인.
필터는 특정 순서대로 실행되며, 각각의 필터는 인증, 인가, 세션 관리 등의 역할을 담당.
AuthenticationManager
인증을 처리하는 핵심 구성 요소.
UserDetailsService
사용자 정보를 로드하기 위한 인터페이스.
GrantedAuthority
사용자가 가지고 있는 권한 정보를 나타내는 인터페이스.
SecurityContext
인증된 사용자의 정보를 저장.
SecurityContextHolder
를 통해 애플리케이션 전역에서 접근 가능.Authentication
인증 객체로 사용자 정보와 권한을 포함.
사용자가 요청 전송
클라이언트가 특정 URL로 요청을 보냅니다.
필터 체인 실행
SecurityFilterChain
에 등록된 필터가 순차적으로 실행됩니다.
인증 처리
AuthenticationManager
가 인증을 성공 처리. 인가 처리
요청 처리 및 응답 반환
스프링 부트 3.x 이상에서는 SecurityFilterChain
을 사용한 Java Config 방식이 일반적입니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf().disable() // CSRF 보호 비활성화
.authorizeHttpRequests(auth -> auth
.requestMatchers("/admin/**").hasRole("ADMIN") // 관리자 권한 필요
.requestMatchers("/user/**").authenticated() // 인증 필요
.anyRequest().permitAll() // 기타 요청 허용
)
.formLogin() // 기본 로그인 페이지 제공
.and()
.logout(); // 로그아웃 지원
return http.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(); // 비밀번호 암호화
}
}
커스텀 인증 로직
UserDetailsService
를 구현하여 사용자 인증 데이터 커스터마이징.인가 정책 커스터마이징
@PreAuthorize
, @PostAuthorize
OAuth2 및 JWT 통합
보안 표준 준수:
다양한 보안 기능(CSRF, 세션 관리 등)을 기본 제공.
유연성:
다양한 인증 및 인가 방식을 손쉽게 확장 가능.
커뮤니티 및 문서 지원:
활발한 커뮤니티와 공식 문서, 예제가 풍부.
스프링 생태계와의 통합:
Spring Boot, Spring Data 등과 자연스럽게 통합 가능.
학습 곡선:
기본적인 설정 외의 고급 기능을 활용하려면 깊이 있는 학습이 필요.
성능:
잘못된 필터 설정이나 무거운 인증 방식은 성능 저하를 유발할 수 있음.
테스트:
인증 및 인가 로직에 대한 테스트를 별도로 작성해야 함.
Spring Security는 강력하면서도 유연한 보안 프레임워크로, 애플리케이션의 인증과 인가 요구 사항을 체계적으로 처리합니다. 이를 통해 개발자는 보안 로직에 신경 쓰기보다 비즈니스 로직에 더 집중할 수 있습니다.
추가 학습 자료