쿠키와 세션은 Http 프로토콜의 무상태성(stateless)이 가져오는 문제점을 해결할 수 있다. 무상태성은 리소스 낭비를 줄일 수 있지만 어떤 사용자가 접속했는지 정보 파악 등을 할 수 없다는 문제점이 있기 때문이다. 그럼 문제점을 해결할 수 있는데 두 가지의 차이점은 무엇인지 알아보자.
Cookie (쿠키) :
쿠키는 클라이언트에 저장되는 키와 값(key, value)이 들어있는 작은 데이터 파일이다. 서버에서 HTTP 응답 Header에 Set-Cookie 속성을 이용하여 클라이언트에 쿠키를 제공한다. 그럼 브라우저에 저장이 되고, 이후 해당 도메인에 대해 쿠키가 존재하면 웹 브라우저는 http 요청 시 요청 헤더에 쿠키를 함께 전달한다.
쿠키는 하나의 도메인 당 20개의 값만 가질 수 있고 하나의 쿠키 값은 4KB까지 저앙이 가능하며, 서버측에서 만료 날짜/시간을 지정하여 정해진 시간 동안 데이터(상태 정보)를 유지할 수 있다. 하지만 브라우저에서 document.cookie로 접근할 수 있고, 브라우저에 저장되기 때문에 보안에 취약하다. HttpOnly 속성을 이용해 접근을 불가능하게 막을 수는 있지만 쿠키에는 민감하거나 개인정보는 포함되지 않는 게 좋다.
사용목적 :
- 세션 관리 : 서버가 알아야할 정보들을 저장한다.
- 개인화: 사용자 선호 및 테마 등을 저장해 적절한 페이지를 보여줄 수 있다.
- 트래킹: 사용자 행동 기록 및 분석한다.
예시 :
지워지거나 조작되어도 문제가 없는 것들에 사용한다.
- 로그인 시, 아이디 자동완성
- 팝업창에서 메세지 하루 안 보기
- 장바구니 담기
Session (세션) :
세션은 쿠키와 달리 서버에 저장한다. 그렇기 때문에 쿠키에 비해서는 보안성이 상대적으로 좋지만 세션을 남발하면 서버에 부하가 걸릴 수 있다.
세션은 쿠키처럼 만료시간을 설정할 수도 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제되고, 서버에 저장하기 때문에 보안 면에서 보다 우수하다. 그래서 세션은 노출되어서는 안 되는 보안상 중요한 작업, 제공자가 직접 관리해야 하는 것에서 세션을 사용한다. 하지만 서버 저장공간의 일정 부분을 항상 차지하고 있어서 서버의 성능을 저하시킬 수 있으며, 쿠키보다는 속도가 비교적 느리다. (서버 쪽에서 처리하기 때문에)
동작 방식 :
- 클라이언트가 서버에 접속 시 세션 ID를 발급받는다.
- 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있는다.
- 클라리언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 서버에 전달해서 사용한다.
- 서버는 세션 ID를 전달받아서 세션 ID로 세션에 있는 클라이언트 정보를 가져온다.
- 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답한다.
Web Storage (웹 스토리지) :
웹 스토리지는 서버가 아닌, 클라이언트에 데이터를 저장할 수 있도록 지원하는 HTML5의 새로운 기능이다. 웹 스토리지에는 5MB의 저장공간을 가지고 있으며 로컬 스토리지 (local Storage)와 세션 스토리지 (session Storage)가 있다. 두 스토리지 모두 window객체 안에 들어 있고, Storage객체를 상속받기 때문에 메서드도 공통적으로 존재한다. 하지만 두 스토리지는 각각의 특성이 있어 선택적으로 사용할 수 있다.
Local Storage (로컬 스토리지) :
로컬 스토리지는 브라우저에 반영구적으로 데이터를 저장하며 사용자가 지우지 않는 한 브라우저를 종료해도 데이터가 유지된다. 하지만 도메인이 다른 경우에는 로컬 스토리지에 접근할 수 없다. 예를 들면, www.google.com의 로컬스토리지에 저장한 데이터를 www.naver.com에서 접근할 수 없다.
Session Storage (세션 스토리지) :
세션 스토리지는 각 세션마다 데이터가 개별적으로 저장된다. 예를 들어, 브라우저에서 여러 개의 탭을 실행하면 탭마다 개별적으로 데이터가 저장되는 것이다. 로컬 스토리지와는 다르게 세션을 종료하면 데이터기 자동으로 제거되며, 같은 도메인이라도 세션이 다르면 데이터에 접근할 수 없다.
참고:
'📍 CS > Network' 카테고리의 다른 글
CORS는 무엇인가?! (0) | 2021.07.10 |
---|