Cookie와 Session의 차이(feat:Cache)
Cookie와 Session의 차이(feat:Cache)

Cookie와 Session의 차이(feat:Cache)

Tags
Node.js
Web Dev
Published
January 29, 2024
Author
gozneokhan

HTTP의 한계

쿠키와 세션은 HTTP 프로토콜의 특징과 약점을 보완하기 위해 사용됩니다. HTTP 프로토콜은 두 가지 주요 특징을 가지고 있는데, 이것이 쿠키와 세션의 필요성을 대두시킵니다.

Connectionless 프로토콜 (비연결 지향)

  • HTTP는 클라이언트가 서버에 요청을 보내고 응답을 받은 후에 연결을 끊는 방식으로 동작합니다.
  • HTTP 1.1에서는 keep-alive 옵션을 사용하여 커넥션을 유지하고 요청을 재활용할 수 있게 되었지만, 여전히 연결 지향적인 특성을 가지고 있습니다.

Stateless 프로토콜

  • 클라이언트와 서버 간의 통신이 끝나면 상태 정보를 유지하지 않는 특성을 가집니다.
  • 이는 클라이언트가 서버에게 한 번의 요청과 응답 사이에는 이전 통신에서의 정보를 기억하지 않는다는 것을 의미합니다.
그러나 실제로는 많은 경우에 데이터 유지가 필요합니다. 예를 들어, 로그인 상태를 유지하거나 쇼핑 카트에 담긴 상품 정보 등을 기억해야 할 때가 있습니다. 이를 위해 쿠키와 세션이 사용됩니다.

쿠키(Cookie)

쿠키는 HTTP의 일종으로, 사용자가 웹 사이트를 방문할 때 해당 사이트의 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일입니다. 이는 클라이언트의 상태 정보를 클라이언트의 PC에 저장해두었다가 필요할 때 정보를 참조하거나 재사용할 수 있게 합니다.

쿠키 특징

  • 이름, 값, 만료일(저장 기간), 경로 정보로 구성되어 있습니다.
  • 클라이언트에 최대 300개의 쿠키를 저장할 수 있습니다.
  • 하나의 도메인 당 최대 20개의 쿠키를 가질 수 있습니다.
  • 하나의 쿠키는 최대 4KB(4096바이트)까지 저장 가능합니다.

쿠키의 동작 순서

  1. 클라이언트가 페이지를 요청합니다. (사용자가 웹 사이트에 접근)
  1. 웹 서버는 쿠키를 생성합니다.
  1. 생성한 쿠키에 정보를 담아 HTTP 응답 헤더에 실어 클라이언트에게 돌려줍니다.
  1. 넘겨받은 쿠키는 클라이언트가 가지고 있어서(로컬 PC에 저장) 다시 서버에 요청할 때 요청과 함께 쿠키를 전송합니다.
  1. 동일 사이트를 재방문 시, 클라이언트의 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키를 전송합니다.

사용 예시

  • 방문한 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?" 팝업창을 통해 "오늘 이 창을 다시 보지 않기"를 체크할 경우, 해당 정보를 쿠키에 저장하여 다음 방문 시 자동 로그인이 가능하게 합니다.

세션(Session)

세션은 일정 시간 동안 동일한 사용자(브라우저)로부터 들어오는 일련의 요청을 하나의 상태로 간주하고, 이 상태를 유지시키는 기술입니다. 이 일정 시간은 사용자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 웹 브라우저를 종료하여 연결을 끝내는 시점까지를 말합니다. 다시 말해, 사용자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 합니다.

세션 특징

  • 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장합니다.
  • 세션 쿠키는 서버에 저장되어 보안성이 쿠키보다 비교적 우수합니다.
  • 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제되므로, 비교적 높은 보안 수준을 제공합니다.
  • 저장 데이터에는 제한이 없습니다. (서버 용량이 허용하는 한)
  • 각 클라이언트에게 고유한 Session ID를 부여하여 클라이언트를 식별하고, 각 요구에 맞는 서비스를 제공합니다.

세션의 동작 순서

  1. 클라이언트가 페이지에 요청합니다.
  1. 서버는 접근한 클라이언트의 Request-Header 필드인 Cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인합니다.
  1. session-id가 존재하지 않는다면 서버는 session-id를 생성하여 클라이언트에게 전달합니다.
  1. 클라이언트는 서버로부터 받은 session-id를 쿠키에 저장합니다.
  1. 클라이언트는 서버에 요청 시 이 쿠키의 session-id 값을 함께 서버에 전달합니다.
  1. 서버는 전달 받은 session-id로 session에 있는 클라이언트 정보를 찾아 요청을 처리하고 응답합니다.

사용 예시

화면을 이동해도 로그인이 유지되어 있고, 로그아웃하기 전까지 로그인 상태가 지속되는 상황에 사용됩니다.

쿠키와 세션의 차이

쿠키와 세션은 비슷한 역할과 동작 원리를 갖고 있지만, 주요 차이점은 사용자 정보가 저장되는 위치, 보안성, 라이프사이클, 그리고 속도에 있습니다.

저장 위치

  • 쿠키는 클라이언트의 로컬에 저장되며, 서버의 자원을 사용하지 않습니다.
  • 세션은 서버의 자원을 사용하여 사용자 정보를 저장하고, 클라이언트는 세션 ID만을 받아와서 사용합니다.

보안성

  • 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 스니핑 당할 우려가 있어 상대적으로 보안에 취약합니다.
  • 세션은 쿠키를 통해 session-id만을 저장하고, 서버에서 처리하기 때문에 상대적으로 높은 보안성을 제공합니다.

라이프사이클

  • 쿠키는 만료 기간을 설정하여 브라우저를 종료해도 정보를 유지하거나, 특정 기간까지 저장할 수 있습니다.
  • 세션은 브라우저 종료 시에 만료되며, 사용자가 명시적으로 로그아웃하거나 일정 시간이 지나면 세션은 종료됩니다.

속도

  • 쿠키는 클라이언트에 정보가 있어 서버에 요청 시 속도가 빠릅니다.
  • 세션은 정보가 서버에 저장되어 처리가 요구되므로 상대적으로 속도가 느립니다.

쿠키와 세션을 병행 사용하는 이유

세션은 쿠키에 비해 높은 보안성을 제공하지만, 쿠키를 사용하는 이유는 서버 자원의 효율적인 관리와 웹사이트의 성능 향상을 위해서입니다.

서버 자원 관리

  • 세션은 서버에 정보를 저장하고 관리하기 때문에 서버 자원을 소비합니다.
  • 서버 자원은 한정되어 있고, 많은 사용자가 동시에 접속할 경우 세션을 사용하면 서버에 부담이 될 수 있습니다.
  • 쿠키는 클라이언트에 정보를 저장하므로, 서버 자원을 거의 사용하지 않습니다.

속도 향상

  • 쿠키는 클라이언트에 정보가 저장되어 있기 때문에, 서버에 요청 시 속도가 빠릅니다.
  • 반면 세션은 서버에 저장된 정보를 가져와야 하기 때문에 처리가 요구되어 상대적으로 느린 속도를 보입니다.
  • 웹사이트의 성능 향상을 위해 자주 사용되는 데이터나 사용자의 설정과 같은 정보는 쿠키에 저장하여 불필요한 서버 부하를 줄일 수 있습니다.

자원의 낭비 방지

  • 세션은 보안성이 높고 중요한 정보를 안전하게 저장하는 데에 적합합니다.
  • 하지만 모든 정보를 세션에 저장할 필요는 없으며, 빈번하게 변경되지 않는 정보는 쿠키를 활용하여 서버 자원을 효율적으로 활용할 수 있습니다.
  • 이러한 방식으로 불필요한 서버 자원의 낭비를 방지하면서도 필요한 정보에 대해서는 보안성을 유지할 수 있습니다.

쿠키, 세션, 그리고 캐시(Cache)

쿠키, 세션, 그리고 캐시는 웹 개발에서 각각 다른 목적과 기능을 수행하는 중요한 요소입니다.

캐시(Cache)

  • 캐시는 웹 페이지 요소를 임시로 저장하는 저장소입니다.
  • 이미지, 비디오, 오디오, CSS, JS 파일 등의 리소스 파일을 빠르게 렌더링하기 위해 사용됩니다.
  • 저장 공간이 작고 비용이 비싸지만, 빠른 성능을 제공합니다.
  • 같은 웹 페이지에 여러 번 접속할 때, 클라이언트의 PC에서 데이터를 로드하여 서버를 거치지 않아도 됩니다.
  • 이전에 사용된 데이터가 다시 사용될 가능성이 높은 경우, 캐시 서버에 있는 데이터를 사용하여 빠른 접근이 가능해집니다.
  • 캐시 히트(hit): 이전에 요청한 데이터를 다시 사용하는 경우
  • 캐시 미스(miss): 캐시를 사용할 수 없어 웹 서버에서 처음 요청하는 경우

Reference