쿠키 vs 세션 vs 웹 스토리지

HTTP 프로토콜은 비연결지향(Connectionless), 무상태(Stateless)라는 특성을 가짐

-> 연결을 끊는 순간 클라이언트와 서버의 통신 끝나며 상태 정보 유지 X

 

따라서 서버는 클라이언트의 상태를 알 수 없으므로 쿠키와 세션을 사용


• 쿠키(Cookie)란?

  • 클라이언트(브라우저)에 저장되는 작은 데이터 파일
  • 유효 기간이 있음 -> 유효 기간동안은 브라우저에 데이터 저장
  • 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Resquest Header에 넣어서 자동으로 서버로 전송
  • 4KB로 용량이 제한

 

 

동작방식

  1. 클라이언트가 서버에 HTTP 요청
  2. 서버에서 쿠키 생성 후, HTTP 헤더에 쿠키를 포함시켜서 응답
  3. 클라이언트는 이제부터 HTTP 요청시마다 HTTP Header에 쿠키 담아서 전송
    브라우저가 종료되어도 유효 기간동안 클라이언트에서 보관 -> 요청 시 사용 가능
  4. 유효 기간 만료되면, 클라이언트가 새로 서버에 요청하여 쿠키 새로 발급

 

쿠키는 서버와 클라이언트 간의 지속적인 데이터 교환을 위해 만들어짐

-> 서버로 계속 전송된다는 문제가 있음

 

왜 문제가 되나?

4KB 용량을 거의 다 채운 쿠키가 있다고 가정해보자.

요청때마다 기본으로 4KB의 데이터를 사용해야 함 -> 서버에 필요하지 않은 데이터도 포함되어 있을 수 있음

데이터 낭비!

 

해결방법은 로컬 스토리지세션 스토리지에 저장하는 것

세션 스토리지와 로컬 스토리지의 데이터는 서버로 자동 전송하지 않기 때문에!

 

* 쿠키 종류 - Session Cookie, Persistent Cookie, Secure Cookie, Third Party Cookie


• 세션(Session)이란?

  • 쿠키를 기반으로 하고 있지만, 데이터를 서버 측에서 관리
  • 서버에서 클라이언트를 구분하기 위해서 세션 ID를 부여
  • 웹 브라우저가 서버에 접속해서 브라우저 종료할 때까지 인증상태 유지
  • 데이터를 서버에 두기 때문에 보안에 좋지만, 사용자가 많아질수록 서버 메모리 많이 차지

 

 

동작방식

  1. 클라이언트가 서버 접속 시 세션 ID 발급
  2. 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
  3. 클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청
  4. 서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라이언트 정보를 가져와서 사용
  5. 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답

  쿠키와 세션의 차이점

세션도 결국 쿠키를 사용하기 때문에 동작 방식이 비슷하다. 

  1. 클라이언트 정보 저장 위치
    쿠키는 클라이언트, 세션은 서버에 데이터 저장
  2. 라이프 사이클
    쿠키는 만료기간이 있지만 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아 있을 수 있다.
    세션도 만료기간을 지정할 수 있지만, 브라우저가 종료되면 만료시간에 상관없이 종료된다.
  3. 보안 측면에서는 세션이 더 우수하다.
    쿠키는 로컬에 저장되기 때문에 보안에 취약하지만, 세션은 세션 ID만 저장하고 서버에서 처리하기 때문이다.
  4. 속도 측면에서는 쿠키가 더 우수하다.
    쿠키는 쿠키에 정보가 있기 때문에 서버에 요청 시 속도가 빠르고, 세션은 서버에 정보가 있어서 처리가 요구되어 비교적 속도가 느리다.

• 웹 스토리지(Web Storage)란?

  • 클라이언트에 데이터를 저장할 수 있도록 HTML5부터 나온 새로운 방식의 데이터 저장소
  • 쿠키와 달리 서버로 데이터 자동 전송 위험 X 
  • 쿠키보다 큰 용량 지원(쿠키는 4KB, 웹 스토리지는 모바일인 경우 2.5MB, 데스크탑인 경우 5-10MB)
  • 서버가 HTTP 헤더를 통해 스토리지 객체 조작 X(JavaScript 내에서만 수행)
  • 로컬 스토리지 세션 스토리지가 있음

 

- 로컬 스토리지와 세션 스토리지(localStoarge, sessionStorage)

  로컬 스토리지 세션 스토리지
데이터 저장 사용자가 지우지 않는 한 계속 저장
(영구 저장 가능)
윈도우/브라우저 닫으면 제거됨
사용 방법 자동 로그인 일회성 로그인

 

- 로컬 스토리지는 오리진 별로 생성되며, 다른 오리진의 로컬 스토리지에는 접근 불가능

서로 다른 브라우저 탭이라도 동일한 오리진이라면 동일한 로컬 스토리지를 사용

window.localStoarge 객체 

 

- 세션 스토리지는 윈도우/브라우저 단위로 세션 스토리지 생성

동일한 윈도우/브라우저라도 다른 오리진이라면 다른 세션 스토리지 생성 -> 독립적

window.sessionStoarge 객체

 

(* 오리진 = 프로토콜 + 도메인 + 포트)


간단히 정리하자면, 

쿠키: 일시적으로 필요한 가벼운 데이터 저장

로컬 스토리지: 지속적으로 필요한 데이터 저장

세션 스토리지: 일시적으로 필요한 데이터 저장

'WEB' 카테고리의 다른 글

Node.js vs 브라우저 환경  (0) 2023.05.08
Rest API, RESTFUL API  (0) 2023.05.06
XML, JSON, YAML  (0) 2023.04.28
MPA/SPA  (0) 2023.04.23
CSR/SSR  (0) 2023.04.18