반응형
🌱 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 보안까지 폭넓게 활용될 수 있습니다.
처음에는 진입 장벽이 다소 높을 수 있지만, 설정을 이해하고 나면 복잡한 보안 로직을 안정적으로 구성할 수 있는 강력한 도구입니다.
반응형
'Framework > Spring' 카테고리의 다른 글
[ Spring ] Spring cloud - 스프링 클라우드 알아보기 (0) | 2025.03.23 |
---|---|
[ Spring ] Spring batch - 스프링 배치 알아보기 (0) | 2025.03.23 |
[ Spring ] Spring Data - 스프링 데이터 프로젝트 알아보기 (0) | 2025.03.23 |
[ Spring ] Spring Boot - 스프링 부트 알아보기 (0) | 2025.03.23 |
[ Spring ] 스프링 프로젝트 간단하게 알아보기 (0) | 2025.03.23 |