💻CS

[CS] Session vs Cookie

이줭 2022. 6. 22. 21:55
728x90

HTTP 프로토콜의 특징은 비연결무상태성이다. 비연결과 무상태성이란 무엇일까?🤔

 

비연결이란 클라이언트가 서버로 요청을 보내고 서버가 적절한 응답을 클라이언트에게 보내면 바로 연결이 끊어지는 특징이고, 무상태성이란 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 공유하지 않는다는 것이다.

 

위와 같은 특징으로 HTTP 프로토콜에서는 모든 요청 간의 의존관계가 없고, 현재 접속자가 이전에 접속했던 사용자와 같은 사용자인지 알 수 있는 방법이 없다. 계속해서 연결을 유지하지 않기 때문에 리소스의 낭비가 줄어드는 것은 큰 장점이지만, 통신할 때마다 새로 연결하기 때문에 클라이언트는 매 요청마다 인증을 해야 한다는 단점이 있다. 😒 

 

따라서 이전 요청과 현재 요청이 같은 사용자의 요청인지 알기 위해, 상태를 유지해야 하고 상태를 유지하기 위해 사용된 것이 쿠키와 세션이다.

 

먼저, 쿠키는 클라이언트 로컬에 저장되는 키와 값이 들어있는 파일로 정확히는 이름, 값, 유효시간, 경로 등을 포함하고 있다. 클라이언트의 상태 정보를 브라우저에 저장하고, 서버에 요청할 때 쿠키를 넘겨준다.

 

웹브라우저가 서버에 요청하면, 상태를 유지하고 싶은 값을 서버에서 쿠키로 생성하여 서버가 응답할 때 HTTP 헤더에 쿠키를 포함시켜 응답하고 브라우저가 종료되더라도 쿠키 만료시간이 남아있다면 클라이언트에서 보관하고 있게 된다. 같은 요청을 할 경우 HTTP 헤더에 쿠키를 포함하여 요청을 보내고 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답한다.

 

참조 : https://catsbi.oopy.io/0c27061c-204c-4fbf-acfd-418bdc855fd8

 

세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 서버측에서 관리한다. 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증 상태를 유지한다. 사용자 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버의 메모리는 많이 차지하게 된다.

 

웹브라우저가 서버에 요청하면 서버가 해당 클라이언트에 유일한 ID(세션 ID)를 부여하고 서버가 응답할 때 HTTP 헤더에 세션 ID를 포함하여 전송하면 클라이언트는 쿠키에 세션 ID를 저장한다. 웹브라우저는 이후 웹브라우저를 닫을 때 까지 요청 시 세션 ID가 담겨있는 쿠키를 HTTP 헤더에 넣어 전송하게 되고, 서버는 세션 ID를 확인하고 해당 세션에 관련된 정보를 확인한 후 응답하게 된다.

참조 : https://catsbi.oopy.io/0c27061c-204c-4fbf-acfd-418bdc855fd8

정리해보면 다음과 같다.

 

※ 로컬스토리지 vs 세션스토리지

로컬스토리지는 브라우저를 닫아도 남아있고, 세션스토리지는 브라우저를 닫으면 사라진다.

728x90

'💻CS' 카테고리의 다른 글

[CS] DB Index  (0) 2022.07.03
[CS] Pub/Sub 모델과 MQTT(Mosquitto)  (0) 2022.06.26
[CS] CORS?  (0) 2022.06.25
[CS] 토큰 기반 인증과 JWT  (0) 2022.06.19
[CS] HTTP 상태코드  (0) 2022.06.16