등장배경

HTTP 프로토콜은 상태유지가 되지 않는 프로토콜이다. 이를위해 Cookie, Session 등장하였다.

클라이언트 로컬에 저장되는 키, 값이 존재하는 작은 데이터 파일
자동 로그인, 오늘 하루 더 이상 안보기, 쇼핑몰의 장바구니 등등에서 사용
클라이언트에 300개까지 쿠키를 저장 가능
하나의 도메인 당 20개의 값만 가질 수 있다.

유지할 정보를 사용자 컴퓨터에 저장한다. 유효기간이 지나면 사라지고 정보 유출 가능성이 높다.

쿠키의 이름은 알파벳과 숫자로 구성해야하며 공백, 괄호, 특수기호는 포함이 불가능하다.
삭제하는 메소드는 존재하지 않으며 maxAge 가 ‘0’ 인 이름의 쿠키를 전송하면 된다.
maxAge 를 음수로 설정한다면 브라우저가 종료될 때 삭제시킬 수 있다.

스프링 프레임워크에서 사용시 어노테이션을 사용하면 된다. @CookeValue

세션(Session)

일정시간 동안 같은 브라우저로부터 들어오는 일련의 요구를 하나의 상태로 표현

서버에 저장하며 서버가 종료되거나 유효기간이 지나면 사라진다.

세션 유지 시간은 기본적으로 30분이다.

쿠키의 동작 방식

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

세션의 동작 방식

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

차이점

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