2 minute read

HTTP의 특징

스크린샷 2023-09-12 오후 1.53.45.png

(첫번째 연결)

스크린샷 2023-09-12 오후 1.53.45.png

(두번째 연결)

클라이언트와 서버가 데이터를 주고받을 때 사용하는 HTTP 프로토콜은 기본적으로 connectionless, stateless 한 환경이다. 즉 서버는 이전의 연결과 상태를 기억하고 있지 않다. 따라서 원래 HTTP 프로토콜 자체만으로는 웹페이지를 옮겨다니거나 브라우저를 종료했다가 킬때마다 사용자의 로그인 정보, 장바구니 정보 등 모든 정보가 초기화 될 수 밖에없다.

이러한 문제를 쿠키와 세션을 통해 해결할 수 있다. 하나씩 알아보도록 하자.

쿠키

스크린샷 2023-09-12 오후 1.53.45.png

쿠키는 클라이언트(브라우저)의 로컬에 저장되는 데이터 파일이다. 서버는 첫 응답때 쿠키를 생성해 응답하고, 클라이언트는 이 파일(쿠키)에 클라이언트의 상태 정보를 저장해 두었다가 HTTP 요청을 보낼 때 헤더에 포함시켜 보내면 서버는 이 쿠키의 상태정보를 보고 클라이언트의 정보를 확인, 그에 맞는 응답을 할 수 있다.

스크린샷 2023-09-12 오후 1.53.45.png

크롬의 개발자 도구 (F12)에서 Application 탭에 가면 쿠키의 모습을 볼 수 있다. github.com에 방문한 당시 쿠키의 모습이다. 사진으로 볼 수 있듯이 쿠키의 구성요소는 다음과 같다.

  • 쿠키의 이름 : 각각의 쿠키를 식별하는데 이용된다.
  • 쿠키의 값 : 쿠키가 갖고있는 값이다.
  • 도메인 : 쿠키를 전송할 도메인이다.
  • 경로 : 쿠키를 전송할 요청 경로이다.
  • 유효기간 : 쿠키의 유효기간이다. 이 기간이 지나면 쿠키는 삭제된다.
  • 크기 : 쿠키의 크기이다. 하나의 쿠키는 4KB의 크기까지 저장가능하다.
  • 그밖의 옵션들은 보안에 관련된 사항들이다.

github.com에 로그인된 상태의 쿠키들의 이름과 값을 보면, 현재 로그인 된 상태인지, 선호하는 컬러테마, 세션 id값 등을 쿠키로 갖고 있다. 서버는 이 값들을 통해 알맞은 응답을 내게 보여주는 것이다. 중요한 것은 이 모든 정보들이 내 로컬에 저장된다는 것이다.

세션

스크린샷 2023-09-12 오후 1.53.45.png

세션은 클라이언트(브라우저)에 저장되는 쿠키와 달리 서버 쪽에서 관리되는 사용자 상태이다. 서버에 올바른 로그인 요청이 들어오면, 서버는 세션 DB에 유저 정보를 생성하고, 세션 ID를 발급하여 클라이언트에게 쿠키로 전송한다. 이제 클라이언트는 서버에 요청할 때 이 세션 ID를 같이 전달하고, 서버는 세션 DB에 존재하는 클라이언트 정보를 통해 응답한다.

세션의 주요 특징은 다음과 같다.

  • 서버에 저장되므로 저장용량에 크게 제한이없지만, 사용자가 많아지고 사용하는 정보가 많아질수록 서버의 자원을 많이 사용하게 된다.
  • 동시 접속자가 많아지면 서버에 큰 부담이 생길 수 있다.
  • 서버는 현재 접속한 클라이언트들의 정보를 알고 있으므로 강제로 연결을 끊는등의 행동을 할 수 있다.
  • 모든 정보를 서버에 저장하기 때문에 보안 면에서 쿠키보다 우수하다.
  • 세션을 통해 로그아웃하거나 브라우저를 종료할 때까지 인증상태를 유지할 수 있다.

가장 중요한 것은 모든 정보가 서버에 저장되고 서버가 관리한다는 것이다. 따라서 HTTP 요청과 응답간 공격에 취약한 쿠키와 달리 다소 안전하다고 할 수 있다.

이러한 특징 때문에 로그인 정보와 같은 중요한 클라이언트의 정보는 모두 쿠키가 아닌 세션에서 관리해주어야한다.

쿠키와 세션의 차이점

  쿠키 세션
저장 공간 클라이언트 서버
속도 비교적 빠름 비교적 느림(서버의 처리 필요)
보안 비교적 위험 비교적 안전
만료 기간 설정된 만료기간 로그아웃, 브라우저 종료
크기제한 쿠키 하나당 최대 4KB 제한 없음

참고내용

Difference between Session and Cookies - GeeksforGeeks

Cookie+Session: Story of a Stateless HTTP

Why is Cookies Size Important? - GeoRanker

쿠키와 세션 개념

Leave a comment