[CS Study] Network - Cookie/Session

Frye 'de Bacon·2023년 11월 1일
0

Computer Science(CS)

목록 보기
1/40

HTTP

HTTP(HyperText Transfer Protocol)는 하이퍼텍스트(Hypertext)를 빠르게 교환하기 위한 프로토콜(컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계)의 일종으로, 서버와 클라이언트 사이에서 어떻게 메시지를 교환할지를 정해 둔 규약이라고 이해하면 된다.

HTTP가 가진 특징으로는 무상태 프로토콜(Stateless)비연결성(Connectionless)을 들 수 있는데, 간단히 설명하면 다음과 같다.

무상태 프로토콜(Stateless)

서버와 클라이언트가 통신할 때, 서버가 클라이언트의 '상태'를 가지고 있지 않다는 것을 의미한다. 따라서 클라이언트에서 서버로 요청을 보낼 때 요청에 필요한 정보를 모두 모아 한 번에 보내야 한다.

예를 들어 손님(클라이언트)가 직원(서버)에게 저녁 메뉴로 "시저 샐러드 1개 주세요."라는 요청을 보냈다면, 직원은 그 요청에 따른 응답을 한 후에는 해당 주문을 기억하지 않는다. 따라서 직원에게 "아까 주문한 거 1개 더 주시고 콜라도 2개 주세요."라는 식의 주문은 불가능하다. 이 경우 "아까 시저 샐러드를 1개 주문했는데 그거 1개 더 주시고 콜라도 2개 주세요."와 같이, 요청에 필요한 정보를 모두 모아 한 번에 전달해야 한다.

무상태 프로토콜은 서버의 확장성에 용이한 방식으로, 서버가 요청을 쉽게 파악할 수 있고, 이전 요청을 찾아다닐 필요가 없으므로 비용(리소스)도 적게 발생한다는 장점이 있다.
반면 요청을 한 번에 보내기 때문에 요청이 복잡해진다는 단점도 존재한다.

비연결성(Connectionless)

서버와 클라이언트가 서로 '연결'되어 있지 않다는 것을 의미한다. 즉 서버와 클라이언트가 연결된 상태에서 요청을 보내고 응답하는 방식이 아니라, 요청을 주고받을 때만 일시적으로 연결을 유지하고 응답이 끝나면 TCP/IP 연결을 해제한다.
이는 서버의 리소스를 획기적으로 줄여줄 수 있다는 장점이 있다.

※ HTTP에 대한 자세한 내용은 추후 다루도록 한다.

이러한 HTTP 프로토콜의 두 가지 특징으로 인해 발생하는 약점이 존재한다. 예를 들면 쇼핑몰 웹사이트에서 사용자의 로그인 상태 등에 대한 정보를 저장하지 못한다면 쇼핑몰에서 페이지가 바뀔 때마다 로그인을 반복해야 할 것이다. 쿠키와 세션은 이러한 약점을 보완하기 위해 등장한 개념이다.


쿠키(Cookie)

쿠키의 개념

쿠키는 웹 쿠키, 브라우저 쿠키, HTTP 쿠키 등으로 불리며, 사용자(클라이언트)의 로컬에 저장되는 작은 데이터 조각을 의미한다. 사용자가 웹 사이트를 방문할 때 사용자의 요청이 없어도 웹 사이트의 서버에서 헤더에 실어 자동으로 전송한다.
주로 세션 관리(서버에 저장해야 할 로그인 정보, 장바구니 정보 등), 개인 설정 유지(팝업창 설정 정보, 웹 사이트의 테마 정보 등), 사용자 트래킹(사용자의 행동을 기록하고 분석하기 위한 용도) 등의 목적으로 사용된다.

쿠키의 구성 요소

  • 이름 : 각 쿠키를 구별하기 위해 사용되는 이름
  • 값 : 쿠키의 이름과 연관된 값
  • 유효 시간 : 쿠키의 유지 시간
  • 도메인 : 쿠키를 전송할 도메인(A 사이트에서 전송받은 쿠키는 A 사이트로만 보낼 수 있음)
  • 경로 : 쿠키를 전송할 요청 경로

쿠키의 특징

  • 개당 4KB까지, 최대 300개까지 저장 가능한 텍스트 파일이다.
  • 유효 시간을 지정할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다.
  • 하나의 도메인당 20개의 쿠키를 가질 수 있다.

쿠키의 작동 방식

쿠키는 HTTP 요청과 응답에 따라 동작한다.

  1. 클라이언트에서 서버에 HTTP 요청을 보낸다.
  2. 요청을 받은 서버에서 HTTP 응답과 함께 헤더(Set-Cookie)에 쿠키를 실어 응답을 보낸다. 이렇게 전달받은 쿠키 파일은 클라이언트의 로컬 환경에 저장된다.
  3. 클라이언트에서 동일한 서버에 새로운 요청을 보낼 때, 저장된 쿠키 파일을 함께 전송한다.
  4. 서버는 요청과 함께 쿠키 파일을 읽고, 만약 쿠키 정보에 업데이트해야 할 부분이 있다면 해당 쿠키를 업데이트하여 헤더에 실어 응답을 보낸다.


세션(Session)

세션의 개념

본래 HTTP 세션은 클라이언트가 브라우저를 통해 서버에 접속하기 시작한 시점부터 브라우저를 종료하여 연결을 끝내는 시점까지의 일정한 기간을 말한다.
그러나 일반적으로는 서버에 세션에 대한 정보(세션의 상태, 클라이언트 데이터, 세션 데이터 등)를 저장하고 세션 쿠키(고유한 세션 ID만이 저장된 쿠키 파일)를 클라이언트에 전달함으로써 서버가 클라이언트를 식별할 수 있또록 하는 기술 자체를 말하는 경우가 많다.

세션의 특징

  • 쿠키와 달리 세션은 클라이언트가 아닌 서버에 저장되며, 클라이언트에는 서버에서 클라이언트를 구별하기 위해 생성한 세션 ID(가 저장된 세션 쿠키)만 저장된다.
  • 쿠키와 달리 유효 기간이 없고, 브라우저가 종료되는 순간 세션 쿠키는 삭제된다.
  • 쿠키와 달리 용량의 제한이 없다(서버의 성능에 의존한다).
  • 쿠키보다 보안 면에서 우수하다.
  • 사용자가 많아질수록 서버의 메모리를 많이 차지하여 성능 저하의 요인이 된다.

세션의 작동 방식

세션은 쿠키를 전달 매체로 작동하므로 마찬가지로 HTTP 요청과 응답에 따라 동작한다.

  1. 클라이언트에서 서버에 HTTP 요청을 보낸다.
  2. 서버는 클라이언트의 요청 헤더(Request-header)를 확인하고 세션 ID가 있는지 확인한다.
  3. 클라이언트의 요청에 세션 ID가 존재하지 않는다면 서버는 세션 ID를 포함하는 세션 객체를 생성하여 DB에 저장하고, 응답 헤더에 세션 ID를 담은 세션 쿠키를 실어 클라이언트에 보낸다.
    ※ 그리고 이렇게 서버의 DB에 세션 객체가 저장되는 순간, 서버는 stateful 상태(클라이언트의 정보를 기억하는 상태)가 된다.
  4. 클라이언트는 세션 쿠키(세션 ID 값)를 저장해 두고, 요청을 보낼 때마다 해당 쿠키를 함께 보내어 자신이 누구인지 인증한다.


쿠키와 세션

정리하면, 쿠키와 세션 모두 HTTP 프로토콜의 Statless, Connectionless에서 오는 약점을 보완하기 위해 등장한 개념이다. 쿠키를 이용해 서버가 클라이언트를 구별할 수 있는 정보를 전달하고, 클라이언트는 이 쿠키 정보를 HTTP 요청과 함께 서버에 전달함으로써 서버는 각 클라이언트를 구별하고 그에 맞는 응답을 제공할 수 있게 되었다.
다만 쿠키는 클라이언트의 로컬 환경에 저장되며, 요청 시 쿠키의 값을 그대로 보내므로 보안에 매우 취약하다. 이러한 단점을 보완하기 위해 보안이 필요한 정보는 서버에 저장하고 이를 열람하기 위한 ID 정보만을 클라이언트에 전달하는 방식이 바로 세션이다.


참고 자료

profile
AI, NLP, Data analysis로 나아가고자 하는 개발자 지망생

0개의 댓글