등장배경

HTTP 프로토콜은 상태를 유지하지 않는 프로토콜이다. 이 한계를 보완하기 위해 쿠키와 세션이 등장했다.

쿠키는 클라이언트 로컬에 저장되는, 키와 값으로 이루어진 작은 데이터 파일이다. 자동 로그인, ‘오늘 하루 더 이상 안 보기’, 쇼핑몰의 장바구니 등에 쓰인다. 클라이언트에는 최대 300개까지 쿠키를 저장할 수 있고, 도메인 하나당 20개의 값만 가질 수 있다.

유지할 정보를 사용자 컴퓨터에 저장하기 때문에, 유효기간이 지나면 사라지고 정보가 유출될 가능성도 상대적으로 높다.

쿠키의 이름은 알파벳과 숫자로만 구성해야 하며 공백, 괄호, 특수기호는 쓸 수 없다. 별도의 삭제 메소드는 없고, maxAge가 0인 이름의 쿠키를 다시 전송하는 방식으로 지운다. maxAge를 음수로 설정하면 브라우저가 종료될 때 함께 삭제되도록 만들 수 있다.

스프링 프레임워크에서는 @CookieValue 어노테이션으로 쿠키 값을 받을 수 있다.

세션(Session)

세션은 일정 시간 동안 같은 브라우저에서 들어오는 일련의 요청을 하나의 상태로 묶어 표현한다. 쿠키와 달리 서버에 저장하며, 서버가 종료되거나 유효기간이 지나면 사라진다. 세션 유지 시간은 기본적으로 30분이다.

쿠키의 동작 방식

  1. 클라이언트가 서버에 요청을 보낸다.
  2. 유지해야 할 정보가 있으면 WAS(Web Application Server)가 쿠키를 key-value 형태로 생성한다.
  3. 응답 결과에 쿠키를 포함시켜 클라이언트에 전송한다.
  4. 클라이언트는 기존에 가지고 있거나 새로 받은 쿠키를 요청할 때마다 함께 전송한다.
  5. WAS는 전달받은 쿠키로 사용자가 유지해야 할 정보를 파악한다.

세션의 동작 방식

  1. 클라이언트가 서버에 요청을 보낸다.
  2. 웹서버나 WAS가 세션키를 생성한다.
  3. 세션키를 이용한 저장소(서버 메모리·RAM, 파일 시스템, 데이터베이스, 분산 캐시 시스템)를 만든다.
  4. 서버는 이 세션키를 담은 쿠키를 포함해 클라이언트에 응답한다.
  5. 클라이언트는 요청할 때마다 이 쿠키를 함께 전송한다.
  6. 서버는 쿠키에 담긴 세션키로 이전에 만들어둔 저장소를 활용한다(자바에서는 HttpSession).

차이점

특징 세션 쿠키
저장 위치 서버 브라우저
데이터 보안 서버에 저장되어 상대적으로 안전하다. 브라우저에 저장되어 민감한 정보는 노출 위험이 있다.
만료 시간 서버 설정에 따라 다르며, 주로 일정 시간 비활동 시 만료된다. 설정된 만료 시간까지 유효하다. 브라우저 종료 시 삭제 가능하다.
저장 용량 서버 메모리나 디스크 용량에 의존한다. 각 도메인별로 약 4KB 제한
전송 방법 세션 아이디를 쿠키 또는 URL 파라미터로 전송한다. 쿠키는 요청마다 자동으로 전송한다.