본문 바로가기
Network/HTTP

Cookie & Session

by whale in milktea 2023. 3. 7.

대표적인 네트워크 통신 인증방식인, Session과 Cookie를 이해하기 위해서는 먼저, HTTP의 무상태성부터 이해해야 한다.

HTTP는 기본적으로 무상태성(Stateless)에 기반한다. 무상태성이란, HTTP 통신이 이뤄질 때 이전 요청과 관련 정보를 기억하지 않는 것을 말한다.

 

HTTP가 무상태성을 채택한 이유는 다음과 같다.

1. 확장성
HTTP는 전 지구를 범위로 하는 프로토콜이기 때문에, 최대한 가벼워야 한다. 만약, HTTP 각각이 상태를 유지하기 위한 규칙을 도입한다면 불필요한 상태를 정의해야 하고 이는 서버의 부하로 이어진다. 이를 방지하고자 HTTP는 무상태성을 채택하고 있다.

2. 유연성
HTTP는 다양한 클라이언트와 서버 간의 통신을 지원함에 있어 무상태성을 채택함으로 클라이언트와 서버 간의 통신은 시간적으로 분리되며, 각각의 요청은 서로 독립적으로 기능한다.

3. 단순성
클라이언트와 서버 간의 상태 정보를 유지하는 복잡한 기능을 추가할 경우, 프로토콜의 복잡성이 증가하고 개발 비용이 증가할 수 있다. 무상태성을 채택함으로써, HTTP는 단순하면서도 유연하고 확장성이 높은 프로토콜로 발전할 수 있게 된다.

하지만, 이와 같은 무상태성의 장점에도 불구하고 HTTP는 치명적인 약점을 갖게 된다. "보안 이슈"와 "사용성의 저하"가 그 약점이다.

HTTP는 상태를 갖지 않고, 이전의 상태를 기억하지 않기 때문에 각종 요청에 독립적으로 응답하게 된다.

그렇다면 악의적으로 인터넷에 있는 여러 저장물들에 접근하는 요청에도 독립적으로 응답하게 된다.

 

이를 보완하고자, HTTP 프로토콜 통신에 있어서 "특별한 상태"를 정의할 수 있는 방법이 등장하게 되었고, Cookie와 Session은 이러한 상태를 유지하는 기술이다.

 

Cookie와 Session의 관계

쿠키와 세션은 HTTP 통신이 이뤄진 이후 인증 정보를 새롭게 만들어 클라이언트와 서버에 각각 저장하는 기술을 말한다.

예를 들어, A라는 사용자가 ID와 PS를 갖고 로그인을 시도한다면, 다음과 같은 과정을 거치게 된다.

1. 클라이언트에서 아이디와 비밀번호를 입력하고, 로그인 요청을 서버로 전송한다.
2. 서버는 아이디와 비밀번호를 확인하고, 인증이 성공하면 새로운 쿠키와 세션을 생성한다.
3. 이후 세션ID(key)를 응답 헤더나 쿠키(브라우저가 관리하는 일종의 객체)에 담아 클라이언트에 응답을 보내고, 이를 로컬에 저장할 것을 요청한다.
4. 클라이언트는 다음 요청부터 쿠키를 포함하여 서버에 요청을 전달한다.
5. 클라이언트가 로그아웃을 요청하면 서버는 해당 클라이언트의 세션 정보를 삭제한다.

이와 같은 과정으로 HTTP 통신이 이뤄질 때, 통신 자체는 무상태성을 유지하면서 클라이언트와 서버가 각각 상태를 유지할 수 있게 된다.

출처 : https://www.thesslstore.com/blog/the-ultimate-guide-to-session-hijacking-aka-cookie-hijacking/

'Network > HTTP' 카테고리의 다른 글

Cors 에러 및 프록시  (0) 2023.04.04
HTTP Message & Method  (0) 2023.03.06
HTTP 개념 : URL, URI  (0) 2023.03.02