[Spring] Session (1)

이연우·2025년 7월 28일

TIL

목록 보기
57/100

🔒 Session이란?

  • 서버가 직접 로그인 상태와 관련된 정보를 저장하고 관리하는 방법

❓ 왜 Session이 필요할까?

  • 쿠키에 중요한 정보를 저장하는 방식은 보안에 매우 취약
    • 쿠키는 클라이언트(브라우저)에 저장되고 누구나 접근 가능
    • 쿠키 값이 조작되거나 탈취되면 다른 사람의 권한으로 접근 가능

✅ 해결책:

  • 서버에서 중요한 정보를 저장하고,
    클라이언트는 단지 '열쇠'만 들고 있게 하는 방식
    = Session

🔒 쿠키와 세션 비교

항목쿠키 방식세션 방식
🔐 사용자 정보 저장 위치클라이언트서버 (보안↑)
🧾 브라우저에 저장되는 정보사용자 ID, 이름 등Session ID (랜덤)
⚠️ 위험성조작/탈취 위험조작해도 정보 없음

🧩 Session 생성 순서

1️⃣ 로그인 성공

  • Server에서 임의로 만든 Session ID 생성
    • Session ID예측이 불가능해야 함
    • UUID와 같은 값을 활용(예: a9c8x2e1-...)

2️⃣ Session ID와 사용자 정보를 서버에 저장

  • 서버에 유저와 관련된 중요한 정보를 저장
  • 세션 저장소에 Session ID → User 매핑

🔁 Session 동작 순서

1️⃣ 로그인 성공 시

  • 서버가 예측 불가능한 Session ID 생성 (ex. UUID)
  • 서버의 메모리에 아래의 정보 저장
SessionId → 로그인한 사용자 정보
  • 클라이언트에게는 Set-Cookie: JSESSIONID=xyz123 전달
    → 클라이언트는 브라우저에 저장
  • Sessions을 사용하면 유저와 관련된 정보는 클라이언트에 없음

2️⃣ 로그인 이후 요청 시

  • 클라이언트는 요청마다 쿠키에 저장된 JSESSIONID를 자동 전송
Cookie: JSESSIONID=xyz123
  • 서버는 해당 ID로 세션 저장소를 조회해서 로그인 정보 확인

🛠️ 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 페이지 접근 제어

🖼️ 동작 예시

  1. /session-login에서 로그인 성공
    → 세션 생성 + 사용자 정보 저장
    JSESSIONID 쿠키 자동 전송

  2. /session-home 접속 시
    → 세션에서 사용자 정보 조회
    → 로그인 상태 유지됨

  3. /session-logout 클릭 시
    → 세션 제거 → 자동 로그아웃


🎯 Session의 특징

항목설명
🔒 보안 우수민감 정보는 모두 서버가 관리
🎯 식별용 Cookie만 사용클라이언트에는 JSESSIONID만 전달
만료 가능일정 시간 지나면 세션 자동 만료
🧹 서버 메모리 사용세션이 많아지면 리소스 사용량 증가 가능
📦 Spring + Servlet 지원HttpSession 기본 제공됨

🔐 보안 관점에서 비교

항목Cookie 기반 로그인Session 기반 로그인
저장 위치클라이언트 (위험)서버 (안전)
조작 가능성높음낮음
정보 유출 가능성높음낮음
인증 방법쿠키 값 직접 사용세션 ID로 서버 조회
HTTPS 필요성매우 높음높음 (추가 보안용)

🧠 요약 정리

  • 세션은 사용자 정보를 클라이언트가 아닌 서버에서 관리하는 방식

  • 클라이언트는 단지 Session ID(랜덤한 키)만 들고 있음

  • Session은 보안성이 높고, 서버 메모리를 사용하므로 관리가 필요함

0개의 댓글