서버 측에서 특정 사용자의 상태를 유지하는 방법으로, 사용자가 웹사이트에 방문했을 때에 서버가 해당 사용자의 정보를 메모리에 저장, 이를 세션 ID(Session ID)라는 고유한 식별자를 통해 관리하는하는 저장소(스토리지) 또는 컨테이너(Container)
사용자가 웹사이트에 처음 방문하면, 서버는 이 사용자를 구분하기 위해
새로운 세션 및 고유한 세션 ID 생성.
세션 ID는 일반적으로 랜덤한 문자열로 생성
ex)
a1b2c3d4e5f6g7h8i9j0
서버는 이 세션 ID를 메모리나 DB(예: Redis, MariaDB) 등에 저장, 여기에 사용자의 정보를 함께 저장 가능.
일반적으로 쿠키(Cookie) 를 사용해서 클라이언트의 브라우저에 세션 ID 저장.
ex)
Set-Cookie: JSESSIONID=a1b2c3d4e5f6g7h8i9j0; Path=/; HttpOnly
사용자가 다시 서버에 요청을 보낼 때, 브라우저는 자동으로 쿠키에 저장된 세션 ID를 포함해서 요청 전송
GET /dashboard HTTP/1.1
Host: example.com
Cookie: JSESSIONID=a1b2c3d4e5f6g7h8i9j0
서버는 이 요청을 받으면, 저장된 세션 정보에서 해당 ID를 찾아서 사용자가 누구인지 판별할 수 있어.
| 사용자 | 요청에 포함된 세션 ID | 서버에서 식별하는 정보 |
|---|---|---|
| A 사용자의 요청 | JSESSIONID=abc123 | A 사용자의 로그인 정보 |
| B 사용자의 요청 | JSESSIONID=xyz789 | B 사용자의 로그인 정보 |
즉, 서버는 세션 ID를 키(key)로 사용해서 사용자 정보를 구별.
메모리(Local Memory)
서버의 RAM에 저장 (속도 빠름, but 서버 재시작 시 데이터 손실)
파일 시스템(File System)
특정 디렉토리에 세션 데이터를 파일 형태로 저장
데이터베이스(DB: MySQL, MariaDB)
세션 데이터를 RDB에 저장 (분산 환경에서 유용)
인메모리 데이터베이스 사용
속도가 빠르고, 클러스터 환경에서 세션 공유 가능 (대규모 서비스에 적합)