작성
·
22
1
JWT 기반 인증을 사용하면 서버 확장 시 세션 관리 문제를 해결할 수 있다고 하는데, 혹시 이 부분 관련되어 시간있으실 때 추가 강의 요청드려도 될까요?
강의 너무 잘 보고 있습니다 ! 😀
답변 2
0
grgwde23님 좋은 질문에 감사합니다!
사실 JWT는 React + Spring Boot 같이 프론트엔드와 백엔드가 분리된 구조에서 진정한 강점을 발휘합니다.
그래서 저도 현재 React + Spring Boot를 활용한 강의를 구상 중이긴 한데요, 진행 중인 프로젝트가 12월에 마무리되는 일정이라 그 전에는 본격적인 강의 제작이 조금 어려울 것 같아요~ㅜㅜ
조금만 기다려주시면, 더 체계적인 구성으로 찾아뵐 수 있도록 하겠습니다!
그 전에 궁금해하신 "서버 확장 시 세션 관리 문제 해결" 부분에 대해서 JWT 기반 인증의 전체적인 구조와 같이 설명드릴게요.
[JWT 기반 인증의 전체적인 구조]
1.로그인 요청: 사용자가 ID/PW를 입력해서 로그인 요청을 보냅니다.
2.서버에서 인증 처리: Spring Security가 사용자의 정보를 검증하고, 인증에 성공하면 JWT 토큰을 생성합니다. 이때 보통 Access Token과 Refresh Token 두 개가 함께 발급됩니다.
3. 클라이언트가 토큰 저장: 발급받은 토큰(Access Token, Refresh Token)을 클라이언트(React 등)가 저장합니다.
- Access Token은 메모리나 localStorage에 저장하고,
- Refresh Token은 보안을 위해 httpOnly 쿠키에 저장하는 방식이 일반적입니다.
4. API 요청 시 토큰 포함
사용자 요청 시 Access Token을 Authorization 헤더에 담아 서버에 요청합니다.
서버는 이 토큰을 검증하고, 인증된 사용자로 인식해 요청을 처리합니다.
5. Access Token 만료 시
클라이언트는 Refresh Token을 이용해 Access Token 재발급 요청을 할 수 있습니다.
Refresh Token도 만료되었거나 유효하지 않다면, 재로그인이 필요합니다.
[서버 확장과 세션 관리의 문제 및 해결 방안]
기존의 세션 기반 인증 방식(HttpSession)에서는 사용자의 로그인 상태를 서버 메모리에 저장합니다.
이 방식은 단일 서버에서는 괜찮지만, 서버를 여러 대로 확장(스케일 아웃) 하면 문제가 발생합니다.
예를 들어,
사용자가 A서버에서 로그인했는데, 다음 요청은 B서버로 가면 세션 정보를 찾을 수 없습니다.
이를 해결하려면 세션 정보를 공유 저장소(Redis, DB 등) 에 저장해야 하는데, 이는 설정과 유지보수 측면에서 다소 번거롭고 복잡합니다.
이런 문제를 해결하기 위한 방안으로 JWT를 사용하는데요,
JWT는 사용자의 인증 정보를 클라이언트가 직접 들고 다니는 구조이기 때문에, 서버가 인증 상태를 기억할 필요가 없습니다.
어떤 서버로 요청이 오더라도, JWT 토큰만 유효하다면 인증이 가능하고, 서버 간 세션 공유가 필요 없어집니다.
또한, 로드 밸런서 뒤에 여러 서버가 있더라도 인증에 문제가 없기 때문에 서버 확장 시 매우 유연하고 안정적인 인증 시스템 구축 가능하게 됩니다.
마지막으로, 아쉽게도 바로 추가 강의를 진행해드리지 못해 죄송하고 양해 부탁드립니다.
지금처럼 꾸준히 질문하고 학습해 나가신다면, 실무에서도 충분히 활용 가능한 수준까지 금방 도달하실 거예요!
앞으로도 좋은 질문 언제든 환영이고, 끝까지 응원하겠습니다.
0
안녕하세요, 인프런 AI 인턴입니다. grgwde23님.
JWT(Json Web Token) 기반 인증은 서버 확장 시 매우 유용한 인증 방법 중 하나로, 서버 측에서 세션을 관리하지 않고도 사용자 인증을 가능하게 합니다. 이렇게 하면 서버 간 세션 공유 문제를 해결할 수 있어 서버 확장과 부하 분산이 용이해집니다.
특히, 스프링부트와 같은 프레임워크에서 JWT를 활용하면 RESTful API 구축이 훨씬 간편해지며, 무상태(stateless) 방식의 인증이 가능해지므로 멀티 서버 환경에서도 안정적인 인증 체계를 유지할 수 있습니다.
JWT 기반 인증에 대한 추가 강의는 학습자분들께서 실무 환경에서도 쉽게 활용할 수 있는 중요한 주제가 될 수 있습니다. 강의 내에서 더 자세한 설명이 필요하시다면, 이를 강의 제공자께 요청해 보는 것도 좋은 방법이 될 것입니다.
이와 관련된 설명을 참고하시고 싶으시면 다음 URL에서 유사한 주제에 대한 이전 답변을 참조해 보시길 권장드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.