[Web] Session vs Token vs Cookie
[HTTP 프로토콜]
1. HTTP(Hypertext Transfer Protocol)이란?
- 인터넷 상에서 데이터를 주고 받기 위한 프로토콜.
- 클라이언트의 요청을 보내면 서버가 요청을 해석해서 응답을 하는 것!
2. 특징
1) Stateless
- 서버로 가는 모든 요청이 다른 요청과 독립적으로 다뤄진다는 의미
- 즉, 요청이 끝나면 같은 클라이언트라고 해도 서버는 클라이언트의 이전 상태 정보를 알 수 없다
2) Connectionless
- 서버에 연결하고 요청해서 응답을 받으면 연결을 끊어버린다
- 기본적으로 한 자원에 하나의 연결
- 데이터를 유지해야할 때는 단점으로 작용
[Cookie]
1. Cookie
1) Cookie란?
- 브라우저에 저장되는 키와 값이 들어있는 작은 데이터 파일
- 클라이언트의 상태 정보를 로컬에 저장했다가 참조
- 클라이언트에 300개까지 쿠키 저장 가능, 하나의 도메인당 20개의 값만 가질 수 있음
- 하나의 쿠키는 4KB까지 저장 가능
- 사용자가 따로 요청하지 않아도 요청시에 Request Header를 넣어서 자동으로 서버에 전송
2) 구성요소
- 이름 : 각각의 쿠키를 구별하는 데 사용되는 이름
- 값 : 쿠키의 이름과 관련된 값
- 유효시간 : 유지 시간
- 도메인 : 쿠키를 전송할 도메인 ( 도메인은 제한이 있다. 예를 들면 유튜브에서 준 쿠키는 유튜브에만 보낼 수 있다)
- 경로 : 쿠키를 전송할 경로
3) 방식
클라이언트가 서버에 요청(Request)
쿠키 X 쿠키 O
| |
서버는 쿠키를 생성 응답
|
응답할때 쿠키와 함께 돌려줌
|
로컬PC에 저장
[Session]
1. Session
1) Session이란?
- 쿠키를 기반으로, 서버에서 사용자 정보 파일을 관리하는 것
- 클라이언트를 구분하기 위해 Session ID를 부여하며 브라우저를 종료할 때까지 인증상태 유지
- 브라우저에 저장하는 쿠키와 달리 서버에 두기 때문에 보안에 좋지만 사용자가 많아질수록 서버 메모리를 많이 차지
- 동접자가 많을수록 서버에 과부하 -> 성능 저하
2) 방식
클라이언트가 서버에 요청(Request)
|
서버는 쿠키를 확인해서 세션 ID가 있는 지 확인
| |
세션ID X 세션ID O
| |
서버는 세션ID를 생성 세션DB에서 세션ID를 확인
| |
세션 DB에 저장 클라이언트에 응답
|
클라이언트에게 응답 및 세션ID 보냄
[쿠키와 세션의 차이]
세션도 결국 쿠키를 사용하기 때문에 동작원리가 비슷하며 역할도 비슷하다.
차이점은?
1) 사용자 정보가 저장되는 위치
쿠키 : 로컬; 서버의 자원을 전혀 사용X
세션 : 서버
2) 보안 - 세션 > 쿠키
3) 요청 속도 - 세션 < 쿠키
4) 유지 시간
쿠키 : 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남을 수 있다
세션 : 만료 시간이 있지만 브라우저가 종료하게 되면 만료시간에 상관없이 삭제