🔒 Session이란?
- 서버가 직접 로그인 상태와 관련된 정보를 저장하고 관리하는 방법
❓ 왜 Session이 필요할까?
✅ 해결책:
🔒 쿠키와 세션 비교
| 항목 | 쿠키 방식 | 세션 방식 |
|---|---|---|
| 🔐 사용자 정보 저장 위치 | 클라이언트 | 서버 (보안↑) |
| 🧾 브라우저에 저장되는 정보 | 사용자 ID, 이름 등 | Session ID (랜덤) |
| ⚠️ 위험성 | 조작/탈취 위험 | 조작해도 정보 없음 |
🧩 Session 생성 순서

1️⃣ 로그인 성공
Session ID 생성Session ID는 예측이 불가능해야 함UUID와 같은 값을 활용(예: a9c8x2e1-...)2️⃣ Session ID와 사용자 정보를 서버에 저장
Session ID → User 매핑🔁 Session 동작 순서
1️⃣ 로그인 성공 시

UUID)SessionId → 로그인한 사용자 정보
Set-Cookie: JSESSIONID=xyz123 전달2️⃣ 로그인 이후 요청 시

JSESSIONID를 자동 전송Cookie: JSESSIONID=xyz123
🛠️ Servlet의 HttpSession
📦 HttpSession 사용법
HttpSession session = request.getSession(); // 기본값 true
session.setAttribute("loginUser", userDto);
→ 이미 세션이 있으면 가져오고, 없으면 새로 생성
HttpSession session = request.getSession(false); // 생성 X
→ 세션이 있을 때만 가져옴 (비로그인 사용자 처리 시 사용)
❌ 로그아웃 처리
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate(); // 세션 삭제
}
✅ 코드 흐름 요약
| 컨트롤러 | 기능 |
|---|---|
| SessionUserController | 로그인 처리 & 세션 저장 / 로그아웃 처리 |
| SessionHomeController | 세션 유무 확인 후 home 페이지 접근 제어 |
🖼️ 동작 예시
/session-login에서 로그인 성공
→ 세션 생성 + 사용자 정보 저장
→ JSESSIONID 쿠키 자동 전송
/session-home 접속 시
→ 세션에서 사용자 정보 조회
→ 로그인 상태 유지됨
/session-logout 클릭 시
→ 세션 제거 → 자동 로그아웃
🎯 Session의 특징
| 항목 | 설명 |
|---|---|
| 🔒 보안 우수 | 민감 정보는 모두 서버가 관리 |
| 🎯 식별용 Cookie만 사용 | 클라이언트에는 JSESSIONID만 전달 |
| ⏳ 만료 가능 | 일정 시간 지나면 세션 자동 만료 |
| 🧹 서버 메모리 사용 | 세션이 많아지면 리소스 사용량 증가 가능 |
| 📦 Spring + Servlet 지원 | HttpSession 기본 제공됨 |
🔐 보안 관점에서 비교
| 항목 | Cookie 기반 로그인 | Session 기반 로그인 |
|---|---|---|
| 저장 위치 | 클라이언트 (위험) | 서버 (안전) |
| 조작 가능성 | 높음 | 낮음 |
| 정보 유출 가능성 | 높음 | 낮음 |
| 인증 방법 | 쿠키 값 직접 사용 | 세션 ID로 서버 조회 |
| HTTPS 필요성 | 매우 높음 | 높음 (추가 보안용) |
🧠 요약 정리
세션은 사용자 정보를 클라이언트가 아닌 서버에서 관리하는 방식
클라이언트는 단지 Session ID(랜덤한 키)만 들고 있음
Session은 보안성이 높고, 서버 메모리를 사용하므로 관리가 필요함