오늘은 클라이언트 사이드에 데이터를 저장하는 대표적인 방법인 쿠키와 로컬스토리지, 그리고 세션 스토리지에 대해 공부하였다. 이 세가지의 특징과 동작 방식, 장 단점에 대하여 조금 더 깊이 찾아보았다.
쿠키는 key=value;
형태로 이루어진, 로컬(브라우저)에 저장되는 데이터로, 문자열로 구성되어 있다.
http
헤더에 쿠키를 함께 담아 응답한다.http
헤더에 쿠키를 담아 함께 보낸다.console.log(document.cookie); // "username=John Doe; expires=Thu, 18 Dec 2013 12:00:00 UTC;
쿠키는 문자열로 이루어져 있기 때문에, key-value
를 찾아 쓰기 위해서는 첫 번째는 ;
로 나누어 파싱해야하고, 다시 =
으로 파싱해야하는 불편한 문제점을 갖고 있다.
2. 불필요한 정보까지 헤더에 담아 함께 전송해야한다.
쿠키는 문자열로 이루어져있는 key-value
쌍이 함께 존재하는 값이므로, 따로 자를 수 없고 함께 헤더에 담아서 보내야 한다. 서버에 보낼 필요가 없는 데이터들까지 보내기 때문에, 불필요한 용량을 차지한다는 단점이 존재, 헤더 크기가 커질 수록 응답에 필요한 시간이 증가할 수 밖에 없다.
3. 쿠키가 가질 수 있는 최대 크기는 4KB이다.
쿠키는 최대 300개까지 값을 가질 수 있고, 하나의 도메인 당 20개의 key-value 값을 가질 수 있다. 20개가 넘는 key
가 필요하다면 난감해질 수 있다.
4. XSS(cross-site-scripting) 공격에 취약하다.
XSS는, 서버가 제공하는 스크립트 파일이 아닌, 허가되지 않은 제3자가 임의로 스크립트를 실행하여 의도지 않은 동작을 발생시키는 공격을 말한다. document.cookie
를 통해 쿠키 값을 얻을 수 있었다. 이러한 쿠키 값을 이용하여 개인 식별 정보들을 저장하고 서버에 전송하므로, 제3의 사용자가 쿠키를 탈취하여 변조 및 본인으로 위장할 수 있는 위험이 있다.
http-only
옵션을 사용http-only
옵션을 사용할 경우, 오직 http
요청 시에만 쿠키 값을 읽을 수 있으며, 일반적인 자바스크립트 document.cookie
를 이용하여 쿠키의 값을 읽을 수 없다.요즘은 클라이언트 웹 페이지를 SPA(Single Page Application)으로 구현한다. 하나의 페이지에서 많은 작업들을 하기 위하여 서버와 AJAX(Asynchronous Javascript And XML)로 주로 통신하게 되는데, http-only의 쿠키에는 접근이 불가능하므로, 사용자 식별 등에 접근이 어려워 기능 구현에 많은 어려움을 겪을 수 있다.
LocalStorage
와 SessionStorage
모두 html5
에서 추가된 저장소이다. key
- value
로 이루어져있다. window(global)
객체에 포함되어 있으며, set(key, value)
, get(value)
등 편한 메소드로 쉽게 값을 얻거나 수정할 수 있다.
key-value
쌍으로 이루어져 있으며, 쿠키에 비해 값을 얻기 쉽다.key
, value
모두 문자열로만 저장한다. 따라서 어떤 객체를 저장할 때에는(배열 포함) JSON.stringify()
를 통해 객체를 문자열로 파싱하여 저장하고, 값을 꺼내 쓸때는 JSON.Parse()
를 이용하여 문자열로 변환된 객체를 다시 객체로 파싱하여 사용한다.오늘은 클라이언트 사이드에 데이터를 저장하는 쿠키 그리고 스토리지(Local, Session)에 대해 알아보았다. 주로 리액트를 사용하며 AJAX로 통신했기 때문에 Storage를 사용하여 데이터를 다루었지만, 아직까지 많은 브라우저들이 쿠키를 이용하여 정보를 다루고 있기 때문에 쿠키에 대해서 집중적으로 정리를 해보았다.
정리하면서 파생된 모르는 개념들을 한번 더 찾아봐야겠다.