가장 보편적이고 이해하기 쉬운 아키텍처
👉 문제점
Session을 저장하기 위한 별도의 데이터베이스가 필요하고, Session Cluster 문제시 대규모 장애 발생 가능성이 있다.
Stateless라는 말은 기본적으로 무상태이다. HTTP 자체는 사용자에 관련된 정보를 저장하지 않고, 정보를 전달하는 목적으로 쓰인다. HTTP 프로토콜을 통해 HTML와 같이 Static Resource 전달 가능하지만 서비스를 stateless로 바꾸는건 현실에서 불가능에 가깝다고 할 수 있다.
그래서 HTTP에 Stateless를 유지하며 사용자 정보를 담기 위해 JWT 를 사용한다.
전체 JWT 생성, 인증 흐름
1) 클라이언트가 서버에 인증 요청한다.
2) 서버가 인증이 완료되면 JWT 인증 텍스트파일을 내려준다.
3) 클라이언트는 텍스트파일(로컬 스토리지
)을 저장하고 있다가 HTTP Header에 Token값을 담아서 서버에 전송한다.
4) 서버는 Token을 보고 현재 이 요청을 보낸 사용자가 누구인지 인식하게 된다.
필요한 정보들 효과적으로 담고 있음. 위변조 되지 않은 장치가 있음.
JWT 토큰 내용이 위변조 되지 않았다라고 하는 시그니처가 JWT에 담게 된다. (위변조에 대해 어느정도 안전하다) JWT는 복잡한 암호화를 하지 않고 Base64Decode함. Key정보만 잇으면 된다. JWT 토큰에 담고 있는 내용은 10분정도 간다.(refresh Token)
(프로그래머스) 단순 CRUD는 그만! 웹 백엔드 시스템 구현 온라인 스터디(Java반) 강의를 수강하고 제가 이해한대로 정리했습니다. 문제가 될시 삭제하겠습니다!