개발/이론

[Web] Cookie와 Session

뽀글뽀글 개발자 2023. 4. 18. 17:34

쿠키와 세션이 무엇인가?

쿠키와 세션은 비연결성 무상태라는 특징을 가진 HTTP 프로토콜에서  상태를 유지하기 위해 사용되는 개념이다.

 

쿠키

특징

  1. 브라우저에 정보를 저장하기 때문에 서버의 리소스 사용량을 줄일 수 있다.
  2. 브라우저에 저장되기 때문에 다른 사람이 볼 수도 있고, 조작이 가능하기 때문에 보안에 취약하다는 점과 사용자가 쿠키를 차단해버리면 서버 측에서는 쿠키 기반 상태 유지가 불가능하다는 단점이 있다. 
  3. 요청을 보낼 때마다 Request Header에 자동으로 포함되기 때문에 크기가 큰 쿠키를 많이 만들면 트래픽의 크키가 커지고, 리소스가 낭비될 수 있다.
  4. 텍스트 형태의 상태 정보만 저장할 수 있으며, 데이터의 개수와 크기에 제한이 있다. (최대 300개, 도메인 하나 당 최대 20개, 4KB)
  5. 쿠키를 사용할 도메인과 경로, 유효 시간 등을 설정할 수 있고, http only와 같은 옵션을 통해 조작할 수 없게 설정할 수 있다.

 

쿠키 사용 예시

  • 자동 로그인, 하루 동안 보지않기, 다크모드, 언어 설정, 맞춤 광고 등 설정 정보 유지 
  • 장바구니, 최근 검색 리스트 등 사용자의 행동 정보 기록

 

세션

특징

  1. 서버에 저장하여 서버 메모리를 소모하는 단점과 서버 메모리 용량이 크면 쿠키보다 많은 저장 공간을 사용할 수 있다는 장점이 있다.
  2. 서버에 저장되기 때문에 쿠키보다 안전하다.
  3. 서버에 저장되기 때문에 각 브라우저를 구분할 수 있어야하며, 이를 위해 각 브라우저 마다 1개의 고유한 세션 객체를 유지할 수 있다.
  4. 사용자의 세션은 Session ID를 브라우저에 쿠키로 저장해두고, Session ID를 통해 구분한다.
  5. 자주 조회되는 데이터를 세션에 담아두고 캐시처럼 사용해서 성능을 향상시킬 수 있다.
  6. 세션의 만료 시간을 설정해두고 일정 시간 이상 세션이 사용되지 않으면 자동으로 삭제되게 할 수 있다.
  7.  세션은 계속 유지되기 때문에 메모리의 참조가 사라지지 않는다. 따라서 자바의 경우 GC가 삭제하는 것이 아니기 때문에 너무 많은 세션을 오래 유지해서는 안된다
  8. 서버 이중화나 MSA 같은 분산 환경에서 서로 다른 서버에 있는 세션 정보를 동기화해야 하기 때문에 관리가 힘들다.

 

세션 사용 예시

세션 서버에 부하를 줄 수 있기 때문에 로그인한 동안 사용할 데이터만 저장하는 용도로 쓰인다.

  • 사용자 인증 정보
  • 장바구니
  • 작성 중인 폼 정보 유지