개요
웹 애플리케이션에서 사용자 정보를 저장하고 관리하는 방식, HTTP는 statelessness이기 때문에, 이전 요청에 대한 정보를 기억하지 않는다. 따라서 이 문제를 해결하기 위해 쿠키와 세션이 필요하다.
쿠키
클라이언트에 저장되는 작은 데이터 파일, 서버가 클라이언트에게 데이터를 저장하도록 지시하면, 해당 데이터를 전송하게 됨
용도
- 사용자 인증 정보 저장 (로그인 상태 유지)
- 웹사이트 설정 저장
- 사용자 행동 추적
특징
- 주기적 전송: 사용자가 특정 사이트에 다시 방문하면 브라우저가 자동으로 쿠키를 서버로 전송함
- 수명: 유효 기간을 설정할 수 있고, 만료되면 삭제됨, 유효기간이 없으면 브라우저 세션이 종료될 때 삭제
- 용량: 한 도메인당 쿠키는 4KB 정도로 제한
보안
사용자의 브라우저에 저장되기 때문에 클라이언트에서 조작할 수 있다. 따라서 민감한 데이터는 쿠키에 저장하면 안됨
일반적인 웹 서비스에서는 세션 ID를 쿠키에 저장하고, 서버는 해당 세션 ID를 이용하여 사용자 정보를 조회한다.
세션
서버 측에서 관리되는 사용자 정보, 사용자가 서버와의 상호작용을 시작하면, 서버는 고유한 세션ID를 생성하고, 클라이언트는 이 세션 ID를 쿠키를 통해 서버로 보냄. 서버는 해당 세션 ID를 통해 사용자의 상태를 추적하고 필요한 정보를 유지함
용도
- 로그인 상태 관리
- 쇼핑몰의 장바구니 데이터 저장
- 사용자 상태
특징
- 서버에 저장됨
- 세션 ID: 서버는 각 사용자를 식별하기 위해 고유한 세션 ID를 생성하고, 클라이언트에 쿠키에 저장한다.
- 수명: 브라우저가 종료되거나, 서버에서 지정한 시간 동안만 유지됨
보안
세션 ID가 노출되거나 탈취되면 세션 하이재킹과 같은 보안 위협이 발생할 수 있음. 이를 방지하기 위해 HTTPS를 사용하거나, 세션 ID를 암호화 하는 등의 보안 조치를 취함.
비교 표
| 구분 | 쿠키 | 세션 |
|---|---|---|
| 저장 위치 | 클라이언트 | 서버 |
| 저장 내용 | 데이터 자체 | 세션 데이터(서버), 세션 ID는 쿠키 |
| 보안 | 상대적으로 낮음 | 상대적으로 높음 |
| 용량 | 작음(약 4KB) | 서버 자원에 따라 달라짐 |