결론은 지속적인 데이터 교환을 위해 사용한다. HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초가 된다. 이 HTTP프로토콜의 특징은 클라이언트가 서버에게 Request를 보내고 서버가 클라이언트에게 Response를 보내면 접속을 종료하며 통신이 끝나면 상태 정보를 유지하지 않는다. 즉, 클라이언트의 로그인 정보나 브라우저에서 입력한 값 등이 페이지를 이동할 때 마다 초기화 된다. 이러한 문제점을 해결하기 위해 데이터 저장에 사용한다.
서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각이다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송한다.
쿠키의 동작과정
1. 클라이언트가 서버로 자원을 요청
2. 서버에서 쿠키를 생성
3. HTTP 헤더에 쿠키를 포함시켜 응답
4. 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관
5. 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
만료 날짜/시간을 지정하면 세션 쿠키로 저장된다.
만료 날짜/시간을 지정하지 않으면 항상 유지하라는 것으로 판단해 지속 쿠키에 저장된다.
보안이 취약하다는 쿠키의 한계점을 극복하기 위해 사용한다. 쿠키를 기반으로 하여 동작하기는 하지만 사용자 정보를 클라이언트 측이 아닌 서버 측에서 관리한다는 점이 다르다. 클라이언트는 서버로부터 서버에서 관리하고 있는 세션 정보를 찾기 위한 세션 ID만 전달받는다. 세션 정보를 저장하는 장소는 서버 메모리일수도 있지만 다중 서버 환경에서는 외부 저장소를 사용한다.
세션의 동작과정
1. 클라이언트가 서버에 접속 시 세션 ID를 발급 받음
2. 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
3. 클라리언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청
4. 서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라언트 정보를 가져와서 사용
5. 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답
쿠키(Cookie) | 세션(Session) | |
---|---|---|
저장 위치 | 클라이언트(=접속자 PC) | 웹 서버 |
저장 형식 | Text | Object |
만료 시점 | 쿠키 저장시 설정 (브라우저가 종료되도, 만료시점이 지나지 않으면 자동삭제되지 않음) | 브라우저 종료시 삭제 (기간 지정 가능) |
사용하는 자원(리소스) | 클라이언트 리소스 | 웹 서버 리소스 |
용량 제한 | 용량 제한 총 300개 하나의 도메인 당 20개 하나의 쿠키 당 4KB(=4096byte) | 서버가 허용하는 한 용량제한 없음 |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
보안 | 세션보다 안좋음 | 쿠키보다 좋음 |
세션을 사용하면 좋은데 왜 쿠키를 사용할까?
세션은 서버의 자원을 사용하기 때문에 무분별하게 만들다보면 서버의 메모리가 감당할 수 없어질 수가 있고 속도가 느려질 수 있기 때문에 쿠키가 유리한 경우가 있다.
서버가 아닌, 클라이언트에 데이터를 저장할 수 있도록 지원하는 HTML5의 새로운 기능이다.
기존 웹 환경에서 사용하는 쿠키와 매우 유사하지만 쿠키의 단점을 극복하는 개선점 등이 추가되어 도입되었다.
쿠키(Cookie) | 로컬 스토리지(Local Storage) | 세션 스토리지(Session Storage) | |
---|---|---|---|
용량 | 4kb | 10mb | 5mb |
브라우저 지원 | HTML4/HTML 5 | HTML 5 | HTML 5 |
접근 가능 | 모든 창 | 모든 창 | 동일한 탭 |
생명 주기 | 수동 설정 | 삭제되지 않음 (사용자가 의도적으로 직접 삭제할 수 있음) | 탭 닫을 때 |
저장소 위치 | 클라이언트(브라우저) 및 서버 | 클라이언트(브라우저) | 클라이언트(브라우저) |
웹의 요청과 함께 서버로 전송 | 예 | 아니오 | 아니오 |
세션 쿠키(Session cookies) | 지속 쿠키(Persistent cookies) | 로컬 스토리지(Local Storage) | 세션 스토리지(Session Storage) | |
---|---|---|---|---|
사용 예시 | 은행 웹 사이트의 개인정보 인증, 회원가입 입력 폼, 보안영역 접속 등 | 좀더 나은 사용자 경험을 위한 사용기록 추적, 오늘 이 창 보지 않음 체크 등 | 개인 PC에 사용하는 자동 로그인 기능, 장바구니, 블로그 글 임시저장 등 | 일회성 로그인, 블로그 글 에디터의 자동저장 기능 등 |
참고자료
1. 쿠키(Cookie)와 세션(Session)
2. 웹 저장소 쿠키와 스토리지
3. 웹 스토리지 vs 쿠키 vs 세션
4. 쿠키와 세션 개념