개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

세션 — 서버가 사용자 상태를 기억하는 방법

2025년 10월 6일
Session세션

세션(Session)은 서버 측에서 사용자 상태를 관리하는 방식입니다. 쿠키와 달리 실제 데이터는 서버에 저장하고, 클라이언트에는 식별자만 전달합니다.

세션 동작 방식

1. 클라이언트 → 서버: 로그인 요청 (아이디/비밀번호)
2. 서버: 인증 성공 시 세션 생성, 세션 저장소에 저장
3. 서버 → 클라이언트: 세션 ID를 쿠키로 전달
4. 클라이언트 → 서버: 이후 요청마다 세션 ID 쿠키 첨부
5. 서버: 세션 ID로 저장소 조회하여 사용자 정보 확인

쿠키 vs 세션 비교

항목쿠키세션
저장 위치클라이언트(브라우저)서버
보안상대적으로 낮음높음
용량 제한4KB서버 용량에 따름
속도빠름조회 비용 발생
만료설정 가능비활성 시 자동 만료

세션 저장소

메모리 (기본값)

서버 프로세스 메모리에 저장합니다. 빠르지만 서버 재시작 시 세션이 모두 소멸합니다.

Redis

Redis는 빠른 인메모리 저장소로, 분산 환경에서도 세션을 공유할 수 있습니다. 서버 재시작에도 세션이 유지됩니다. 실무에서 가장 많이 사용하는 방식입니다.

데이터베이스

영구 저장이 가능하지만 조회 속도가 느립니다.

세션 고정 공격 방지

로그인 성공 시 기존 세션 ID를 폐기하고 새 세션 ID를 발급해야 합니다. 로그인 전 세션 ID를 공격자가 알고 있어도, 로그인 후 ID가 바뀌므로 공격이 무효화됩니다.

세션 만료

사용자가 일정 시간 동안 활동하지 않으면 세션을 자동으로 만료시킵니다.

절대 만료 (Absolute Expiration)

생성 시점으로부터 고정된 시간 후 만료합니다. 보안이 중요한 경우 사용합니다.

슬라이딩 만료 (Sliding Expiration)

마지막 요청으로부터 일정 시간 동안 활동이 없으면 만료합니다. 활동 중인 사용자는 계속 유지됩니다.

JWT와의 비교

세션은 서버가 상태를 보관하는 반면, JWT(JSON Web Token)는 클라이언트가 토큰을 보관합니다. JWT는 서버에 저장소가 없어 수평 확장이 용이하지만, 강제 로그아웃 구현이 어렵습니다.

← 이전 글라우팅 — 패킷의 최적 경로를 결정하는 방법
다음 글 →소켓 — 네트워크 통신의 엔드포인트