✅ 쿠키? 세션? 토큰?

졸용·2025년 4월 2일

✅ 쿠키란?

  • ❗클라이언트(브라우저)에 저장되는 작은 데이터 조각❗

  • 주로 사용자 정보 저장, 세션 유지, 자동 로그인 등에 사용된다.

▻▻ 쿠키의 특징 ◅◅

  • HTTP 요청 시 자동으로 서버에 전송된다.

  • 클라이언트에서 조작이 가능하다 → 보안이 취약하다

  • 브라우저에 저장된다. → 용량 제한이 있다 (4KB 정도)

❌ 쿠키의 한계

  • 브라우저에서 직접 수정할 수 있어 보안 취약

  • 요청마다 포함되므로 네트워크 트래픽 증가 가능



✅ 세션이란?

  • ❗서버에 저장되는 사용자 정보❗

  • 쿠키는 클라이언트에 저장되지만, 세션은 서버에 저장된다.

  • 로그인 정보를 유지하거나 사용자 상태를 관리할 때 사용된다.

▻▻ 세션의 특징 ◅◅

  • 클라이언트는 세션 ID만 저장하고, 실제 데이터는 서버에서 관리

  • 데이터가 클라이언트에 저장되지 않는다 → 보안이 쿠키보다 강하다.

  • 많은 사용자가 접속하면 세션 저장 공간이 필요하다 → 서버에 부하가 발생할 수 있다

✔️ 세션의 동작 방식

  1. 클라이언트가 로그인하면 서버에서 세션을 생성하고 세션 ID를 발급

  2. 클라이언트는 session_id 를 쿠키로 저장

  3. 이후 요청에서 session_id 를 서버로 보내면 서버가 사용자 정보를 찾아서 인증

❌ 세션의 한계

  • 서버에서 관리하므로, 서버 부하가 발생할 수 있다.

  • 로드 밸런싱(여러 서버 사용) 시, 세션 동기화 문제가 발생할 수 있다.



✅ 토큰이란?

  • ❗인증 정보를 포함한 문자열(데이터)❗

  • Stateless → 쿠키/세션과 달리, 서버에서 상태를 저장하지 않는다.

  • 대표적인 토큰 : JWT (JSON Web Token)

▻▻ 토큰의 특징 ◅◅

  • 클라이언트가 토큰을 가지고 있으며, 서버는 토큰을 검증하기만 한다. → DB 조회 불필요

  • 자체적으로 정보를 포함하고 있어 Stateless → 서버 부담이 적다

  • 보안성이 높지만, 탈취되면 위험하다 → 추가적인 보호 장치 필요

✔️ 토큰의 구성 요소

  1. Header → 어떤 알고리즘을 사용하는지 (HS256 등)

  2. Payload → 실제 데이터 (사용자 ID, 권한 정보 등)

  3. Signature → 데이터 위변조 방지를 위한 서명

❌ 토큰의 한계

  • 한번 발급된 토큰은 수정할 수 없고, 만료될 때까지 유효하다.

  • 탈취될 경우 재발급이 필요 (쿠키와 세션은 서버에서 무효화 가능)

  • JWT는 데이터가 클 수 있어 요청 크기가 증가할 수 있다.



✅ 쿠키 vs 세션 vs 토큰

☑️ 사용 사례

  • 쿠키 → 자동 로그인, 사용자 설정

  • 세션 → 로그인 유지, 장바구니

  • 토큰 → REST API 인증, 모바일 로그인

☑️ 인증 방식

  • 쿠키 : 세션 ID 저장

  • 세션 : 서버에서 세션 관리

  • 토큰 : 토큰 자체로 인증 (JWT 등)


❓언제 사용해야 할까?

1️⃣ 세션 기반 인증 (쿠키 + 세션)

  • 로그인 후 세션을 서버에 저장하고, 세션 ID를 쿠키에 저장

  • ❌ 단점 : 서버 부하가 증가할 수 있다.

  • 사용 예 : 전통적인 웹 애플리케이션 (Spring MVC, JSP 등)

2️⃣ 토큰 기반 인증 (JWT)

  • 로그인 후 JWT 토큰을 생성하여 클라이언트에게 전달

  • 이후 요청 시 토큰을 HTTP Header에 포함하여 인증

  • ⭕ 장점 : 서버가 상태를 저장하지 않아 확장성 높다.

  • 사용 예: REST API, 마이크로서비스, 모바일 앱

➡️ 로그인 유지 가 목적일 때는 세션 + 쿠키

➡️ API 인증 (특히 RESTful API) 목적일 때는 JWT (토큰 기반 인증)

profile
꾸준한 공부만이 답이다

2개의 댓글

comment-user-thumbnail
2025년 4월 2일

오... 링크인줄 알았는데 착한사람만 보이는 글이었군요.. 더 착해지도록 노력하겠습니다

1개의 답글