서버와 클라이언트가 데이터를 주고 받는 통신 방법
connectionless 연결을 유지하지 않는다.
서버와 클라이언트가 한 번 통신이 일어나고 나면 그 연결이 유지되지 않고 바로 끊어진다.
stateless 상태를 유지하지 않는다.
서버와 클라이언트가 첫번째 통신을 끝내고 두번째 통신을 할때, 이전의 통신에 대한 정보를 가지고 있지 않기 때문에 새롭게 갱신을 해주어야 한다.
-> 이러한 http의 특성들 때문에 프론트에서 "로그인"을 구현하는데 어려움이 있음. 사용자가 서버에 요청을 보낼때마다 자신이 누구인지 매번 인증을 해주어야 하기 때문에
-> 번거롭고 웹페이지가 느려지는 원인이 된다.
-> 사용자가 누구인지 계속해서 인증을 하는 방법 대신 로그인 정보를 유지시킬 다른 방법이 필요했다.
-> 사용자의 로그인 정보를 어디에 유지, 저장을 하느냐에 따라 두 방식으로 나눠짐
서버의 메모리, DB 같은 서버의 자원들을 사용해서 사용자의 정보를 유지시키는 방식

장점 ) 토큰 방식보다 보안에 강하다.
단점 )
서버의 확장성이 떨어짐.
서버의 자원이(세션을 저장하고 유지할 공간) 많이 필요함.
여러대의 서버를 사용할때, 사용자가 로그인을 했을때 만들어진 세션을 참조해야하기때문에 처음 로그인한 그 서버에만 요청을 보내야 한다.
사용자 로그인 - 서버에서 토큰(JWT) 발행 - 브라우저 저장소에 토큰을 유지시킴
서버에 저장하지 않아서 서버에 확장성이 있다.
요청이 들어왔을 때 해당 토큰이 유효한지만 체크하면 된다. = 어떤 서버로 요청을 보내도 상관이 없다. (<> 세션방식은 로그인한 해당 서버에만 요청을 보내야한다.)
JSON Web Token 의 약자
암호화, 복호화를 통해 두 개체 사이에서 안정성있게 정보를 교환하기 좋은 방법

JWT를 어떻게 검증하는지에 대한 내용이 들어있다.
토큰의 타입, 암호화 알고리즘이 어떤 알고리즘인지에 대한 정보가 들어있음.
보내고자 하는 데이터가 이곳에 담겨짐
이 정보의 조각은 claim이라고 하고, key-value의 한 쌍으로 이루어져 있다.
payload에는 여러개의 클레임을 담을 수 있고, 공개 비공개 등록 여부를 결정할 수 있다.
헤더와 페이로드를 합친 문자열을 서명한 값. secret을 포함해 암호화 되어있다.

*** 여기까지하면 사용자는 로그인 완료
Access Token 만을 사용했을때 보안문베를 해결하기 위한 나온것이 Refresh Token
유효기간이 긴 토큰은 그 시간동안 정보를 탈취당하게 됨
유효기간을 줄이자니 사용자가 로그인을 여러번해야해서 번거로움
-> 그래서 나온 게 Refresh Token
Refresh Token 도 JWT. 로그인했을때 서버에서 유효기간을 다르게 해서 Access / Refresh 를 동시에 보내준다.
Access의 기간이 만료되어도 로그인 없이 Refresh(유효기간이 더 긺)로 다시 Access Token 발급