📘 마무리 요약 정리
1️⃣ 🍪 Cookie (쿠키)
| 항목 | 설명 |
|---|---|
| 💾 저장 위치 | 웹 브라우저(클라이언트)에 저장 |
| 🎯 목적 | 클라이언트의 상태를 기억하여 로그인 유지, 방문 기록 저장 등 |
| ⚠️ 보안 취약 | 사용자가 직접 수정할 수 있고, 탈취 가능성 있음 |
| ❗ 주의 사항 | 민감한 정보 저장 금지 (주민번호, 비밀번호 등) |
| 📤 전송 방식 | 브라우저가 모든 요청에 자동으로 Cookie 포함 |
✅ 간편하지만 보안상 위험이 있어 중요한 정보는 저장 금지
2️⃣ 🗂️ Session (세션)
| 항목 | 설명 |
|---|---|
| 💾 저장 위치 | 서버에서 사용자의 로그인 정보 및 상태 저장 |
| 🔐 보안성 | 클라이언트는 SessionId만 저장 → 민감 정보는 서버에만 존재 |
| ⏳ 만료 설정 | HttpSession은 최근 요청 시간 기준으로 30분 유효 |
| 🔑 탈취 대응 | 탈취돼도 유저 정보 노출 없음, Session 무효화로 차단 가능 |
✅ 쿠키보다 안전하며, 서버가 상태를 직접 관리하는 방식
3️⃣ 🔐 Token (토큰)
| 항목 | 설명 |
|---|---|
| 📜 정의 | 인증/인가를 위해 사용되는 디지털 문자열 |
| 📦 저장 위치 | 클라이언트(LocalStorage 등)가 직접 보관 |
| ⚙️ 특징 | 서버는 상태 저장 안 함 → Stateless 인증 |
| 📱 환경 호환성 | 모바일 앱, API 등에서 쿠키 없이 인증 가능 |
| 🔓 보안 고려 | Payload는 암호화되지 않음 → 민감 정보 저장 금지 |
| ⏳ 만료 시간 설정 | 탈취에 대비해 Access Token은 짧게, Refresh Token은 길게 설정 |
✅ 서버 확장성(Scale-out)에 유리하지만 탈취 시 위험
4️⃣ 🧾 JWT (JSON Web Token)
| 항목 | 설명 |
|---|---|
| 🧱 구성 | Header.Payload.Signature 형태의 문자열 |
🔏 Signature | 서버의 SecretKey로 생성된 서명을 통해 위조 방지 |
🔓 Payload | Base64 인코딩 → 복호화 가능 / 민감 정보 저장 ❌ |
| 💡 목적 | 정보 보호가 아닌 위조 방지 |
| 🚫 저장소 불필요 | 자체적으로 필요한 정보(Claims)를 가지고 있어 DB 조회 없이 인증 가능 |
✅ 인증 정보를 포함한 자체 검증 가능한 토큰
❗ 단, 만료 관리와 Refresh 전략이 꼭 필요함
5️⃣ 🧹 Filter (필터)
| 항목 | 설명 |
|---|---|
| 🎯 역할 | 모든 요청이 Servlet이나 Controller로 들어가기 전 공통 로직 처리 |
| 🔒 인증 필터 | 로그인 여부 확인, 권한 체크 등 보안 처리 |
| 🧩 공통 관심사 처리 | 중복되는 로직을 하나의 입구에서 처리 → 코드 간결화 |
| ⛓️ Filter Chain | 여러 필터를 순서대로 실행 가능 (doFilter() 호출로 제어) |
| 🧠 구현 방식 | Filter Interface를 구현하고,Spring에서는 FilterRegistrationBean으로 등록 |
✅ 인증, 인코딩, 로깅 등 HTTP 요청 전처리에 최적화된 구조
🎯 전체 한줄 요약
Cookie 🍪: 클라이언트 저장, 가볍지만 보안 취약
Session 🗂️: 서버 저장, 안전하지만 자원 부담
Token 🔐: 클라이언트가 보관하는 인증 문자열 (Stateless)
JWT 🧾: 서명 기반 위조 방지용 JSON 토큰
Filter 🧹: 요청 전에 공통 로직(인증 등)을 처리하는 사전 필터