스프링 시큐리티가 무엇이고 어떤 흐름으로 동작하는지, 핵심 개념과 가장 기본적인 설정 코드를 간단히 정리했습니다.
스프링 시큐리티란
Spring Security는 인증(Authentication, 너는 누구냐)과 인가(Authorization, 너는 이걸 할 수 있냐)를 처리해주는 스프링 진영의 보안 프레임워크입니다. 로그인 처리, 세션 관리, 권한별 접근 제어 같은 걸 직접 다 구현하지 않고, 필터 체인 구조 위에 필요한 설정만 얹어서 쓸 수 있게 해줍니다.
핵심 개념 3가지
- SecurityFilterChain: 요청이 컨트롤러에 도달하기 전에 거쳐가는 필터들의 묶음입니다. "어떤 URL은 로그인 없이 허용, 어떤 URL은 인증 필요" 같은 규칙이 여기서 정해집니다.
- AuthenticationManager: 아이디/비밀번호 같은 인증 정보를 받아서 "이 사용자가 맞는지"를 실제로 검증하는 역할입니다.
- UserDetailsService: DB 등에서 사용자 정보를 조회해와서 AuthenticationManager가 검증에 쓸 수 있는 형태(UserDetails)로 변환해주는 인터페이스입니다.
흐름으로 보면: 요청 → SecurityFilterChain 통과 → AuthenticationManager가 UserDetailsService로 사용자 조회 후 비밀번호 검증 → 성공하면 SecurityContext에 인증 정보 저장, 이후 요청마다 이 정보로 인가 여부를 판단합니다.
기본 사용법 (간단 설정 코드)
java
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/", "/login", "/signup").permitAll()
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.defaultSuccessUrl("/home")
)
.logout(logout -> logout.logoutSuccessUrl("/"));
return http.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
- authorizeHttpRequests: URL별 접근 규칙을 정합니다. 위에서부터 순서대로 매칭되므로, 좁은 범위(/admin/**)를 넓은 범위(anyRequest())보다 먼저 써야 합니다.
- formLogin: 아이디/비밀번호를 입력받는 기본 로그인 폼 방식을 씁니다. 로그인 페이지 경로와 성공 시 이동할 페이지를 지정합니다.
- PasswordEncoder: 비밀번호를 평문으로 저장하지 않고 암호화하기 위한 빈입니다. BCryptPasswordEncoder가 가장 기본적으로 쓰입니다.
'DEV > SpringBoot' 카테고리의 다른 글
| [SSO 프로젝트] JWT 토큰 생성기 직접 만들어보기 - JwtTokenProvider (0) | 2026.09.07 |
|---|---|
| [Spring Boot] ZXing으로 QR 코드 생성 API 만들기 (0) | 2026.08.31 |
| [SpringBoot] module java.base does not open java.lang 에러 (0) | 2023.03.20 |
| [SpringBoot] WebSecurityConfigurerAdapter 취소선 😀 (0) | 2023.01.10 |
| [SpringBoot] Execution failed for task ':test'. 에러 (0) | 2022.10.20 |