상태 정보 유지 기술
등장배경
HTTP 프로토콜은 상태를 유지하지 않는 프로토콜이다. 이 한계를 보완하기 위해 쿠키와 세션이 등장했다.
쿠키(Cookie)
쿠키는 클라이언트 로컬에 저장되는, 키와 값으로 이루어진 작은 데이터 파일이다. 자동 로그인, ‘오늘 하루 더 이상 안 보기’, 쇼핑몰의 장바구니 등에 쓰인다. 클라이언트에는 최대 300개까지 쿠키를 저장할 수 있고, 도메인 하나당 20개의 값만 가질 수 있다.
유지할 정보를 사용자 컴퓨터에 저장하기 때문에, 유효기간이 지나면 사라지고 정보가 유출될 가능성도 상대적으로 높다.
쿠키의 이름은 알파벳과 숫자로만 구성해야 하며 공백, 괄호, 특수기호는 쓸 수 없다. 별도의 삭제 메소드는 없고, maxAge가 0인 이름의 쿠키를 다시 전송하는 방식으로 지운다. maxAge를 음수로 설정하면 브라우저가 종료될 때 함께 삭제되도록 만들 수 있다.
스프링 프레임워크에서는 @CookieValue 어노테이션으로 쿠키 값을 받을 수 있다.
세션(Session)
세션은 일정 시간 동안 같은 브라우저에서 들어오는 일련의 요청을 하나의 상태로 묶어 표현한다. 쿠키와 달리 서버에 저장하며, 서버가 종료되거나 유효기간이 지나면 사라진다. 세션 유지 시간은 기본적으로 30분이다.
쿠키의 동작 방식
- 클라이언트가 서버에 요청을 보낸다.
- 유지해야 할 정보가 있으면 WAS(Web Application Server)가 쿠키를 key-value 형태로 생성한다.
- 응답 결과에 쿠키를 포함시켜 클라이언트에 전송한다.
- 클라이언트는 기존에 가지고 있거나 새로 받은 쿠키를 요청할 때마다 함께 전송한다.
- WAS는 전달받은 쿠키로 사용자가 유지해야 할 정보를 파악한다.
세션의 동작 방식
- 클라이언트가 서버에 요청을 보낸다.
- 웹서버나 WAS가 세션키를 생성한다.
- 세션키를 이용한 저장소(서버 메모리·RAM, 파일 시스템, 데이터베이스, 분산 캐시 시스템)를 만든다.
- 서버는 이 세션키를 담은 쿠키를 포함해 클라이언트에 응답한다.
- 클라이언트는 요청할 때마다 이 쿠키를 함께 전송한다.
- 서버는 쿠키에 담긴 세션키로 이전에 만들어둔 저장소를 활용한다(자바에서는
HttpSession).
차이점
| 특징 | 세션 | 쿠키 |
|---|---|---|
| 저장 위치 | 서버 | 브라우저 |
| 데이터 보안 | 서버에 저장되어 상대적으로 안전하다. | 브라우저에 저장되어 민감한 정보는 노출 위험이 있다. |
| 만료 시간 | 서버 설정에 따라 다르며, 주로 일정 시간 비활동 시 만료된다. | 설정된 만료 시간까지 유효하다. 브라우저 종료 시 삭제 가능하다. |
| 저장 용량 | 서버 메모리나 디스크 용량에 의존한다. | 각 도메인별로 약 4KB 제한 |
| 전송 방법 | 세션 아이디를 쿠키 또는 URL 파라미터로 전송한다. | 쿠키는 요청마다 자동으로 전송한다. |
댓글

