반응형
💡 "로그인했는데, 어떻게 내가 나인지 기억하는 거야?"
웹사이트에 로그인했더니
"오늘도 로그인 안 풀리고 잘 유지되네?"
그런데 로그인 유지하는 방법은 여러 가지가 있어요.
- 세션(Session)
- 쿠키(Cookie)
- JWT (JSON Web Token)
이 세 가지가 왜 다른지, 어떻게 쓰는지
오늘 깔끔하게 정리해드릴게요! 😊
🧾 쿠키(Cookie)란?
쿠키는
브라우저에 저장되는 작은 데이터 파일입니다.
📦 특징:
- 클라이언트(브라우저)가 보관
- 매번 요청할 때 자동으로 같이 전송
- Set-Cookie 헤더로 서버가 설정
예시:
Set-Cookie: session_id=abcd1234; HttpOnly;
✅ 주로 세션 ID 저장 용도로 사용!
🛡️ 세션(Session)이란?
세션은
서버가 사용자 정보를 서버 메모리나 DB에 저장하고
클라이언트는 세션 ID만 쿠키에 보관하는 방식입니다.
흐름:
- 로그인 성공 → 서버가 세션 생성 → 세션 ID 발급
- 세션 ID를 쿠키에 저장
- 다음 요청마다 쿠키로 세션 ID 자동 전송
- 서버가 세션 ID 보고 → 사용자 정보 확인
✅ 민감한 정보는 서버가 보관 → 상대적으로 안전
🔑 JWT(JSON Web Token)란?
JWT는
"사용자 정보를 토큰 안에 암호화해서 직접 넣어둔 것"입니다.
- 토큰 자체가 사용자 인증 정보
- 서버는 세션을 따로 저장 안 해도 됨 (Stateless)
- Base64로 인코딩된 헤더.페이로드.서명 구조
JWT 예시:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
✅ 서버가 상태를 기억하지 않아도 → 클라이언트가 토큰을 보내서 인증!
🆚 세션 + 쿠키 vs JWT 비교표
항목 | 세션 + 쿠키 | JWT |
데이터 저장 위치 | 서버(세션 저장소) | 클라이언트(토큰) |
서버 상태 기억 | O (Stateful) | X (Stateless) |
정보 저장 방식 | 세션 ID만 저장 | 유저 정보 자체 저장 (Payload) |
보안 위험 | 세션 탈취 가능성 | 토큰 탈취 시 위험 (만료, 재발급 필요) |
확장성 | 서버 부하 증가 (세션 관리 필요) | 서버 부하 적음 (토큰만 검증) |
모바일/다중 디바이스 | JWT가 유리 | 세션은 디바이스마다 따로 관리 |
⚠️ 실무에서 언제 뭘 써야 할까?
상황 | 추천 방식 |
웹 + 서버만 있는 단순 로그인 | 세션 + 쿠키 (쉽고 안전) |
모바일 앱 + 서버 + 다중 디바이스 | JWT (확장성 좋음) |
민감한 데이터 (은행 등) | 세션 + 쿠키 (서버 보관이 더 안전) |
대규모 서비스 + 마이크로서비스 | JWT (Stateless가 유리) |
🧩 헷갈리기 쉬운 질문 Q&A
Q. 쿠키랑 세션이 같은 거야?
→ ❌ 쿠키는 브라우저에 저장되는 데이터고,
→ 세션은 서버가 기억하는 공간입니다.
(세션 ID를 쿠키에 저장하는 경우가 많음!)
Q. JWT도 쿠키에 저장할 수 있어?
→ ✅ 네, JWT를 쿠키에 저장해도 되고,
→ 로컬스토리지, 세션스토리지에도 저장 가능.
(권장: HttpOnly 쿠키 → XSS 방어 가능)
🧠 정리 한마디!
구분 | 쿠키 | 세션 | JWT |
저장 위치 | 브라우저 | 서버 | 클라이언트 |
역할 | 정보 저장 | 사용자 상태 기억 | 사용자 인증 정보 포함 |
서버 상태 기억 | X | O | X |
확장성 | 보통 | 낮음 | 높음 |
"세션 + 쿠키 = 전통적인 로그인 방식"
"JWT = 토큰 기반, 모바일/대규모 서비스에 유리"
📌 다음 예고: "Proxy와 Reverse Proxy, 헷갈리는 프록시 개념 쉽게 이해하기!"
- 프록시랑 리버스 프록시, 왜 이름이 이렇게 헷갈려?
- 각각 어디서 쓰는 건지 딱 정리해드립니다!
✅ 관련 태그
#세션과쿠키 #JWT란 #로그인유지원리 #인증방식비교 #웹개발기초
반응형
'개발 공부 > 서버' 카테고리의 다른 글
[서버 기초] 환경변수(.env)는 왜 쓰는 거야? (0) | 2025.05.12 |
---|---|
[서버 기초] Proxy와 Reverse Proxy, 헷갈리는 프록시 개념 쉽게 이해하기! (0) | 2025.05.02 |
[서버 기초] PUT과 PATCH 차이, 수정인데 뭐가 다르지? (0) | 2025.04.30 |
[서버 기초] HTTP 상태 코드 200, 404, 500… 에러코드 총정리! (0) | 2025.04.29 |
[서버 기초] GET과 POST 비교, 도대체 뭐가 다른 거야? (0) | 2025.04.28 |