본문 바로가기
전공과목/네트워크

[웹개발/네트워크] 쿠키(Cookie), 세션(Session), JWT 개념과 차이점 완전 정리

by 아임코딩 2026. 8. 19.
반응형

웹 개발과 네트워크 시험에서 "HTTP 프로토콜의 무상태성(Stateless)을 극복하고 사용자의 인증 상태를 유지하는 방법"을 물어볼 때 절대 빠지지 않는 개념들이 있습니다. 바로 쿠키(Cookie), 세션(Session), 토큰(JWT)입니다.

"로그인을 한 번 하면 어떻게 다른 페이지에서도 계속 로그인 상태가 유지될까?"

"서버의 부담을 줄이기 위해 세션 대신 JWT를 사용하는 이유는 무엇일까?"

HTTP의 기본 특성부터 쿠키/세션/JWT의 동작 원리, 장단점, 그리고 시험 단골 서술형/비교 문제의 핵심 포인트까지 깔끔하게 정리해 드립니다!

1. HTTP 프로토콜의 특성: 무상태(Stateless)와 비연결성(Connectionless)

웹 통신의 기반인 HTTP 프로토콜은 두 가지 핵심 특성을 가지고 있습니다.

  • 비연결성 (Connectionless): 클라이언트가 요청(Request)을 보내고 서버가 응답(Response)을 보내면 즉시 연결을 끊는 특성입니다.
  • 무상태성 (Stateless): 연결을 끊는 순간 클라이언트와 서버 간의 상태 정보(State)가 유지되지 않고 사라지는 특성입니다.

만약 상태를 유지하는 별도의 기술이 없다면, 로그인 후 마이페이지로 이동하거나 장바구니에 상품을 담을 때마다 매번 다시 로그인 요청을 보내야 합니다. 이러한 문제를 해결하기 위해 도입된 것이 쿠키, 세션, JWT입니다.

2. 쿠키(Cookie) vs 세션(Session) vs JWT 개념 비교

1️⃣ 쿠키 (Cookie)

  • 개념: 서버가 클라이언트(브라우저)로 보내는 작은 데이터 조각으로, 브라우저의 클라이언트 측에 Key-Value 상태로 저장됩니다.
  • 동작: 브라우저는 서버에 요청을 보낼 때마다 HTTP 헤더(Header)에 쿠키를 자동으로 담아서 전송합니다.
  • 단점: 클라이언트에 평문으로 저장되므로 보안에 매우 취약하며(XSS, CSRF 공격), 크기 제한(도메인당 4KB)이 있습니다.

2️⃣ 세션 (Session)

  • 개념: 쿠키의 보안 약점을 보안하기 위해 중요한 상태 정보(사용자 정보)를 서버 측(메모리, DB, Redis 등)에 저장하는 방식입니다.
  • 동작: 서버는 로그인 성공 시 세션 ID(Session ID)를 생성하여 클라이언트에게 쿠키로 전달하고, 클라이언트는 요청마다 이 세션 ID 쿠키를 함께 전송해 자신이 누구인지 인증합니다.
  • 장단점:
    • 장점: 중요한 정보가 서버에만 존재하므로 쿠키보다 보안성이 뛰어남.
    • 단점: 동접자가 많아질수록 서버 메모리 과부하가 발생하며, 서버를 여러 대 증설(Scale-Out)할 때 세션 동기화(Session Sharing) 이슈가 발생함.

3️⃣ JWT (JSON Web Token)

  • 개념: 인증에 필요한 정보들을 JSON 객체에 담은 후, 이를 암호화 서명(Signature)하여 클라이언트가 직접 소지하게 만드는 토큰(Token) 기반 인증 방식입니다.
  • 동작: 서버에 별도의 세션 저장소를 두지 않고(Stateless), 클라이언트가 전송한 JWT의 서명(Signature)을 서버의 비밀키로 검증하여 유효성을 판별합니다.

Header, Payload, Signature로 구성된 JWT(JSON Web Token)의 내부 구조. 출처: suyeonme - 티스토리

💡 JWT의 3가지 구성 요소

  1. Header (헤더): 토큰의 타입(JWT)과 암호화 알고리즘(HS256 등) 정보 포함.
  2. Payload (페이로드): 토큰에 담을 클라이언트의 실제 정보(Claim - 사용자 ID, 권한, 만료시간 등) 포함. (Base64 인코딩이므로 민감 정보 금지!)
  3. Signature (서명): Header + Payload + 서버의 Secret Key를 조합하여 암호화한 값으로, 토큰의 위·변조 여부를 검증하는 핵심 역할.

3. 한눈에 끝내는 핵심 요약표 (★시험 필수)

구분 쿠키 (Cookie) 세션 (Session) JWT (JSON Web Token)
저장 위치 클라이언트 (브라우저) 서버 (메모리, DB, Redis) 클라이언트 (LocalStorage/Cookie)
보안성 낮음 (탈취 및 변조 쉬움) 높음 (서버에 실체 정보 보관) 보통 (위변조 감지 가능, 탈취 시 만료 전까지 위험)
서버 부하 전혀 없음 (사용자 많을수록 부하 증가) 없음 (서버가 상태를 저장하지 않음)
확장성 높음 낮음 (세션 동기화 필요) 매우 높음 (Microservice/Scale-out 최적화)
주요 용도 팝업 '오늘 하루 보지 않기', 장바구니 로그인 유지 (보안 중심 웹 서비스) OAuth2.0, REST API, App 로그인

4. 시험 단골 출제 유형 체크

  1. Q. HTTP의 '무상태성(Stateless)'이란 무엇이며, 이를 극복하기 위해 등장한 대표적인 기법 3가지는?
  2. 👉 연결 후 상태 정보를 유지하지 않는 특성이며, 이를 보완하기 위해 쿠키, 세션, 토큰(JWT)을 사용합니다.
  3. Q. 세션 기반 인증과 비교했을 때 JWT 기반 인증이 다중 서버(Scale-Out) 환경이나 분산 시스템(MSA)에 더 유리한 이유는?
  4. 👉 세션과 달리 서버에 별도의 저장소나 상태를 유지할 필요가 없는 Stateless 구조이므로, 어떤 서버로 요청이 들어와도 토큰의 서명(Signature)만 검증하면 되기 때문입니다.
  5. Q. JWT의 구조 3가지 요소는 무엇인가?
  6. 👉 Header(헤더), Payload(페이로드), Signature(서명) 입니다.
반응형