1. Session과 Cookie를 사용하는 이유?
HTTP 특징
- 클라이언트 - 서버 모델(클라이언트가 요청을 보내면 서버는 응답)
- 무상태 프로토콜(Stateless): 요청-응답이 끝나면 연결 끊음
- 서버가 클라이언트 상태를 유지하지 않음
- Keep-Alive 속성 사용 특정 시간동안 연결을 유지할 수는 있다.
- 비연결성(Connectionless)
- 서버가 클라이언트 요청에 대해 응답을 마치면 맺었던 연결을 끊어 버림
- 해결책: 쿠키(클라이언트에 정보 저장), 세션(서버에 정보 저장), JWT
HTTP는 statelsess 와 Connectionless 하기 때문에 한번 통신하고 나면 연결이 끊어진다. Session과 Cookie를 통해 서버는 클라이언트와 정보를 유지할 수 있다.
2. Session이란?
- 클라이언트와 서버간의 접속을 유지시켜주는 역할
- 클라이언트가 서버에 요청할 경우 서버 측에서는 클라이언트에게 클라이언트를 구분할 수 있는 식별자(세션 ID)를 부여
- 여러 클라이언트가 요청하는 정보들은 이 세션 ID를 통하여 각 클라이언트를 구분하여 정보를 제공
- Session은 서버측에서 관리한다.
3. Session 유지 기간
- Session 서버측 pc에서 관리하며 보통 30분으로 설정하지만 유지기간은 설정할 수 있다.
- 클라이언트 측에서 session id를 가지고 요청 해도 session 유지 기간이 지나면 검증이 되지 않는다.
4. Cookie란?
- 쿠키란 클라이언트 측에서 관리되는 정보를 의미
- 세션은 서버 측에서 관리되지만 쿠키는 클라이언트에 정보 저장
- 쿠키의 정보는 세션과 달리 브라우저를 종료한다고 해도 생존 기간이 지정되면 생존 기간 동안 데이터가 사라지지 않는다.
- 쿠키는 클라이언트에서 관리되기 때문에 보안적으로 매우 취약
5. Cookie의 유지 기간
Cookie에는 크게 2가지 타입이 있다.
- Session 쿠키는 브라우저를 닫는 순간 삭제가 된다.
- Persistent 쿠키는 디스크에 저장되기 때문에 브라우저 및 pc를 종료해도 유지가 된다.
*Cookie 사용 예시) 사이트를 다시 방문했을 때 아이디와 비밀번호 자동 입력
6. Session 동작 과정
- 사용자가 최초 로그인 요청을 한다.
- 웹서버는 회원DB와 상호작용 하여 회원인지를판단한다.
- 회원일 경우 사용자 정보를 담고있는 세션 정보를 생성하고, 세션 저장소에 저장한다.
- 웹서버는 세션 id를 전달받는다.
- 사용자에 세션 id를 전달한 후 사용자는 보통 쿠키에 세션 id를 저장한다.
서버에서의 세션이 유효하고, 쿠키에 세션 id를 가지고 있을 때까지 아래의 동작을 반복한다.
- 사용자가 웹서버에 요청(장바구니, 구매 등)을 할 경우 세션 id를 헤더에 담아서 요청을 하게된다.
- 웹서버는 세션 id를 세션 저장소를 통해 세션을 검증한다.
- 세션이 검증되었다면, 세션 정보를 전달받는다.
- 웹서버는 적절한 프로세스를 거친 뒤 사용자에게 응답을 하게된다.
*쿠키는 보안에 노출되어 있기 때문에 세션id의 경우는 UUID와 같은 추정 불가능한 값을 사용해야 한다. 주민번호, 회원 ID 등 사용할 경우 심각한 문제로 이어질 수 있다.
'CS' 카테고리의 다른 글
[HTTP] HTTP 웹 기본 지식 (0) | 2024.01.18 |
---|