Web/개념정리

[개념정리] Cookie VS Session

jh117jh 2025. 2. 4. 14:35
728x90

Cookie와 Session을 사용하는 이유

HTTP는 웹 서비스에서 데이터를 주고 받기 위한 서버-클라이언트 모델을 따르는 프로토콜이다.

클라이언트가 서버에게 요청을 보내고 응답을 받는 과정에서 응답 처리가 완료되면 연결을 끊는다.

이러한 HTTP는 비연결성, 무상태성이라는 특징을 가지고 있다.

 

비연결성(Connectionless) -> 클라이언트가 서버에 요청을 보내고 응답을 받은 후 연결을 끊는 방식

무상태성(Stateless) -> 클라이언트와 서버가 통신에서 데이터를 주고 받아도 다음 통신에서는 이전 데이터를 유지하지 않는다.


그러면 페이지를 새로고침 할 때 마다 로그인을 다시해야 되는 상황이 발생하게 된다.

이러한 이유로 Cookie와 Session을 이용한다.

 


Cookie란?

쿠키는 웹 서버가 사용자의 웹 브라우저에 저장하는 작은 데이터 파일로, 웹사이트가 사용자를 식별하거나 상태를 유지하기 위해 사용된다. 쿠키는 HTTP 프로토콜의 비연결성(stateless) 한계를 보완하여, 사용자의 로그인 상태, 장바구니, 선호 설정 등을 기억할 수 있게 해준다

 

쿠키는 키와 밸류로 이루어져 있으며 만료기간도메인경로 등의 정보를 가지고 있다.

 

생성 과정

  1. 사용자가 웹사이트에 접속하면 서버는 Set-Cookie HTTP 헤더를 통해 쿠키를 브라우저에 전송한다.
  2. 브라우저는 이 데이터를 저장하고, 이후 같은 사이트에 요청할 때마다 쿠키를 Cookie 헤더에 담아 서버로 전송한다.

쿠키의 특징

  • 저장 위치: 클라이언트(브라우저)
  • 크기 제한: 일반적으로 쿠키 한 개당 4KB 이하, 사이트별로 저장할 수 있는 쿠키 개수 제한이 있음
  • 브라우저별 독립성: 쿠키는 브라우저별로 저장되므로, 같은 컴퓨터라도 브라우저가 다르면 쿠키가 공유되지 않음
  • 삭제 및 관리: 사용자가 직접 쿠키를 삭제하거나, 브라우저 설정에서 관리할 수 있음

쿠키의 장단점

 

장점

  • 쿠키는 HTTP 표준에 포함되어 있고, 대부분의 웹 프레임워크에서 쉽게 사용할 수 있음
  • 정보가 클라이언트에 저장되므로 서버가 별도로 사용자의 상태 정보를 관리할 필요가 없어, 서버 자원을 절약할 수 있음
  • 클라이언트에 저장되어 있으므로 서버 처리 없이 빠르게 접근할 수 있음

단점

  • 쿠키는 클라이언트에 저장되기 때문에 탈취, 변조, 유실 위험이 있습니다. 민감한 정보를 저장하면 보안 사고로 이어질 수 있음
  • 사용자가 쿠키를 삭제하거나 비활성화할 수 있으며, 브라우저별로 동작이 다를 수 있음

 

Session이란?

 

웹에서 사용자와 서버 간의 상태를 일정 시간 동안 유지하기 위한 기술로 웹은 본래 HTTP 프로토콜의 특성상 요청과 응답이 각각 독립적으로 처리되어, 사용자의 상태를 기억하지 못한다. 쿠키와 비슷하게 이를 보완하기 위해 세션이 사용된다.

 

하지만 쿠키와 달리 민감한 정보는 서버에 저장되어 보안성이 높다.

 

생성 과정

  1. 사용자가 웹사이트에 처음 접속하거나 로그인을 시도하면, 서버는 고유한 세션 ID를 생성한다.
  2. 사용자가 웹사이트를 탐색하면서 서버에 요청을 보낼 때마다, 브라우저는 세션 ID를 쿠키에 담아 서버로 전송한다.
  3. 서버는 이 세션 ID를 바탕으로 해당 사용자의 정보를 서버 내 세션 저장소에서 조회하여, 로그인 상태 유지, 개인화 등 다양한 서비스를 제공한다.
  4. 사용자가 로그아웃하거나, 일정 시간이 지나면(세션 타임아웃), 또는 브라우저를 종료하면 세션이 만료되고, 서버는 해당 세션 정보를 삭제한다.

세션의 특징

  • 정보 저장 위치: 세션 정보는 서버에 저장. 클라이언트에는 세션 ID만 저장되어, 실제 민감한 정보는 서버에만 존재한다.
  • 고유 식별자: 각 사용자(브라우저)마다 고유한 세션 ID가 부여되어, 서버는 이를 통해 사용자를 구별한다.
  • 만료 및 관리: 세션은 일정 시간이 지나면 자동으로 만료되며, 서버에서 관리 및 삭제가 가능하다

 

세션의 장단점

 

장점

  • 서버에 정보가 저장되어 보안성이 높음(쿠키에 비해 민감한 정보 노출 위험이 적음)
  • 사용자의 상태를 서버가 직접 관리하므로, 다양한 서비스 구현이 용이함

단점

  • 서버 자원을 사용하므로, 접속자가 많아질수록 서버에 부담이 커질 수 있음
  • 세션 ID가 탈취당하면 세션 하이재킹 등 보안 위협이 발생할 수 있음

 


 

그럼 세션ID도 보통 쿠키로 전송하니까 보안적인 측면에서 쿠키랑 세션이랑 다른게 없는거 아니야??

실제로 세션ID가 탈취되면, 쿠키에 직접 중요한 정보가 저장된 경우와 마찬가지로 공격자가 중요한 정보에 접근할 수 있다는 점에서 “결과적으로” 보안 위협이 비슷해 보일 수 있다.

 

하지만, 근본적으로 두 방식의 보안 위험에는 중요한 차이점이 있다.

 

직접 노출 VS 간접 노출

 

쿠키 방식(직접 노출)

  • 쿠키에 사용자의 민감한 정보(예: 로그인 토큰, 개인정보 등)가 직접 저장된다.
  • 쿠키가 탈취되면, 공격자는 정보 자체를 바로 볼 수 있고, 변조도 가능하다.
  • 예시: 쿠키에 "isAdmin=true"가 저장되어 있다면, 공격자가 쿠키 값을 바꿔 관리자 권한을 얻을 수 있다.

세션 방식(간접 노출)

  • 쿠키에는 세션ID(식별자)만 저장되고, 실제 중요한 정보는 서버에만 있다.
  • 세션ID가 탈취되면 공격자가 서버에 접근해 정보를 볼 수 있지만, 쿠키 자체만으로는 정보가 노출되지 않는다.
  • 세션ID가 무작위로 생성되고, 서버에서 추가적인 검증(예: IP, User-Agent 등)을 하면 보안성이 더 높아진다.

 

즉, 결과적으로 비슷해 보일 수 있지만, 세션 방식이 더 안전한 설계이며, 추가적인 보안 대책을 적용할 수 있다는 점에서 차이가 있다.

728x90