HTTP 프로토콜은 요청 간에 상태를 유지하지 않는 무상태(stateless) 프로토콜입니다. 그러나 상업용 웹사이트라면 여러 페이지에 걸쳐 세션 정보를 유지해야 하는 경우가 많습니다. 예를 들어 사용자 등록 절차는 여러 페이지를 거쳐 완료되는데, 이때 모든 웹 페이지에서 사용자의 세션 정보를 어떻게 유지할 수 있을까요?
이러한 문제를 해결하는 가장 효율적인 방법이 바로 쿠키(cookie)입니다. 쿠키를 활용하면 방문자의 선호 설정, 구매 내역, 커미션 등 다양한 정보를 기록하고 추적할 수 있으며, 이는 방문자 경험 개선과 사이트 통계 분석에 모두 큰 도움이 됩니다.
쿠키의 작동 원리
웹 서버는 방문자의 브라우저에 쿠키 형태로 데이터를 전송합니다. 브라우저는 이 쿠키를 수락할 수도 있고 거부할 수도 있는데, 수락하면 일반 텍스트 형태의 레코드로 방문자의 하드 드라이브에 저장됩니다. 이후 방문자가 같은 사이트의 다른 페이지에 접속하면 저장된 쿠키를 다시 불러올 수 있으며, 서버는 쿠키에 담긴 정보를 확인하고 기억하게 됩니다.
쿠키는 다음 5개의 가변 길이 필드로 구성된 일반 텍스트 데이터 레코드입니다.
- Expires(만료일) – 쿠키가 만료되는 날짜입니다. 이 값이 비어 있으면 방문자가 브라우저를 종료하는 시점에 쿠키도 함께 만료됩니다.
- Domain(도메인) – 해당 사이트의 도메인 이름입니다.
- Path(경로) – 쿠키를 설정한 디렉터리 또는 웹 페이지의 경로입니다. 어떤 디렉터리나 페이지에서든 쿠키를 불러오려면 이 값을 비워 두면 됩니다.
- Secure(보안) – 이 필드에 "secure"라는 단어가 포함되어 있으면 보안 서버를 통해서만 쿠키를 가져올 수 있습니다. 값이 비어 있으면 별도의 제한이 없습니다.
- Name=Value(이름=값) – 쿠키는 키(key)와 값(value) 쌍의 형태로 설정하고 조회합니다.
Python CGI에서 쿠키 설정하기
CGI 환경에서 쿠키를 설정하려면 HTTP 응답 헤더에 Set-Cookie를 포함하여 출력하면 됩니다. 단, 헤더는 반드시 본문(body)보다 먼저 출력해야 합니다.
# 쿠키 설정 예시
print("Set-Cookie: UserID=12345; path=/;")
print("Content-Type: text/html")
print()
print("<html><body>쿠키가 설정되었습니다.</body></html>")Python CGI에서 쿠키 읽기
브라우저가 저장한 쿠키는 요청 시 HTTP_COOKIE 환경 변수를 통해 전달됩니다. 파이썬의 http.cookies 모듈을 사용하면 이를 손쉽게 해석할 수 있습니다.
import os
from http import cookies
cookie = cookies.SimpleCookie()
if 'HTTP_COOKIE' in os.environ:
cookie.load(os.environ['HTTP_COOKIE'])
if 'UserID' in cookie:
print("저장된 사용자 ID:", cookie['UserID'].value)이처럼 쿠키는 무상태 프로토콜인 HTTP 환경에서 사용자 정보를 지속적으로 유지할 수 있게 해주는 핵심 도구입니다. 만료일, 도메인, 경로, 보안 옵션을 적절히 조합하면 더욱 안전하고 효율적인 세션 관리가 가능합니다.