안녕하세요! 오늘은 자바 백엔드 개발자라면 꼭 알아야 할 중요한 소식을 정리해 보려 합니다.
바로 Spring Security 7.0 업데이트 소식입니다. 이번 업데이트는 단순한 기능 추가가 아니라, 애플리케이션의 보안 구조를 아주 튼튼하게 리모델링하는 대규모 공사와도 같습니다.

1. 이제는 선택이 아닌 필수! Lambda DSL과 최신 API
예전에 .and()를 계속 붙여가며 설정을 길게 이어 썼던 기억나시나요? 이제 그런 방식과는 작별 인사를 해야 할 때가 왔습니다. Spring Security 7.0부터는 **Lambda DSL** 사용이 강제됩니다. 코드가 훨씬 직관적이고 깔끔해졌죠.
🛠️ 코드 작성법이 이렇게 바뀝니다
❌ 기존 방식 (더 이상 지원하지 않아요)
// 7.0 버전에서는 컴파일 에러가 발생합니다!
http.authorizeRequests() // 삭제됨
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and() // .and() 체이닝 삭제됨
.formLogin();
✅ Spring Security 7.0 권장 방식 (Lambda DSL)
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
// authorizeRequests 대신 authorizeHttpRequests 사용 필수
.authorizeHttpRequests(auth -> auth
// MvcRequestMatcher 대신 PathPatternRequestMatcher 권장
.requestMatchers(PathPatternParser.defaultInstance, "/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
// 람다식을 사용하여 설정의 명확성 확보
.formLogin(login -> login
.loginPage("/login")
.permitAll()
);
return http.build();
}
보시다시피 authorizeRequests가 사라지고 더 안전한 authorizeHttpRequests를 사용해야 합니다. 또한, 들여쓰기를 통해 어떤 설정이 어디에 속하는지 한눈에 파악하기 쉬워졌습니다.
2. 이제는 한 지붕 아래! 주요 모듈 통합
그동안 별도의 프로젝트로 관리되던 Spring Authorization Server와 Kerberos 확장 모듈이 이제 Spring Security의 정식 구성요소가 되었습니다.
- Spring Authorization Server 통합: 이제 OAuth 2.0 인증 서버를 구축할 때 별도의 복잡한 의존성 관리 없이, 스프링 시큐리티 하나로 통합된 환경을 누릴 수 있습니다.
- Kerberos 통합: 기업 환경에서 주로 쓰이는 Kerberos 인증도 이제 메인 프로젝트 안에서 지원됩니다.
3. 더 깐깐해진 보안 기준 (OAuth 2.0 & MFA)
보안은 타협하면 안 되는 영역이죠. Spring Security 7.0은 보안 취약점이 될 수 있는 낡은 방식들을 과감히 버렸습니다.
🔐 OAuth 2.0 주요 변화
| 변경 항목 | 내용 및 영향 |
|---|---|
| PKCE 기본 활성화 | 보안성을 높여주는 PKCE(Proof Key for Code Exchange)가 기본적으로 켜집니다. 모바일이나 SPA 환경에서 훨씬 안전해졌습니다. |
| Password Grant 제거 | (주의!) 아이디/비번을 직접 주고받는 Password Grant 방식은 보안상 취약하여 완전히 삭제되었습니다. |
🛡️ MFA (다중 요소 인증) 코어 지원
이제 로그인할 때 비밀번호를 넘어 OTP나 이메일 인증 같은 다중 요소 인증(MFA)을 구현하기가 훨씬 수월해졌습니다. 프레임워크 차원에서 이를 공식적으로 지원하기 시작했기 때문입니다.
4. 놓치면 안 되는 디테일들
실무에서 마주칠 수 있는 몇 가지 변화들도 함께 체크해 보겠습니다.
- 📍 인가 매니저 API 변경:
AuthorizationManager#check메서드가 사라졌습니다. 대신authorize메서드를 사용하세요. 의미가 더 명확해졌습니다. - 🔄 상대 경로 리다이렉트 선호:
로그인 후 이동할 때 기본적으로 상대 경로(Relative Redirects)를 사용합니다. 이제 프록시나 로드 밸런서 뒤에 서버가 있어도 도메인 문제로 고민할 일이 줄어들겠네요! - 🚀 Argon2, Scrypt 지원 강화:
Password4j를 기반으로 하는 강력한 패스워드 인코더들이 추가되었습니다. 비밀번호를 더 안전하게 암호화할 수 있습니다.