인프런 커뮤니티 질문&답변

가명님의 프로필 이미지
가명

작성한 질문수

스프링부트 시큐리티 & JWT 강의

스프링부트 시큐리티 26강 - jwt토큰 만들어서 응답하기

권한 처리 세션 사용

작성

·

360

1

유익한 강의 감사드립니다.

질문이 있습니다.

권한처리를 위해 세션을 사용하게 되면

서버가 여러대일 경우

어떤 서버에는 권한정보가 있고

어떤 서버에는 없을 수도 있지 않나요?

이런 경우 스프링 시큐리티가 자동으로 알아서 처리를 해주는건가요?

세션을 사용하지 않고 JWT 를 사용하는 이유중에 하나가

서버가 여러대 일 경우의 세션 문제를 해결하기 위함도 있다고 하셨는데

마찬가지로 서버가 여러대라면 권한처리를 위한 권한정보를 동일하게 맞춰(?) 주는 무엇인가가 필요하지 않나요?

답변 2

0

최주호님의 프로필 이미지
최주호
지식공유자

서버가 여러대여도 괜찮습니다. 모든 서버에서 세션을 만들어주면 됩니다.

이 세션은 인증의 용도가 아닌, 임시저장소로 사용되고 있습니다.

0

안녕하세요, 인프런 AI 인턴입니다.

가명님의 질문에 대한 답변입니다.

분산 시스템 환경에서 여러 대의 서버를 사용하는 경우, 세션 정보의 일관성을 유지하는 것이 중요한데요, 이를 해결하기 위해 일반적으로 Spring Session과 같은 기술을 사용합니다. Spring Session을 활용하면 서블릿 웹 어플리케이션이든, 리액티브 웹 어플리케이션이든 독립적인 세션 스토어를 통해 세션 정보를 공유하고 일관성을 유지할 수 있습니다.

예를 들어, Spring Boot는 Redis, JDBC, Hazelcast, MongoDB 등을 데이터 스토어로 하여 Spring Session의 자동 구성을 제공합니다. 만약 Redis를 데이터 스토어로 사용하는 경우, Redis와 연동하여 여러 서버 간에 세션 정보를 공유하므로 어느 서버에서든 사용자의 권한 정보를 일관되게 유지할 수 있습니다. 자세한 내용은 스프링 공식 문서를 참고하실 수 있습니다.

JWT를 사용하는 경우에는 세션을 서버에 저장하지 않고, 사용자의 인증 정보를 토큰에 담아 클라이언트가 가지고 다니며 서버에 전송하므로, 서버 측에서 세션을 유지할 필요가 없습니다. 이로 인해 서버가 여러 대가 있어도 각 서버에 권한 정보를 일치시킬 필요가 없고, 스케일 아웃이 용이합니다.

스프링 시큐리티는 JWT 토큰을 적절하게 검증하고 파싱하여 권한 정보를 생성하는 과정을 자동으로 처리할 수 있도록 도와줍니다. 물론 스프링 시큐리티를 활용해 추가적인 권한 검증 로직을 구현할 수도 있습니다.

세션 기반 인증과 JWT 기반 인증은 각기 장단점을 가지고 있으며, 어플리케이션의 요구사항이나 환경에 따라 적합한 방법을 선택하시면 됩니다.

가명님의 프로필 이미지
가명

작성한 질문수

질문하기