멀티 파드 환경에서의 Spring Security 세션 불일치 문제 해결: JWT와 Session 기반 인증 분리 및 Redis 세션 공유

🤖 AI 추천

이 콘텐츠는 백엔드 개발자, 특히 Spring Boot 환경에서 보안 설정을 다루는 개발자들에게 매우 유용합니다. 특히 멀티 파드(Multi-Pod) 환경에서 발생하는 세션 관리의 어려움과 그 해결 과정을 구체적인 사례와 함께 설명하고 있어, 운영 환경에서의 애플리케이션 안정성 확보에 대한 인사이트를 얻을 수 있습니다. 주니어부터 시니어 개발자까지 실무에 바로 적용할 수 있는 지식을 제공합니다.

🔖 주요 키워드

멀티 파드 환경에서의 Spring Security 세션 불일치 문제 해결: JWT와 Session 기반 인증 분리 및 Redis 세션 공유

핵심 기술

본 글은 Spring Security에서 사용자 API의 JWT 기반 Stateless 인증과 관리자 페이지의 Session 기반 인증을 분리 구현 시, EKS와 같은 멀티 파드 환경에서 발생하는 세션 불일치 및 CSRF 검증 실패 문제를 다룹니다. 문제의 원인을 HTTP 리다이렉트, CSRF 토큰 로그, 세션 ID 불일치로 추적하고, NGINX Ingress Sticky Session, JWT 전환, Spring Session + Redis 사용을 검토한 후 최종적으로 Spring Session과 Redis를 활용한 세션 공유 방안을 제시합니다.

기술적 세부사항

  • 인증/인가 모델 분리: 사용자 API(JWT, Stateless, JSON 응답)와 관리자 페이지(Form Login, Session, Redirect)의 요구사항 차이로 인해 Security 구성을 두 개의 필터 체인(SecurityConfig, AdminSecurityConfig)으로 분리했습니다.
  • HTTPS → HTTP 리다이렉트 문제: NGINX Ingress 사용 시 server.forward-headers-strategy=framework 설정을 통해 X-Forwarded-* 헤더를 신뢰하여 원래 요청 정보를 복원했습니다.
  • CSRF 토큰 관련 로그 확인: @EnableWebSecurity(debug = true)를 통해 Admin 체인에서 CSRF가 활성화되어 있음을 확인하고, 수동으로 로그인 폼에 CSRF 토큰을 주입하는 방식으로 초기 해결을 시도했습니다.
  • 멀티 파드 환경 세션 불일치: 멀티 파드 환경에서 세션이 파드별로 격리되어 발생하는 세션 ID 불일치 문제로 CSRF 토큰 검증 실패 및 403 Forbidden 오류가 발생했습니다.
  • 해결책 검토:
    • NGINX Ingress Sticky Session: 파드 재시작/스케일링 시 세션 유실 문제로 근본적 해결책으로 부적합했습니다.
    • Admin 인증을 JWT 기반으로 전환: Thymeleaf + Redirect 흐름과 맞지 않아 대규모 수정이 필요했습니다.
    • Spring Session + Redis 사용: 모든 파드가 세션을 공유할 수 있어 문제 해결에 효과적이며, Redis를 이미 사용 중이라 도입 비용이 낮아 최종 채택되었습니다.
  • 최종 해결: spring-boot-starter-data-redisspring-session-data-redis 의존성을 추가하고, Redis Config 설정(@EnableRedisHttpSession)을 통해 세션을 Redis에 저장하도록 구성했습니다.

개발 임팩트

  • 멀티 파드 환경에서 발생하는 세션 기반 인증의 안정성을 확보합니다.
  • 운영 환경에서의 예상치 못한 인증/인가 오류 발생 가능성을 줄입니다.
  • 로그의 중요성과 효과적인 추적 방법을 강조하며, 로깅 전략의 중요성을 인식하게 합니다.
  • 분산 환경에서의 세션 관리 전략에 대한 실질적인 경험과 지식을 제공합니다.

커뮤니티 반응

  • 본문은 특정 커뮤니티 반응을 직접적으로 언급하고 있지 않으나, 공유된 트러블슈팅 과정은 Stack Overflow나 개발 블로그에서 흔히 접할 수 있는 문제 해결 사례에 해당합니다. '로그를 잘 남기고 추적하자', '멀티 파드 환경에서 세션 관리에 주의하자'와 같은 교훈은 개발자 커뮤니티에서 자주 논의되는 주제입니다.

📚 관련 자료