HTTP는 요청에 대한 응답을 처리하게 되면 연결을 끊어버리고 통신의 상태가 남지 않는 비연결성, 무상태성이라는 특징이 있다.
이 때문에 서버는 클라이언트를 식별할 수 없고 새로고침을 할 때 마다 로그인을 해야하는 문제가 있다. 이를 Cookie & Session 이나 JWT를 통해서 해결할 수 있다.
Cookie는 사이트가 사용하는 서버를 통해 클라이언트의 브라우저에 설치되는 기록정보 파일이다.
세션은 비밀번호와 같은 개인정보를 서버에 저장하고 관리하고 각 사용자마다 고유한 세션아이디를 발급한다.
로그인 할때 서버는 쿠키에 세션아이디를 담아 클라이언트에 저장하고 클라이언트는 요청을 보낼때마다 세션아이디 쿠키를 보내 서버는 클라이언트를 식별할 수 있다.
JWT는 JASON Web Token으로 인증에 필요한 정보들을 암호화시킨 토큰인데 이를 HTTP 헤더에 실어 서버가 클라이언트를 식별할 수 있다.
JWT 구조
Header
정보를 암호화할 해싱 알고리즘과 토큰의 타입을 지정한다.
Payload
토큰에 담을 클라이언트의 아이디값, 유효 기간 등의 정보를 지닌다.
Signature
인코딩된 Header와 Payload를 더한 후 서버 측에서 관리하는 비밀키로 해싱하여 생성하며 토큰의 위변조 여부를 확인한다.