네트워크/HTTP

HTTP 쿠키 및 세션: 구조와 사용법

shimdh 2025. 3. 6. 09:15
728x90

웹 애플리케이션은 사용자와의 상호작용을 보다 개인화하고 효율적으로 관리하기 위해 HTTP 쿠키(Cookie)와 세션(Session) 을 활용합니다. 이 두 가지는 사용자 인증, 상태 유지, 맞춤형 경험 제공 등에 필수적인 요소로, 브라우저와 서버 간의 데이터 저장 및 전달 방식에 중요한 역할을 합니다.


1. HTTP 쿠키란?

쿠키(Cookie)클라이언트(브라우저)에 저장되는 작은 데이터 조각으로, 사용자의 상태 정보를 유지하는 데 사용됩니다. 서버는 특정 정보를 쿠키에 저장한 후, 사용자가 같은 웹사이트를 방문할 때 이 정보를 활용하여 지속적인 사용자 경험을 제공할 수 있습니다.

쿠키의 주요 역할

사용자 인증 유지 → 로그인한 사용자의 상태를 유지.
사용자 맞춤형 서비스 제공 → 다크 모드 설정, 언어 설정, 최근 본 상품 목록 등을 기억.
웹사이트 분석 및 추적 → 방문자의 행동을 분석하여 광고 또는 추천 시스템에 활용.


2. HTTP 쿠키의 구조

쿠키는 여러 속성을 포함하며, 이를 통해 저장 및 사용 방식이 결정됩니다.

📌 쿠키의 주요 속성

속성 설명
이름(Name) 쿠키의 고유한 이름을 지정.
값(Value) 쿠키에 저장될 데이터 (예: userID=12345).
도메인(Domain) 해당 쿠키가 적용될 웹사이트의 도메인 지정.
경로(Path) 특정 URL 경로에서만 쿠키가 유효하도록 설정.
만료 기간(Expires/Max-Age) 쿠키가 만료되는 날짜 또는 유지될 시간 지정.
보안 플래그(Secure Flag) HTTPS에서만 쿠키가 전송되도록 설정.
HttpOnly 플래그 JavaScript에서 접근할 수 없도록 설정하여 보안 강화.
SameSite 플래그 CSRF(Cross-Site Request Forgery) 공격 방지.

📌 쿠키 설정 예시

서버가 클라이언트에게 특정 정보를 저장하도록 요청할 때 Set-Cookie 헤더를 사용합니다.

Set-Cookie: userID=12345; Expires=Wed, 21 Oct 2023 07:28:00 GMT; Path=/; Secure; HttpOnly; SameSite=Strict

📌 설명:

  • userID=12345 → 쿠키에 저장될 데이터(사용자 ID).
  • Expires=Wed, 21 Oct 2023 07:28:00 GMT → 쿠키 만료일 설정(이후 자동 삭제).
  • Path=/ → 웹사이트 전체에서 사용 가능.
  • Secure → HTTPS에서만 전송 가능.
  • HttpOnly → JavaScript에서 접근 불가(보안 강화).
  • SameSite=Strict → 크로스사이트 요청 시 자동 전송 방지(보안 강화).

3. 세션(Session)이란?

세션(Session)서버에서 유지되는 사용자 상태 정보입니다.
쿠키와 달리 세션은 서버에서 관리되며, 클라이언트는 세션 ID만 보관합니다.

세션의 주요 특징

사용자 인증 관리 → 로그인 상태 유지.
서버에서 직접 데이터 관리 → 민감한 데이터 저장 가능.
보안성이 높음 → 클라이언트에서 직접 데이터 조작이 불가능.

📌 세션의 동작 방식

  1. 사용자가 로그인 요청을 하면 서버는 고유한 세션 ID를 생성.
  2. 생성된 세션 ID를 쿠키에 저장하여 클라이언트에게 전송.
  3. 이후 모든 요청에서 세션 ID가 함께 전송되며, 서버는 이를 통해 사용자 정보를 유지.

📌 세션 예시 (PHP 세션 설정)

session_start();
$_SESSION["user"] = "JohnDoe"; 
  • session_start(); → 세션을 시작.
  • $_SESSION["user"] = "JohnDoe"; → 세션에 사용자 정보 저장.

📌 세션 ID가 포함된 응답 헤더 예시

Set-Cookie: sessionID=abc123xyz456; Path=/; HttpOnly; Secure

📌 설명:

  • sessionID=abc123xyz456 → 세션 ID가 쿠키에 저장됨.
  • HttpOnly → JavaScript 접근 불가.
  • Secure → HTTPS에서만 전송 가능.

4. HTTP 쿠키와 세션 비교

구분 HTTP 쿠키 세션
저장 위치 클라이언트(브라우저) 서버
보안성 낮음 (클라이언트에서 변경 가능) 높음 (서버에서 직접 관리)
크기 제한 약 4KB 제한 없음 (서버 메모리 사용)
사용 목적 간단한 사용자 정보 저장 사용자 인증 및 상태 유지
생명 주기 만료일 설정 가능 기본적으로 브라우저 종료 시 삭제

📌 세션은 보안성이 높지만 서버 부담이 크고, 쿠키는 클라이언트에 저장되므로 네트워크 부하를 줄일 수 있습니다.


5. 실제 활용 사례

쇼핑몰에서의 쿠키 & 세션 활용

  1. 사용자가 웹사이트에 방문하면, 브라우저는 이전에 저장된 쿠키를 서버로 전송하여 로그인 상태를 유지.
  2. 사용자가 로그인하면, 서버는 세션을 생성하고 세션 ID를 쿠키에 저장하여 인증 유지.
  3. 사용자가 장바구니에 상품을 추가하면, 장바구니 정보는 쿠키에 저장되어 페이지 이동 시에도 유지됨.
  4. 사용자가 결제를 진행하면, 결제 과정은 세션을 활용하여 보안성을 유지.

SNS 로그인 유지

  1. 사용자가 로그인하면, 서버는 세션 ID를 생성하고, 이를 쿠키에 저장하여 클라이언트에 전달.
  2. 사용자가 페이지를 이동할 때마다 세션 ID가 요청에 포함되어 로그인 상태 유지.
  3. 사용자가 로그아웃하면, 서버는 해당 세션을 삭제하여 인증 정보 제거.

6. 보안 고려 사항

쿠키 보안 강화
HttpOnly → JavaScript를 통한 조작 방지.
Secure → HTTPS에서만 전송 가능하도록 설정.
SameSite → CSRF 공격 방지.

세션 보안 강화
세션 타임아웃 설정 → 일정 시간 후 세션 자동 만료.
세션 ID 재발급 → 로그인 시마다 새로운 세션 ID 생성.
서버 측 저장 방식 개선 → 세션 정보를 데이터베이스에 저장하여 보안 강화.


7. 결론

HTTP 쿠키와 세션은 웹 애플리케이션에서 필수적인 요소이며, 사용자의 상태를 관리하고 보안을 유지하는 중요한 역할을 합니다.
쿠키는 클라이언트에 저장되므로 간단한 데이터 저장에 적합하지만, 보안에 취약할 수 있습니다.
세션은 서버에서 직접 관리되므로 보안성이 높지만, 서버 부담이 증가할 수 있습니다.

💡 쿠키와 세션을 적절히 활용하여 최적화된 사용자 경험과 보안성을 갖춘 웹 애플리케이션을 구축해야 합니다! 🚀

728x90

'네트워크 > HTTP' 카테고리의 다른 글

HTTP 보안: HTTPS와 SSL/TLS  (0) 2025.03.06
HTTP 쿠키 및 세션: 효과적인 세션 관리  (0) 2025.03.06
HTTP 헤더: 엔터티 헤더  (0) 2025.03.06
HTTP 헤더: 응답 헤더  (0) 2025.03.06
HTTP 헤더: 요청 헤더  (0) 2025.03.06