이전에 세션에 관해 말한적이 있습니다. 세션의 단점인 메모리를 많이 차지한다것을 보안하기위해 토큰을 사용하기도합니다
토큰은 해당 서버만의 방식으로 암호화된 문자열이며 토큰을 받은 사용자는 이를 쿠키에 저장해두고 필요할 때마다
제시하면 서버는 메모리에 저장해 둘 필요 없이 그때그때 자기가 발급한 토큰인지 알아보고 사용자의 요청을 허가하는 방식입니다.
여기서 의문점은 서버가 발급한 토큰인지 알아보는 과정이 세션이 메모리에 저장하는것보다 효율적이냐는 것입니다. 검증하는 과정또한 서버의 메모리에 부담을 줄것입니다. 이방법의 세션의 양에 따라 달라질것입니다. 토큰은 검증의 과정을 거칩니다. 이말은 암호화된 토큰을 복호화해서 해당 규칙이 우리서버에서 정한규칙이맞는지 확인하는 과정입니다. 이에 반해 세션은 조회이기때문에 메모리에 있는 값들을 일일이 조회해야 합니다. 조회는 데이터의 양이적다면 빠르게 되겠지만 양이많고 해당값이 메모리를 차지하기에 토큰이 좀더 효율적이라고 볼수있습니다.
그렇다고 토큰에는 장점만 있는냐 그건또 아닙니다.
토큰 또한 한계가 존재합니다. 토큰의 길이가 길어 인증 요청이 많아질 수록 네트워크 부하가 심해질 수 있습니다.
여러 기기에서 로그인을 제한하기 위해 서버는 강제로 기기 로그아웃을 시킬 수 있어야 하지만 토큰방식은 클라이언트 측에서 저장되기 때문에 서버에서 특정 기기에서의 로그인을 강제로 종료시키기 어렵습니다. 클라이언트에 저장되기에 토큰은 유효기간이 끝나기 전까지 통제할 방법이 없으며 만료될 때까지 계속 사용이 가능 중간에 공격자로부터 토큰이 탈취당할수있어 만료시간을 짧게 지정해두는게 좋습니다.
토큰 기반 인증 방식 중 하나입니다.
인증에 필요한 정보들을 암호화 시킨 후 JWT토큰을 HTTP 헤더에 넣어 사용할수있습니다.

//header signature
aaaaaa.bbbbbb.cccccc
//payload
JWT는 헤더, 내용, 서명으로 이루어져 있습니다.
헤더(header): JWT토큰의 유형이나 HMAC SHA256 또는 RSA와 같이 해시알고리즘 중 무엇으로 사용했는지의 정보가 담김
내용(payload): 토큰에 담을 클라이언트에 대한 정보나 메타데이터 등이 담김
서명(signature): 서버의 비밀키로 암호화한 내용을 담습니다

이처럼 JWT는 서버에서 해당 Payload가 우리방식대로 암호화가 되었는지 확인하는 작업만 하면되기때문에 DB에 추가로 접근하지
않아도 됩니다. 매우 효율적이지만 허점또한 존재합니다.
reference
https://www.lgcns.com/blog/cns-tech/security/1786/
https://h-owo-ld.tistory.com/204
https://puleugo.tistory.com/138
https://www.youtube.com/watch?v=36lpDzQzVXs
https://www.youtube.com/watch?v=XXseiON9CV0