DEV/SpringBoot

[Spring Boot] 스프링 시큐리티(Spring Security) 개념과 기본 사용법

박차 2026. 9. 8. 01:13

스프링 시큐리티가 무엇이고 어떤 흐름으로 동작하는지, 핵심 개념과 가장 기본적인 설정 코드를 간단히 정리했습니다.


스프링 시큐리티란

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가 가장 기본적으로 쓰입니다.