❗클라이언트(브라우저)에 저장되는 작은 데이터 조각❗
주로 사용자 정보 저장, 세션 유지, 자동 로그인 등에 사용된다.
HTTP 요청 시 자동으로 서버에 전송된다.
클라이언트에서 조작이 가능하다 → 보안이 취약하다
브라우저에 저장된다. → 용량 제한이 있다 (4KB 정도)
브라우저에서 직접 수정할 수 있어 보안 취약
요청마다 포함되므로 네트워크 트래픽 증가 가능
❗서버에 저장되는 사용자 정보❗
쿠키는 클라이언트에 저장되지만, 세션은 서버에 저장된다.
로그인 정보를 유지하거나 사용자 상태를 관리할 때 사용된다.
클라이언트는 세션 ID만 저장하고, 실제 데이터는 서버에서 관리
데이터가 클라이언트에 저장되지 않는다 → 보안이 쿠키보다 강하다.
많은 사용자가 접속하면 세션 저장 공간이 필요하다 → 서버에 부하가 발생할 수 있다
클라이언트가 로그인하면 서버에서 세션을 생성하고 세션 ID를 발급
클라이언트는 session_id 를 쿠키로 저장
이후 요청에서 session_id 를 서버로 보내면 서버가 사용자 정보를 찾아서 인증
서버에서 관리하므로, 서버 부하가 발생할 수 있다.
로드 밸런싱(여러 서버 사용) 시, 세션 동기화 문제가 발생할 수 있다.
❗인증 정보를 포함한 문자열(데이터)❗
Stateless → 쿠키/세션과 달리, 서버에서 상태를 저장하지 않는다.
대표적인 토큰 : JWT (JSON Web Token)
클라이언트가 토큰을 가지고 있으며, 서버는 토큰을 검증하기만 한다. → DB 조회 불필요
자체적으로 정보를 포함하고 있어 Stateless → 서버 부담이 적다
보안성이 높지만, 탈취되면 위험하다 → 추가적인 보호 장치 필요
Header → 어떤 알고리즘을 사용하는지 (HS256 등)
Payload → 실제 데이터 (사용자 ID, 권한 정보 등)
Signature → 데이터 위변조 방지를 위한 서명
한번 발급된 토큰은 수정할 수 없고, 만료될 때까지 유효하다.
탈취될 경우 재발급이 필요 (쿠키와 세션은 서버에서 무효화 가능)
JWT는 데이터가 클 수 있어 요청 크기가 증가할 수 있다.
![]() |
|---|
☑️ 사용 사례
쿠키 → 자동 로그인, 사용자 설정
세션 → 로그인 유지, 장바구니
토큰 → REST API 인증, 모바일 로그인
☑️ 인증 방식
쿠키 : 세션 ID 저장
세션 : 서버에서 세션 관리
토큰 : 토큰 자체로 인증 (JWT 등)
![]() |
|---|
1️⃣ 세션 기반 인증 (쿠키 + 세션)
로그인 후 세션을 서버에 저장하고, 세션 ID를 쿠키에 저장
❌ 단점 : 서버 부하가 증가할 수 있다.
사용 예 : 전통적인 웹 애플리케이션 (Spring MVC, JSP 등)
2️⃣ 토큰 기반 인증 (JWT)
로그인 후 JWT 토큰을 생성하여 클라이언트에게 전달
이후 요청 시 토큰을 HTTP Header에 포함하여 인증
⭕ 장점 : 서버가 상태를 저장하지 않아 확장성 높다.
사용 예: REST API, 마이크로서비스, 모바일 앱
➡️ 로그인 유지 가 목적일 때는 세션 + 쿠키
➡️ API 인증 (특히 RESTful API) 목적일 때는 JWT (토큰 기반 인증)
오... 링크인줄 알았는데 착한사람만 보이는 글이었군요.. 더 착해지도록 노력하겠습니다