728x90
TL;DR
쿠키 VS 세션
Cookie | Session | |
저장위치 | Client (웹 브라우저가 지정하는 메모리 또는 하드디스크) |
Server (서버의 메모리) |
저장형식 | Text | Object |
만료시점 | 쿠키 저장 시 설정 (설정 없으면 브라우저 종료 시) |
정확한 시점 모름 (클라이언트가 로그아웃 하거나 설정 시간동안 반응이 없다면 무효화) |
리소스 | 클라이언트의 리소스 (서버 자원을 사용하지 않음) |
서버의 리소스 (세션이 생길 때마나 리소스를 차지함) |
용량제한 | 한 도메인 당 20개, 한 쿠키당 4KB | 제한없음 |
쿠키와 세션의 사용 목적
HTTP 프로토콜의 특성(connectionless, stateless)에 의해 클라이언트를 식별할 수 없다. 이를 보완하기 위해 쿠키 또는 세션을 사용한다.
Connectionless(비연결성)
클라이언트가 요청을 한 후 응답을 받으면 그 연결을 끊어버리는 특징
Stateless(비상태성)
통신이 끝나면 상태(Status)를 유지하지 않는 특징 이전에 보냈던 request나 response를 기억하지 못한다.
쿠키(Cookie)
서버가 사용자의 웹 브라우저에 전송하는 데이터 조각
쿠키의 특징
- 쿠키의 데이터 형태는 Key와 Value로 구성되고, String 형태로 이루어져 있다.
- 쿠키를 사용하면 페이지를 이동할 때마다 로그인을 하지 않고 사용자 정보를 유지할 수 있다.
- 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다.
- 유효 시간이 명시되지 않았다면, 현재 세션이 끝날 때(브라우저가 닫힐 때) 삭제된다.
- 상태가 없는(stateless) HTTP 프로토콜에서 상태 정보를 기억시켜 준다.
- 클라이언트에 300개까지 쿠키를 저장할 수 있다.
- 하나의 도메인 당 20개, 한 쿠키 당 4KB까지 저장할 수 있다.
쿠키의 생성
- 서버가 "Set-Cookie" 헤더에 키와 값을 전달하면, 클라이언트에서 그 쿠키를 저장하고 다음 요청부터 자동으로 쿠키를 "Cookie" 헤더에 넣어 서버에 전송한다.
Set-Cookie: <cookie-name>=<cookie-value>
GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry
쿠키의 구성 요소
- 이름(cookie-name): 각각의 쿠키를 구별하는 데 사용되는 이름
- 값(cookie-value): 쿠키의 이름과 관련된 값
- 유효 시간(Expires, Max-Age): 쿠키의 유지 시간
- 도메인(Domain): 쿠키를 전송할 도메인
- 경로(Path): 쿠키를 전송할 요청 경로
쿠키의 동작 방식
- 클라이언트가 페이지를 요청
- 서버가 쿠키를 생성 후 HTTP 헤더에 쿠키를 포함시켜 응답
- 같은 요청을 할 경우, HTTP 헤더에 쿠키를 함께 보냄
- 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트하고 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
- 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관
쿠키의 단점
- 쿠키는 한 번 생성되면 매 요청마다 헤더에 실려 서버로 전송된다. 만약 쿠키에 저장된 정보가 많다면, 매 요청마다 큰 오버 헤더가 발생한다.
- 그렇기 때문에 일반적으로 쿠키는 도메인 당 20개, 한 쿠키당 4KB로 제한되어 있다.
- 쿠키는 클라이언트 측에 저장되기 때문에 임의로 고치거나 지울 수 있고 가로채기도 쉽다. 따라서 민감한 정보는 쿠키에 저장하면 안 된다.
쿠키의 사용
- 세션 관리(Session management)
- 서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등의 정보 관리
- 개인화(Personalization)
- 사용자 선호, 테마 등의 세팅
- 트래킹(Tracking)
- 사용자 행동과 패턴을 기록하고 분석
쿠키의 사용 예시
- ID 저장, 로그인 상태 유지
- 일주일 간 다시 보지 않기
- 최근 검색한 상품들을 광고에서 추천
- 쇼핑몰 장바구니 기능
세션(Session)
웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법
세션의 특징
- 쿠키와는 달리 데이터를 서버 측에 저장한다.
- 클라이언트를 구분하기 위해 Session ID를 부여하며, 웹 브라우저가 서버에 접속한 시점부터 브라우저를 종료할 때까지 상태를 유지한다. 다시 말해 Session ID는 브라우저 단위로 저장되고, 브라우저 종료 시 제거된다.
- 로그인 여부, 닉네임 등의 관련 정보를 세션에 같이 담으면 해당 정보를 DB에서 매번 조회할 필요가 없어 효율성이 증가한다.
- 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지한다.
세션의 동작 방식
- 클라이언트가 서버에 최초 요청 시 세션 ID를 발급받는다.
- 클라이언트는 세션 ID 값을 Header 쿠키에 저장한다.
- 이후 서버에 요청할 때, 저장된 세션 ID를 Header 쿠키에 담아서 전달한다.
- 서버는 세션 ID로 클라이언트를 식별한다.
- 클라이언트 정보를 가지고 서버 요청을 처리 후 클라이언트에게 응답한다.
- 브라우저 종료 시 세션 ID는 제거되고, 서버에서도 세션은 제거된다.
세션의 사용 예시
- 로그인 같은 보안 상 중요한 작업에 사용된다.
- 클라이언트가 로그인을 요청한다.
- 서버에서는 세션을 로그인한 사용자 정보로 갱신하고, 세션 ID를 발급해 응답한다.
- 클라이언트가 서버에 세션 ID를 요청과 함께 전달하면 서버는 해당 로그인 사용자로 식별 후 응답한다.
언제, 무엇을 사용할까?
쿠키
- 사용자의 편의를 위한 작업
- 지워져도 상관없고, 다른 누군가가 가로채더라도 큰일이 없는 수준의 정보를 저장해 둔다.
- EX. 자동완성, 팝업 N 일간 보지 않기 등
세션
- 서버 안에서 다뤄지는 것
- 사용자나 다른 누군가에게 노출되면 안 되는 정보들은 서비스 제공자가 직접 관리한다.
참고
https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies
https://interconnection.tistory.com/74
728x90
'Learning' 카테고리의 다른 글
[WEB] DOM (0) | 2024.01.19 |
---|---|
[WEB] 렌더링 방식 CSR과 SSR (0) | 2024.01.15 |
[WEB] 브라우저의 동작 (1) | 2024.01.07 |
[이산수학] 동치관계 (1) | 2024.01.04 |