본문 바로가기
네트워크2

쿠키(Cookie) 와 세션(Sessoion)

by 로맨틱스터디 2025. 10. 7.
728x90
반응형

쿠키는 로그인 유지뿐만 아니라 브라우저와 서버가 상호작용하는 거의 모든 상태 정보를 저장하는 수단이라서,

사이트에 따라 “쿠키 없이 접속 불가”인 경우도 있어요. 하나씩 설명할게요.


1️⃣ 쿠키의 본질

  • 쿠키 = 서버가 클라이언트(브라우저)에 저장하도록 보내는 작은 데이터 조각
  • 브라우저는 이후 같은 도메인 요청 시 이 데이터를 서버로 자동 전송
  • 서버는 이 데이터를 이용해 사용자 상태, 세션, 환경 정보 등을 확인

2️⃣ 로그인 쿠키 외 쿠키 정보 종류

종류 설명 예시
세션/인증 정보 로그인 상태 유지, 세션 식별 sessionid=abc123, JWT
CSRF/보안 토큰 폼 제출 시 위조 요청 방지 csrf_token=xyz
사용자 환경/설정 테마, 언어, 화면 모드 theme=dark, lang=ko
장바구니/임시 데이터 쇼핑몰 등에서 구매 진행 상태 cart=xyz
추적/광고 목적 사용 행동 분석, 광고 타겟팅 tracking_id=abcd123
기능 관련 팝업 표시 여부, 알림 상태 popup_seen=true

요약: 쿠키는 로그인 유지뿐만 아니라 사이트가 사용자 맞춤 환경과 상태를 기억하는 용도로도 필수적입니다.

 


3️⃣ “쿠키 수락 안 하면 접속 불가” 이유

  1. 세션 관리 필수
    • 서버가 사용자별 상태를 식별할 수 없으면 페이지 제공 불가
    • 로그인, 장바구니, 맞춤형 콘텐츠 등 모든 기능이 세션 기반
  2. 보안 이유
    • CSRF 방지, 악성 요청 탐지, 사용자 인증 토큰 필요
    • 쿠키 없으면 서버가 요청의 정당성을 확인할 수 없음
  3. 기능 제한
    • 일부 사이트는 쿠키 없으면 “기능 비활성화” 또는 “접속 불가” 경고
    • 예: 은행, 쇼핑몰, 티켓팅 사이트 등

4️⃣ 요약

  • 쿠키는 단순 로그인 유지용이 아니라 브라우저-서버 상태 저장, 보안, 환경 설정, 기능 관리 등 다양한 목적으로 사용
  • 쿠키를 거부하면 서버가 사용자를 식별하거나 상태를 관리할 수 없기 때문에 접속이 제한될 수 있음
728x90

 


 

1️⃣ CSRF/보안 토큰과 세션 쿠키

  • CSRF 토큰 = 서버가 발급하는 랜덤 문자열
    • 목적: 폼 제출 등 요청이 정상 사용자로부터 온 것인지 확인
    • 브라우저가 서버에 전송해야만 요청이 처리됨
  • 세션 쿠키(RAM 저장)
    • 서버가 사용자별 세션을 식별하기 위해 발급
    • CSRF 토큰과 연결 → 서버는 세션 ID를 통해 “이 토큰은 이 사용자에게 유효” 판단
  • 대부분 세션 쿠키에 포함되어 RAM에 저장
    • 브라우저 종료 시 사라짐 → 세션 종료 = 토큰 무효

2️⃣ CSRF 토큰 갱신

  • 브라우저가 새로 페이지를 열거나 새로고침할 때 서버는 새 CSRF 토큰 발급
    • 이전 토큰은 만료
    • 서버가 “한 세션에서 하나의 유효 토큰만 허용” 방식인 경우, 오래된 토큰 제출 시 거부 → 오류
  • 요약 흐름:
브라우저 접속 → 서버 세션 생성 → 세션 쿠키 발급 → CSRF 토큰 발급 → 브라우저 제출 → 서버 검증
  • 브라우저 종료 → 세션 쿠키 소멸 → CSRF 토큰 유효하지 않음
  • 재접속 시 새 세션 + 새 CSRF 토큰 발급

3️⃣ 핵심 포인트

  1. CSRF 토큰은 서버가 발급하는 랜덤값
  2. 세션 쿠키(RAM)에 저장) → 브라우저 종료 시 소멸
  3. 새로고침/재접속 시 새로운 토큰 발급
  4. 오래된 토큰 제출 시 서버 검증 실패 → 오류

 

세션(Session)은 웹과 서버에서 매우 핵심적인 개념이라 천천히 풀어드릴게요. 😄


1️⃣ 세션(Session)이란?

  • 세션 = 서버가 “한 사용자의 활동 단위”를 기억하기 위해 만든 임시 상태 저장 공간
  • HTTP는 원래 상태 없는(stateless) 프로토콜이기 때문에,
    • 요청 → 응답 → 종료
    • 서버는 이전 요청을 기억하지 못함
  • 세션은 서버가 사용자별 상태를 유지할 수 있도록 만드는 장치입니다.

2️⃣ 세션의 기본 원리

  1. 사용자가 사이트 접속 → 로그인 등 행동 시작
  2. 서버가 세션 생성고유 ID 발급
    session_id = 123abc
  3. 서버가 브라우저에 세션 ID를 쿠키로 전달
    Set-Cookie: sessionid=123abc; HttpOnly; Path=/
  4. 브라우저는 이후 요청 시 자동으로 세션 쿠키 포함 → 서버는 사용자 식별 가능
  5. 서버는 세션 ID를 키로 사용하여 사용자 상태 저장
    • 로그인 여부
    • 장바구니 내용
    • 대기열 번호
    • CSRF 토큰

3️⃣ 세션 vs 쿠키


항목 세션 쿠키
저장 위치 서버(주로 메모리, DB) 클라이언트 브라우저 (RAM 또는 디스크)
목적 사용자 상태 관리 브라우저-서버 간 정보 전달
유효 기간 브라우저 종료 또는 만료 시간 세션 쿠키: 브라우저 종료 / 영속 쿠키: 만료일 설정
  • 세션 자체는 서버에 저장
  • 세션 ID만 쿠키로 브라우저에 전달 → 브라우저가 서버에 자기 신분을 알리는 역할

4️⃣ 세션 활용 예시

  • 로그인 유지: 브라우저 닫았다가 다시 접속하면 새 세션 → 로그인 필요
  • 장바구니: 서버가 “이 사용자는 어떤 상품 담았는지” 기억
  • 티켓팅 대기열: 서버가 “이 사용자는 몇 번째 순서인지” 기억
  • CSRF 토큰 관리: 서버가 “이 토큰은 세션 소유자에게만 유효”라고 판단

5️⃣ 핵심 요약

  • 세션 = 서버가 사용자를 식별하고 상태를 유지하기 위해 만든 임시 공간
  • 브라우저에는 세션 ID 쿠키만 저장
  • 세션 덕분에 HTTP처럼 상태 없는 프로토콜에서도 로그인, 장바구니, 대기열 등 상태 유지 가능

 

HTTP가 왜 상태가 없는(stateless) 프로토콜인지, 그리고 상태가 있는 프로토콜과의 차이를 자세히 설명할게요. 😄


1️⃣ 상태 없는 프로토콜이란?

  • 상태가 없다(stateless) = 서버가 이전 요청에 대한 정보를 기억하지 않는다는 뜻
  • HTTP 요청-응답 흐름:
클라이언트 → 서버 : 요청 1
서버 → 클라이언트 : 응답 1
클라이언트 → 서버 : 요청 2
서버 → 클라이언트 : 응답 2
  • 서버는 요청 2가 요청 1과 같은 사용자가 보낸 것인지 모름
  • 요청 간 연속성이 없기 때문에 로그인, 장바구니, 대기열 같은 상태 정보를 따로 관리해야 함

2️⃣ HTTP가 상태 없는 이유

  1. 단순성
    • 서버가 요청 간 상태를 기억하지 않아도 되므로 구현이 단순
  2. 확장성
    • 수많은 사용자가 동시에 접속해도 서버가 상태를 유지할 필요 없음
    • 부하 분산이 쉬움
  3. 독립적 요청 처리
    • 각 요청이 독립적캐시, 프록시 등 중간 장치 활용 가능

3️⃣ 상태 있는 프로토콜(Stateful Protocol)이란?

  • 상태가 있다(stateful) = 서버가 클라이언트와의 세션 정보를 유지
  • 예시:
    • FTP(File Transfer Protocol)
      • 로그인 후 연결 유지 → 여러 명령 수행 가능
    • Telnet, SSH
      • 연결 후 지속적으로 상태 유지, 사용자가 입력한 명령서버 상태 기억
    • TCP 연결(전송 계층)
      • 연결을 열고 닫을 때까지 상태 유지, 패킷 순서재전송 관리
  • 특징:
    • 연결이 유지되는 동안 서버가 클라이언트 상태를 기억
    • 연결 종료 시 상태 소멸

4️⃣ HTTP에서 상태 유지 방법

  • HTTP 자체는 stateless → 상태를 유지하려면 별도의 장치 필요:
  1. 쿠키(Cookie)
    • 브라우저세션 ID 저장 → 서버가 사용자 상태 관리 가능
  2. 세션(Session)
    • 서버가 사용자 상태를 RAM/DB에 저장 → 쿠키로 식별
  3. 토큰(Token)
    • JWT 등 클라이언트가 요청마다 보내는 인증 정보

요약: HTTP 자체는 상태 없음 → 로그인, 장바구니, 티켓팅 대기열 등은 쿠키+세션+토큰으로 상태 유지


정리하면:

  • HTTP = Stateless → 서버가 요청 간 상태 기억 X
  • FTP, SSH, TCP = Stateful → 서버가 연결 동안 상태 기억
  • 상태 없는 HTTP에서 상태를 유지하려면 세션, 쿠키, 토큰 같은 장치가 필요

1️⃣ 토큰(Token) 의미

  • 토큰 = 서버가 클라이언트를 식별하고 요청 권한을 확인하기 위해 발급한 값
  • 주로 랜덤 문자열이나 암호화된 문자열 형태(JWT 등)
  • 서버가 “이 요청을 보내는 클라이언트인증된 사용자”라고 확인할 수 있는 증명서 같은 것

2️⃣ 클라이언트가 요청마다 토큰을 보내는 이유

HTTP는 상태 없는 프로토콜이므로, 서버이전 요청을 기억하지 못함.

  • 예: 로그인 후 브라우저를 닫았다가 새로 접속 → 서버는 이 사용자가 누구인지 모름
  • 따라서 클라이언트가 매번 자신의 신분을 서버에 증명해야 → 토큰 사용

예시

  1. 로그인 성공 시 서버가 -> 클라이언트에 토큰 발급:
Authorization: Bearer abc123xyz
 
   2. 클라이언트 -> 서버에 요청할 때마다 헤더에 토큰 포함:
GET /ticket HTTP/1.1
Host: ticket.example.com
Authorization: Bearer abc123xyz

   3. 서버는 토큰 검증 → “이 요청은 인증된 사용자로부터 왔다” 판단 → 요청 처리


3️⃣ 토큰 사용 특징

특징 설명
Stateless 서버가 요청마다 토큰만 확인하면 세션을 따로 저장하지 않아도
인증/권한 토큰으로 사용자 권한 확인 가능
만료 시간 토큰마다 유효기간 설정 가능 → 만료되면 재발급 필요

요약: 클라이언트는 요청마다 토큰을 보내야 서버가 “누구인지” 확인 가능
상태 없는 HTTP에서 사용자를 식별하는 표준 방식입니다.

 


 

브라우저-서버 세션 유지의 핵심이에요. 😄


1️⃣ 서버 → 클라이언트: 쿠키 발급

  • 서버가 HTTP 응답 헤더로 쿠키를 보냄:
HTTP/1.1 200 OK
Set-Cookie: 
	sessionid=abc123; 
	HttpOnly; Path=/; Secure; SameSite=Lax
  • 여기서:
    • sessionid=abc123세션 ID
    • HttpOnly, Path, Secure, SameSite → 브라우저가 쿠키를 다루는 규칙

이 단계에서 쿠키는 브라우저에 저장됨 (RAM: 세션 쿠키 / 디스크: 영속 쿠키)


2️⃣ 클라이언트 → 서버: 쿠키 전송

  • 브라우저가 같은 도메인 요청을 할 때, 저장된 쿠키를 자동으로 요청 헤더에 포함
  • 요청 헤더 이름: Cookie

예시:

 
GET /ticket HTTP/1.1
Host: ticket.example.com
Cookie: sessionid=abc123
  • 여러 개의 쿠키가 있다면, ;로 구분:
Cookie: 
	sessionid=abc123; 
	csrftoken=xyz987; 
	theme=dark

3️⃣ 요약

단계 헤더 내용
서버 → 클라이언트 Set-Cookie 브라우저에 쿠키 저장 지시
클라이언트 → 서버 Cookie 브라우저가 저장한 쿠키 값 전송 / 서버가 세션 식별
  • 즉, 요청 헤더에는 Cookie라는 이름으로 저장된 쿠키 값이 포함됩니다.
  • 서버는 이 쿠키를 보고 누구인지, 세션이 유효한지, 토큰이 맞는지 판단할 수 있어요.

 


 

1️⃣ RAM과 디스크 = PC 하드웨어

RAM과 디스크(SSD/HDD)는 PC 하드웨어 장치입니다.

  • RAM휘발성 메모리, 전원 끄면 내용 사라짐
  • 디스크(SSD/HDD)비휘발성 저장, 브라우저 종료 후에도 데이터 유지 가능

2️⃣ 브라우저가 쿠키를 저장한다는 의미

  • 브라우저는 PC의 RAM과 디스크를 이용해 쿠키를 관리합니다.
  • 즉 “브라우저에 저장된다” = 브라우저가 하드웨어 저장 장치(RAM/디스크)에서 쿠키를 읽고 쓰는 방식
  • 브라우저가 쿠키를 네트워크 내부에 저장하는 것이 아니라, PC 내부 저장소를 사용하는 것

예시

  1. 세션 쿠키 (RAM)
    • 브라우저 실행 중RAM에 저장 → 브라우저 종료 시 사라짐
  2. 영속 쿠키 (디스크)
    • 브라우저 프로필 폴더(SQLite DB 등)에 저장 → 브라우저 종료 후에도 유지

요약: 브라우저가 쿠키를 관리하지만, 실제로는 PC 하드웨어(RAM/디스크)에 저장되는 것

 


3️⃣ 왜 브라우저가 필요한가?

  • 쿠키는 단순히 네트워크에 있는 정보가 아니라, 브라우저가 요청/응답 시 관리하는 상태 정보
  • 브라우저는 쿠키 저장, 전송, SameSite/HttpOnly/Secure 규칙 적용, 요청 시 자동 헤더 추가 등을 실행 환경으로 제공
  • 따라서 “브라우저에 저장된다” =
    • 브라우저가 RAM/디스크를 이용해 쿠키 데이터를 관리
    • 요청 시 자동으로 서버로 전송하고, 보안 규칙 적용

4️⃣ 정리

개념 위치/저장
쿠키 브라우저가 관리
세션 쿠키 브라우저 RAM (휘발성)
영속 쿠키 브라우저 프로필 폴더(디스크/SSD/HDD)
브라우저 쿠키 읽기/쓰기, 요청 시 Cookie 헤더에 포함
  • 즉, 브라우저는 쿠키를 저장하고 활용하는 매니저이고, 실제 데이터는 PC 하드웨어(RAM/디스크)에 존재

 

사실 교과서나 설명 글에서 흔히 “쿠키는 브라우저에 저장된다”라고 하는 건 짧고 단순하게 표현하기 위해 쓰는 말이에요.

좀 더 정확히 풀면 이렇게 말하는 게 맞습니다:


✅ 정밀한 표현

  • 쿠키는 실제로는 PC 내부 저장소(RAM 또는 디스크)에 저장된다.
  • 다만 사용자가 직접 관리하지 않고, 브라우저가 이 저장소에 쿠키를 기록·조회·삭제·갱신하는 일을 대신한다.
  • 브라우저는 쿠키 매니저 역할:
    • 규칙 적용 (Path, Domain, Secure, SameSite, HttpOnly 등)
    • 요청할 때 자동으로 Cookie 헤더에 넣어 전송
    • 응답의 Set-Cookie 헤더 해석 후 저장

✅ 왜 “브라우저에 저장된다”라고도 표현하나?

  • 일반 사용자는 “RAM/디스크” 같은 하드웨어 단위를 구분하기 어렵기 때문에
  • 실무자나 기술문서에서는 **“브라우저 쿠키” = “브라우저가 관리하는 쿠키”**라는 의미로 축약해서 표현

✅ 요약 비유

  • PC 저장소(RAM/디스크) → 쿠키의 실제 보관 창고
  • 브라우저창고 관리자 (쿠키를 넣고, 꺼내고, 정리하고, 규칙 적용해서 서버로 전달)
  • “쿠키가 브라우저에 저장된다”는 건 사실 “브라우저가 PC 저장소에 쿠키를 저장하고 관리한다”는 뜻

👉 그러니까 말씀하신 대로 더 엄밀하게 표현하면:
쿠키는 PC의 저장소(RAM/디스크)에 저장되고, 브라우저는 이를 관리하며 서버와 통신할 때 자동으로 전송해주는 역할을 한다

728x90
반응형