쿠키와 세션은 왜 필요한가?
HTTP의 모든 requests는 완전히 독립되어 있는 무상태성(stateless)을 가지고 있기 때문에 같은 사용자가 요청을 여러 번 하더라도 방문 기록이나, 로그인 정보들을 알 수가 없다. 이러한 HTTP의 정보를 유지할 수 없는 단점을 보완하기 위해 나온 인증 방식이다.
쿠키 Cookie
- 서버와 클라이언트가 대화하기 위한 수단이다.
- 서버가 사용자의 로컬 메모리에 정보를 저장하고 불러올 수 있게 한다.
- 한번 생성된 쿠키는 이후 모든 요청마다 서버로 다시 전송된다.
- 이름, 값, 만료 날짜, 경로 정보로 구성되어 있다.
- 쿠키가 유출되면 보안 문제가 발생할 수 있다.
세션 Session
- 쿠키의 보안 문제를 해결할 수 있게 해준다.
- 서버와 클라이언트가 연결되어 있는 상태이다.
- 클라이언트와 서버가 통신을 할 때 쿠키에서
Session-id
를 확인한다.
- Session-id가 없으면
Set-Cookie
를 통해 해당 클라이언트에 대해 유일한 Session-id를 부여하고, 접속한 서버 데이터에 정보를 저장한다.
- 클라이언트는 이 Session-id를 쿠키를 통해 기억하고 이후 요청을 보낼 때마다 헤더의 쿠키에 Session-id를 담아 전송한다.
- 서버에 저장하기 때문에 관리하기 편하고 효율적이다.
생활에서의 예
-카메라를 사기 위해 인터넷에 정보를 검색하면 그것과 관련된 정보들이 유튜브나 SNS 같은 곳에서 광고로 나오는 것이 쿠키를 이용한 것이다.
세션은 서버에서 가지고 있는 정보이며 쿠키는 사용자에게 발급된 세션을 열기 위한 열쇠(Session-id)이다.
토큰 Token
- 인증을 위해 사용되는 암호화된 문자열이다.
- 클라이언트에서 인증에 성공하면 서버는 토큰을 생성한다.
- 클라이언트의 인증 정보를 서버나 세션에 담아두지 않는다.
- 서버는 토큰이 유효한지 확인만 하기 때문에 세션처럼 서버에서 클라이언트의 상태 정보를 저장하지 않아도 된다.
- 클라이언트 상태 관리를 하지 않기 때문에 비용이 절감되고 서버의 무리가 적다.
- 상태를 저장하지 않기 때문에 HTTP의 Stateless 한 성격에 적합하다.
사진: 코드스테이츠
참고
얄팍한 코딩사전 - 쿠키, 세션, 캐시가 뭔가요?
nesoy님 블로그 - 쿠키(Cookie) 그리고 세션(Session)
김수지님 블로그 - TIL - authentication, session/token based server building