HTTP의 특징과 세션과 쿠키가 만들어진 이유
- HTTP의 특징
- 비연결성(connectionless), 무상태성(stateless)한 특징을 갖는 프로토콜이다.
- 비연결성 : 클라이언트가 HTTP Request를 통해 서버에게 요청을 보내면, 서버는 클라이언트의 요청에 맞는 Response를 보내고 접속을 끊는다.
- 무상태성 : 클라이언트와 서버의 연결이 끊어지는 순간 통신이 끝나며 상태 정보는 유지하지 않는다.
- 이러한 HTTP의 특징으로 인하여 서버는 클라이언트가 이전에 무엇을 했고 지금 무엇을 했는지에 대한 정보가 없다.
- 세션과 쿠키
- HTTP통신의 비연결성 및 무상태성으로 인해 발생하는 문제점들을 해결하기 위해 고안되었다.
- 세션과 쿠키는 서버 또는 클라이언트에 클라이언트 자신에 대한 상태 정보를 저장한 뒤 요청시마다 사용하여 마치 클라이언트와 서버가 연결되있는 것 처럼 사용할 수 있게 되었다.
쿠키
- 클라이언트(브라우저)의 저장장소에 사용자의 상태에 대한 정보를 담고있는 Key, Value 형태의 문자열 데이터를 담고있는 파일로 저장된다.
- 쿠키의 유효 시간을 설정할 수 있으며, 쿠키가 유효하다면 브라우저가 종료되어도 인증이 유지된다.
- 클라이언트에 300개의 쿠기가 저장가능하며, 하나의 도메인(사이트)당 최대 20개의 쿠키를 저장할 수 있다. 이때 저장되는 쿠키의 크기는 4KB를 넘길 수 없으며, 쿠키의 개수가 300개를 초과하는 순간 가장 오래된 쿠키는 삭제되고 새로운 쿠키가 저장된다.
- 클라이언트 측에서 쿠키를 열어볼 수 있다.
- 쿠키는 브라우저가 서버에 요청시 Request Header에 쿠키를 포장해 자동으로 전송한다. 쿠키의 정보는 항상 서버에 전송되므로 네트워크 트래픽을 추가로 유발한다.
쿠키 동작방식
- 클라이언트가 서버에 요청시 서버에서 클라이언트 측의 상태에 대한 정보를 담고있는 쿠키를 생성해 응답과 함꼐 전송한다.
- 클라이언트 측에서는 서버에서 받은 쿠키를 웹브라우저내 저장소에 저장해 둔다.
- 이후 클라이언트가 서버에 재요청시 자동으로 쿠키 저장소에 있는 쿠키를 요청 정보와 함께 서버에 전송하며, 서버는 쿠키와 요청을 읽고 동적인 웹 페이지 생산을 함으로써 마치 연결된 것과 같이 느낄 수 있게 된다.
세션
- 세션은 쿠키를 기반하지만, 사용자 상태를 문자열뿐만 아니라 객체또한 담을 수 있으며, 서버측 메모리에서 관리된다.
- 세션또한 쿠키를 기반하기 때문에 유효 시간을 설정할 수 있으나, 브라우저가 종료되면 인증을 유지할 수 없다.
- 저장 갯수에 제한이 없으나, 서버 메모리를 사용하는 만큼 서버에 부하가 간다.
- 세션에 보관한 정보는 클라이언트 측에서 접근할 수 없는 영역에 있어 보안에 유리하다.
세션 동작방식
- 세션도 기본적으로 쿠키를 기반하기 떄문에 비슷한것처럼 보이지만 내부적으로 처리하는 방식이 다르다.
- 클라이언트가 서버에 요청시 서버에서 클라이언트 측의 상태에 대한 정보를 서버의 메모리에 저장한 뒤, 해당 메모리가 저장된 정보를 담고있는 세션의 ID를 쿠키에 담아 응답한다.
- 클라이언트 측에서는 서버에서 받은 쿠키를 웹브라우저내 저장소에 저장하나, 쿠키와 달리 사용자의 정보는 포함되어 있지 않고 브라우저의 세션 ID만 담겨있을 뿐이다.
- 이후 클라이언트가 서버에 재요청시 서버가 갖고있는 세션 ID와 클라이언트 측으로 부터 넘어온 쿠키의 세션 ID를 비교해 어느 클라이언트에서 요청이 왔는지 식별을 하고 그에 맞는 동적인 웹 페이지를 만든 뒤 응답한다.
세션과 쿠키의 공통점
- 두 컴퓨터나 네트워크 장치의 논리적인 연결 상태이며 이와 상대되는 개념으로 링크가 있다. 즉 웹상에서 브라우저(클라이언트)와 서버가 논리적으로 계속 연결된 상태를 뜻한다.
세션과 쿠키의 차이점
차이점 | 세션 | 쿠키 |
저장장소 | 클라이언트측 저장장소 | 서버 메모리 |
저장형식 | 텍스트형식 | Object 형 |
유효기간 | 유효기간 또는 브라우저의 종료시 까지 유지 | 브라우저의 종료와 상관없이 유효기간동안 인증 유지 |
용량제한 | 쿠키 하나당 4KB 한 도메인당 20개 브라우저에 최대 300개 저장가능 |
서버의 메모리가 허용하는 한 제한이 없다. |
보안 | 쿠키보다 좋다 | 세션보다 구리다. |
- 또한 쿠키는 사용자에 의지에 따라 저장 유무를 결정할 수 있다는점 또한 차이점이 될 수 있다.
'WEB' 카테고리의 다른 글
[WEB]Forward와 Redirect의 차이 (0) | 2023.03.15 |
---|---|
[WEB]3-tier architecture와 WAS의 개념 (0) | 2023.03.10 |
[WEB]정적 페이지와 동적 페이지 (0) | 2023.03.10 |
[WEB]클라이언트 / 서버 (0) | 2023.03.10 |
[WEB]웹의 동작방식 (0) | 2023.03.10 |