이미 JWT에 관한 글을 적긴 했지만, 정작 왜 JWT를 쓰는지에 대한 의문은 해결 되지 않았기에 글을 쓰게 되었다.( + 쿠키, 세션)
세션 ID, 쿠키 등이 탈취된다면 세션 저장소를 전부 지워 해결 가능하지만, 탈취당하지 않은 정상적인 사용자도 모두 재인증을 해야함
STATELESS
를 위배한다. ⭐
STATELESS
라면 서버는 클라이언트의 상태를 저장하지 않아야 하지만, 세션 저장소라는 곳에서 클라이언트의 상태를 저장하게 되므로STATEFUL
하게됨다.
더 나아가자면, 서버를 스케일 아웃 했을 때 1번 서버에 로그인한 사용자가 다른 2번 서버로 요청을 보내게 된다면 2번 서버에는 로그인 상태가 남아있지 않기 때문에 다시 로그인해야 하는 상황이 발생
1)
, 2)
를 해결하기 위해 jwt가 등장함쿠키와 세션 사용 시 문제점이었던 STATEFUL
특성을 JWT 사용 시 STATELESS
하게 가져갈 수 있음 ⭐
즉, 서버는 클라이언트의 상태를 가질 필요가 없다.
인증에 필요한 정보가 토큰에 들어있어서 별도의 저장소가 필요 없다.
다양한 언어에서 지원한다.
HTTP HEADER에 넣어서 쉽게 전달 가능하다.
MSA 환경에서 유용하다.
BASE64
로 인코딩 된 것이므로 중간에 토큰을 탈취하면 페이로드의 데이터를 모두 볼 수 있다.쿠키와 세션은 말 그대로 저장소
하지만 둘의 차이점은 쿠키는 브라우저에 저장되지만, 세션은 서버에 저장됨
그런데 굳이 왜 쿠키를 사용하는가?
세션은 서버의 자원을 사용하기 때문에 무분별하게 만들다보면 서버의 메모리가 감당할 수 없어질 수가 있고 속도가 느려질 수 있기 때문.
그렇다면 jwt는 왜 등장했을까?
쿠키나 세션은 보안면에서 좋지 않기 때문에, 이를 보완하기 위해 토큰 기반의 인증방식의 등장으로 나오게 됨(토큰 기반 인증 방식 중 하나)
다시 말해서 jwt는 인증에 필요한 정보들을 암호화 시킨 토큰이다.
세션 방식처럼 토큰 자체를 쿠키에 담아서 보내줄 수도 있고 HTTP 헤더에 담아서 보내줄 수도 있다.