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