세션(Session)
✒️ 2025-05-30 19:37 내용 수정
참고 자료 : Geeksforgeeks The HttpSession Interface in Servlet, mdn web docs HTTP Session, Medium HENDEL Ramzy's How session and cookies works?
용어 뜻 : 두 시스템 간의 상호작용이 이루어지는 기간
| 쿠키 | 세션 | 캐시 | |
|---|---|---|---|
| 저장 위치 | 클라이언트 | 웹 서버 | 클라이언트 |
| 종료 시점 | 쿠키 생성 시 만료일 설정 설정이 없다면 웹 브라우저 종료 시 소멸 |
서버에서 지정한 기간 클라이언트와의 상호작용이 없을 때 연결 종료 요청(ex. 로그아웃) 수신 시 |
설정된 캐시 만료일까지 |
| 데이터 크기 | 4KB 제한 | 제한 없음 | 제한 있음 |
| 리소스 | 클라이언트의 리소스 | 서버의 리소스 | 클라이언트의 리소스 |
| 보안 | 클라이언트에 저장되어 사용자 변경이 가능함. 보안에 취약 |
서버에 저장되어 상대적 안정적. 서버 공격 시에는 어쩔 수 없음 |
클라이언트에서 접근 가능 |
| 목적 | 상태 유지, 개인화 | 상태 유지, 사용자 인증, 개인화 | 성능 향상, 대역폭 절약 |
웹 세션 : 같은 유저에 관련된 HTTP 요청과 응답 네트워크 트랜잭션의 일련의 순서
- HTTP에서는 상호작용 상태가 유지되지 않기 때문에 쿠키와 마찬가지로 클라이언트와 웹 서버 간의 상태를 유지 시키기 위해 사용한다.
- 쿠키(Cookie) 참고.
- 클라이언트와 서버가 연결할 때 세션을 생성하며, 세션 생성 시 세션 ID를 생성한다.
용도
- 쿠키처럼 사용자 인증(더 상세한 인증), 상태 관리, 장바구니 기능, 사용자 커스텀 설정 등을 저장할 때 사용한다.
- 쿠키를 기반으로 동작하지만 쿠키보다 안전한 방식으로 정보를 저장하며, 클라이언트 측에 저장되지 않아 정보 노출 및 보안 위험을 줄일 수 있다.
- 쿠키에 세션 ID를 담아 클라이언트로 전송할 수 있다.
저장 방법 및 위치
- 세션은 웹 서버에 존재하는 객체이며, 웹 브라우저마다 한 개씩 존재하기 때문에 웹 서버의 서비스를 제공 받는 사용자를 구분하는 단위가 된다.
- 쿠키는 사용자의 브라우저에, 세션은 서버에 저장된다.
- 저장되는 방식은 서버의 파일로 저장하거나, 미들웨어를 통해 DB에 저장할 수 있다.
- 쿠키는 4KB 제한이 있으나 세션은 데이터 크기 제한이 없다.
라이프 사이클
- 세션을 사용하면 웹 서버의 세션에 의해 클라이언트가 가상으로 연결된 상태가 되므로, 웹 브라우저가 켜진 상태라면 웹 페이지를 이동해도 사용자의 정보를 잃지 않는다.
- 세션 기반이 아닌 환경에서 로그인을 진행했다면 서로 독립적인 HTTP 요청의 특성 상 서버는 로그인 한 사용자를 모른다.
- 하지만 세션 기반의 환경에서 로그인을 진행했다면 서버에선 로그인 한 사용자의 정보를 세션 변수(session variable)에 저장해서 해당 사용자를 기억할 수 있다.
- 세션은 일정 시간동안 클라이언트와의 상호작용이 없거나, 클라이언트가 로그아웃 요청 등으로 세션 만료 요청을 보내면 세션이 종료된다.
보안
- 세션은 클라이언트에서 직접 접근할 수 없기 때문에 쿠키보다 보안이 뛰어나다.
- 쿠키보다 보안이 좋으나 세션 역시 session ID가 탈취 당하면 보안 문제가 발생할 수 있다.
- 다만 세션은 서버에 저장되기 때문에 퍼포먼스 및 데이터를 직렬화(serialization) 하거나 역 직렬화로 인한 추가적인 시간 및 메모리 등이 소요될 수 있다.
구성 요소
- 세션 ID (session ID) : 서버에서 랜덤으로 생성되는 유니크 ID로, 사용자를 식별하는데 사용된다.
- 참고 자료 : stackoverflow What is session and session variables
- 브라우저가 쿠키를 지원하는 경우 브라우저가 요청을 보낼 때 쿠키를 함께 보내며, 서버에선 쿠키에 있는 session ID를 사용하여 사용자를 식별할 수 있다.
- 회수된 session ID를 사용하여 저장된 session의 정보를 검색해서 특정 데이터를 얻어올 수 있다.