HTTP 프토콜은 connectionless, stateless하다는 특징이 있다. 따라서 필요한 정보가 유지되지 않을 수 있다. 예를 들면 로그인을 하고 페이지를 이동하면 계속 로그인을 해야 하는 문제가 생긴다. 이런 문제점을 해결하기 위해 쿠키와 세션을 사용할 수 있다. 즉, 클라이언트와 서버 통신후에도 정보를 유지하기 위해 사용하는 것이 쿠키와 세션이다.
쿠키
쿠키는 사용자가 웹사이트에 접속하면 사용자의 PC에 저장되는 작은 기록 파일이다.
[장점]
- 클라이언트에서 저장되고 사용되기 때문에 서버의 자원을 사용하지 않는다.
- 세션보다 빠르다.
[단점]
- 로컬에 저장되기 때문에 기업에서 관리하는 서버의 보안보다 약하며 탈취 되기 쉽다.
- 변조되기 쉽다 -> 개발자 도구를 사용하면 웹 사이트별로 어떤 쿠키가 사용되고 있는지 알 수 있다.
- 용량 제한이 있다.
세션
일정 시간 동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지하는 기술이다. 즉, 방문자가 웹 서버에 접속해있는 상태를 하나의 단위로 본다.
[장점]
- 브라우저를 닫거나, 서버에서 세션을 삭제할 수 있기 때문에 쿠키보다 보안이 좋다.
- 용량 제한이 없다.
[단점]
- 쿠키보다 느리다.
- 서버의 자원을 사용한다.
JWT 토큰
JWT(Json Web Token)이란 Json포맷을 이용한 Claim 기반의 웹 토큰이다. 클라이언트에 저장되어 사용되기 때문에 서버의 자원을 사용하지 않는다는 특징이 있다.
JWT 토큰 포맷
- 헤더(Header) : 토큰의 타입과 암호화 알고리즘을 명시한다.
- 내용(Payload) : 사용자의 인증 정보 등 필요한 정보를 담는다. (key, value)형태로 구성된다.
- 서명(Signature) : 토큰의 유호성 검증을 할 때 사용된다. 헤더와 내용의 값을 인코딩 한다.
[장점]
- JSON으로 생성된 토큰은 용량이 작다.
- 거의 모든 곳에서 생성되고 사용될 수 있다.
- 액세스 가능한 데이터와 지속 시간 등을 정할 수 있다.
[단점]
- 단일 키 : 키가 유출되면 시스템 전체가 위험해진다.