Session과 Cookie

1 분 소요

HTTP 프로토콜은 Connectless, Stateless의 특징이 있다.
즉, 연결을 유지하지 않고 이로인해 상태 정보를 가질 수 없다는 특징이다.

이러한 HTTP 프로토콜의 특성은 장점이자 단점이 되는데 단점을 커버하고자 쿠키와 세션이 사용된다.

  • 쿠키는 상태 관리를 위해 사용되는 작은 파일로 상태를 저장하는 위치는 Client(브라우저)이다.
  • 쿠키는 key-value 형태의 데이터들로 이름, 값, 만료날짜 등의 정보가 있다.
  • 쿠키 크기는 4kb로 제한된다.
  • 하나의 도메인당 20개까지 제한된다.
  • 모든 도메인을 통틀어 300개로 제한된다. 만약 이 범위를 넘어서면 오래된 쿠키부터 지운다.

로그인이 유지되는 것도 쿠키를 이용한 것이다.

  • 브라우저를 통해 웹페이지에 접속한다.
  • 서버는 쿠키를 설정해 Client(브라우저)에게 응답한다. (Response Header에 Set-Cookie 속성을 사용)
  • 브라우저는 쿠키를 메모리에 저장한다.
  • 이후 웹페이지 접속 시 Request에 쿠키를 함께 전송한다.
  • 서버는 Client로 부터 전달된 쿠키를 통해 상태 관리를 할 수 있게된다.

1.3. Coockie 사용 예

  • 쇼핑몰 장바구니
  • 해당 사이트의 사용자 언어 설정 및 기타 정보
  • 팝업 “오늘 더 이상 이 창을 보지 않습니다.”
  • 로그인 정보 (세션을 사용하여)

2. Session

로그인과 같은 보안상 중요한 작업은 세션을 통해 이뤄진다.

2.1. Session

  • 세션은 Client-Server 간 연결이 유지되고 있는 상태를 말한다.
  • Client가 Request를 보내면 서버는 유일한 ID를 생성하여 이 값을 반환하는데 이 값이 세션이다.

2.2. Session 원리

  • 브라우저가 웹페이지에 접속한다.
  • 서버는 세션 ID를 만들고, 그 값을 내부적으로 관리한다.
  • 생성한 세션ID는 쿠키를 이용해 리턴한다. (쿠키 이름은 JSESSIONID)
  • 브라우저는 재접속시 이 쿠키(JSESSIONID)를 이용해 세션 ID를 서버에 전달한다.
  • 서버는 세션ID를 통해 유일한 Client를 구분할 수 있게된다.

2.3. Session의 장단점

  • 세션을 통해 서버는 접속한 Client를 유일하게 구별할 수 있고, 클라이언트를 구별해야 하는 정보를 서버에서 관리할 수 있게 된다.
  • 정보 저장이 서버에서 이뤄지므로 쿠키만 사용하는것보다 보안에 안전하다. (쿠키는 클라이언트가 관리하는것. 세션은 서버에서 관리하는것)
  • 세션에 따라서 부가 정보를 서버가 관리하므로 서버 부하가 커진다. (쿠키보다 느리다.)
  • 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request에서 스니핑 당할 우려가 있어서 보안에 취약하지만 세션은 쿠키를 이용해 sessionId만 저장하고 실제로 이걸로 처리하는 작업은 서버에서 하기 때문에 보안에 더 안전하다.

[참고 문서]

  1. 참고 블로그

카테고리:

업데이트:

댓글남기기