본문 바로가기

Framework/Spring

[ Spring ] Spring security - 스프링 시큐리티 알아보기

반응형


🌱 Spring Security란?

Spring Security는 스프링 기반 애플리케이션에서 인증(Authentication)인가(Authorization)를 처리하기 위한 보안 프레임워크입니다.
웹 애플리케이션이나 API 서버에서 로그인, 접근 제어, 암호화, 세션 관리 등 보안에 필요한 다양한 기능을 제공합니다.


 

1. Spring Security의 핵심 개념

1. 인증 (Authentication)

  • 사용자가 누구인지 확인하는 절차
  • 로그인 폼, 아이디/비밀번호 검사 등이 여기에 해당됩니다
  • 인증이 성공하면 Authentication 객체가 만들어지고, SecurityContext에 저장됩니다

2. 인가 (Authorization)

  • 인증된 사용자가 특정 자원에 접근할 수 있는 권한이 있는지 확인하는 과정입니다
  • 예: 관리자는 /admin 접근 가능, 일반 사용자는 불가능

 

2. Spring Security의 주요 구성 요소

구성요소 설명
SecurityFilterChain 모든 요청을 가로채고 인증/인가 여부를 판단하는 필터 체인
AuthenticationManager 사용자의 인증 정보를 처리 (ex. 로그인 요청 처리)
UserDetailService 사용자 정보를 로딩하는 서비스
PasswordEncoder 비밀번호를 암호화하거나 비교할 때 사용
SecurityContextHolder 현재 사용자의 인증 정보를 담는 저장소

 

3. 기본 설정 예시 (Spring Boot 기준)

1. 사용자 정의 보안 설정

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/admin/**").hasRole("ADMIN")
                .anyRequest().permitAll()
            )
            .formLogin(Customizer.withDefaults()) // 기본 로그인 폼 제공
            .build();
    }
}

2. 사용자 정보 제공

@Configuration
public class UserConfig {
    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails user = User.withUsername("user")
            .password(passwordEncoder().encode("1234"))
            .roles("USER")
            .build();

        UserDetails admin = User.withUsername("admin")
            .password(passwordEncoder().encode("admin"))
            .roles("ADMIN")
            .build();

        return new InMemoryUserDetailsManager(user, admin);
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

 

4. Spring Security의 주요 기능

기능 설명
로그인/로그아웃 처리 기본 로그인 폼 제공, 커스터마이징 가능
세션 관리 동시 로그인 제한, 세션 만료 처리
CSRF 보호 CSRF 토큰을 이용한 요청 위조 방지
URL 접근 제어 URL 패턴 기반 인가 처리
OAuth2 로그인 소셜 로그인(Google, Kakao 등) 연동 지원
JWT 기반 인증 REST API 보안에 사용되는 JWT 토큰 방식도 지원 가능
비밀번호 암호화 BCryptPasswordEncoder 등 제공

 

5. Spring Boot에서 기본 제공 경로 예시

경로 설명
/login 기본 로그인 폼 (자동 제공)
/logout 로그아웃 처리 경로
/error 에러 발생 시 이동 경로

 

Spring Security는 기본적으로 강력하고 유연한 구조를 갖추고 있기 때문에, 단순한 로그인부터 소셜 인증, JWT 기반 REST API 보안까지 폭넓게 활용될 수 있습니다.
처음에는 진입 장벽이 다소 높을 수 있지만, 설정을 이해하고 나면 복잡한 보안 로직을 안정적으로 구성할 수 있는 강력한 도구입니다.

반응형