이것저것
Session, Cookie 에 관하여 본문
1. 사용 이유
- HTTP 프로토콜의 특징이자 약점을 보완하기 위해 사용한다.
- HTTP 프로토콜의 특징으로 Stateless가 있다.
- Stateless는 커넥션을 끊는 순간, 클라이언트와 서버와의 통신이 끝나고 상태 정보를 유지하지 않는 속성이다.
- Stateless의 특성 때문에, 상태를 유지해야 할 필요가 있는 경우에는(ex, 로그인 상태 유지)
- 통신할 때마다 인증 절차를 밟아야 한다.
- 별도의 인증을 하지 않고 상⁷⅞태 유지를 하기 위해 쿠키와 세션을 사용한다.
2. 쿠키
- 쿠키는 클라이언트에 저장되는 key, value 형태의 작은 데이터 파일
- 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지되는 특징이 있다.
- 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조
- 클라이언트에 최대 300개 쿠키 저장 가능,
한 도메인 당 최대 20개 가능,
하나의 쿠키는 4KB까지 가능 - 응답 헤더에 Set-cookie 속성을 사용하면 클라이언트에 쿠키 생성 가능
- 쿠키는 사용자가 따로 요청하지 않아도, 브라우저가 요청 시
요청 헤더에 넣어 자동으로 서버에 전송한다.
2.1 쿠키의 동작 방식
- 클라이언트가 페이지를 요청
- 서버에서 쿠키 생성
- HTTP 응답 헤더에 쿠키를 포함시켜 응답
- 브라우저가 종료되어도 쿠키 만료 기간이 있다면, 클라이언트에 보관
- 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
- 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를
HTTP 헤더에 포함시켜 응답
2.2 쿠키 사용 예
- 방문 사이트에서 로그인 시 "ID, 비밀번호 저장할거?"
- 쇼핑몰의 장바구니 기능
- 자동 로그인, 팝업에서 "오늘 더 이상 이 창 보지 않음" 체크,
쇼핑몰 장바구니
3. 세션
- 쿠키를 기반으로 하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리
- 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여, 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증 상태를 유지
- 접속 시간에 제한을 두어, 일정 시간 응답이 없다면 정보가 유지되지 않게끔 설정이 가능함
- 사용자에 대한 정보를 서버에 두기 때문에, 쿠키보다 보안이 좋지만 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다.
- → 동접자 수가 많은 웹 사이트인 경우, 서버에 과부하를 주므로 성능 저하의 원인
- 클라이언트가 요청을 보내면, 해당 서버의 엔진이 클라이언트에 유일한 ID를 부여하는데, 이를 세션 ID라고 한다.
3.1 세션의 동작 방식
- 클라이언트가 서버에 접속 시, 세션 ID를 전달 받는다.
- 클라이언트는 세션 ID에 대해, 쿠키를 사용해서 저장하고 가지고 있는다.
- 클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 서버에 전달해 사용
- 서버는 세션 ID를 전달 받아서, 별다른 작업 없이 세션 ID로 세션에 있는
클라이언트 정보를 가져온다. - 클라이언트 정보를 가지고, 서버 요청을 처리하여 클라이언트에게 응답한다.
3.2 세션의 특징
- 각 클라이언트에게 고유 ID 부여
- 세션 ID로 클라이언트를 구분해, 클라이언트의 요구에 맞는 서비스를 제공
- 보안 면에서 쿠키보다 우수
- 사용자가 많아질수록 서버 메모리를 많이 차지하게 됨
3.3 세션의 사용 예
- 로그인 같이 보안상 중요한 작업 수행 시 사용
4. 쿠키, 세션의 차이
- 쿠키, 세션은 비슷한 역할을 하고, 동작 원리도 비슷함
→ 세션은 쿠키를 사용하기 때문이다. - 가장 큰 차이점은 사용자의 정보가 저장되는 위치
쿠키 : 서버 자원 사용 X
세션 : 서버 자용 사원 O - 보안 면에서는 세션이 더 우수, 요청 속도는 쿠키가 더 빠르다.
- 보안, 요청 속도의 차이점은 모두 정보 저장 위치의 차이 때문이다.
- 라이프 사이클
- 쿠키도 만료시간이 있지만 파일로 저장되기 때문에 브라우저를 종료해도 계속해서 정보가 남아 있을 수 있다. 또한 만료기간을 넉넉하게 잡아두면, 수동으로 쿠키 삭제를 할 때 까지 유지될 수도 있다.
- 반면에 세션도 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
'Web' 카테고리의 다른 글
REST API 정의, 사용 이유 (0) | 2021.04.24 |
---|---|
HTTPS - SSL / TLS (0) | 2021.02.17 |
Web Socket (0) | 2021.01.18 |
Request, Response 흐름 과정 (0) | 2021.01.16 |
Proxy (0) | 2021.01.07 |
Comments