JWT 얘기만 벌써 3번째긴한데 오늘 JWT 특강이 있었기에 정리하려 한다.
우선 쿠키와 세션도 함께 언급하여 정리하였는데,
쿠키는 패스하고 세션에서는 세션 map을 사용해서 클라이언트가 로그인을 하면
서버에서 세션ID와 해당 유저의 ID를 세션map에 저장하고, 유저에겐 세션ID 발급.
유저 인증이 필요한 작업에는 세션map에서 유저의 세션ID를 찾아 인증하는 방식이다.
그런데 일반적으로 서버를 하나만으로 운영하는 곳은 없으니,
여러 서버에 유저들을 균등하게 분산시켜 접속하게 하다보면
각 서버에 있는 세션map은 공유되지 않으므로, 유저가 다른 서버로 이동하면
다시 또 로그인 정보를 받아와야하는 불편함이 생긴다.
그래서 세션서버
를 따로 만들고 모든 서버가 이 세션서버를 거쳐서 세션ID를 검색하는 방식을 사용한다는 것. 이게 stateful의 세션방식이다.
JWT는 토큰을 발급해주어 서버에 메모리를 들여 저장할 필요가 없었고,
서버에서 하는 일을 단순하게 줄여주었다.
- 유저 토큰 발급
- 토큰 일치 여부 확인
이것 만으로 유저 인증이 가능하도록 간단해진 것이다.
여기서 accessToken과 refreshToken이 나오는데,
서버는 유저에게 accessToken과 refreshToken을 모두 발급해주고,
대부분의 유저 인증이 필요한 작업에는 accessToken만을 사용한다.
refreshToken이 사용되는 경우는 accessToken이 만료되었을 때일 뿐.
쉽게 말하면 refreshToken은 숨어있고 accessToken이 행동대장을 하는 것이다.
그 대신! accessToken은 만료 시간을 짧게 설정해주는 것이 포인트.
이렇게 하는 이유는 accessToken이 누군가에게 탈취되었을 때 피해를 최소화 하기 위함
이다.
accessToken이 탈취된 사실을 알게되면 refreshToken으로 로그아웃 처리를 해주고,
새로운 accessToken을 발급해주는 처리과정을 밟는다.
진짜 마지막 정리 끝!