웹 브라우저 저장소 - WebStorage
Web Storage
-
HTML5부터 제공하는 기능으로, 특정 데이터를 서버가 아닌 클라이언트 웹브라우저 저장할수 있도록 제공하는 기능이다.
-
Web Storage의 종류로는 LocalStorage와 SessionStorage 가 있다.
-
Cookie와 비슷한 기능이며, Web Storage는 key/value 쌍으로 데이터를 저장하고, key를 기반으로 데이터를 조회한다. 영구저장소(LocalStorage)와 임시저장소(SessionStorage)를 따로 두어 데이터의 지속성을 구분할 수 있어 응용 환경에 맞는 선택이 가능하다.
-
Web Storage는 쿠키와 마찬가지로 사이트의 도메인 단위로 접근이 제한된다. 예를 들면, A도메인에서 저장한 데이터는 B도메인에서 조회할 수 없다. 이는 데이터의 보안 측면에서 당연하다.
Web Storage의 특징
- 저장된 데이터가 클라이언트에 존재할 뿐 서버로 전송은 이루어지지않으므로 서버 전송이 없다. 이는 네트워크 트래픽 비용을 줄여준다.
- 문자열 뿐만 아니라 객체정보를 저장할 수 있다. 문자열 기반 데이터 이외에 구조화된 객체를 저장할 수 있다.
- 용량의 제한이 없다.
- 만료 기간의 설정이 없어서 한번 저장한 데이터는 영구적으로 저장이 가능하다.
Web Storage의 종류
Web Storage는 데이터의 지속성과 관련하여 두가지 용도의 저장소를 제공한다.
- LocalStorage
- 사용자가 데이터를 지우지 않는 이상, 브라우저나 OS를 종료해도 계속 브라우저에 남아있음 (영구성)
단, 동일한 브라우저를 사용할 때만 해당
- 지속적으로 필요한 데이터 저장(자동 로그인 등)
- SessionStoraege
- 데이터가 오리진 뿐만 아니라 브라우저 탭에도 종속되기 때문에, 윈도우나 브라우저 탭을 닫을 경우 제거됨
- 일시적으로 필요한 데이터 저장(일회성 로그인 정보, 입력폼 저장 등)
웹 브라우저 저장소 - Cookie
Cookie
- 클라이언트(브라우저)에 저장되는 키와 같이 들어있는 작은 파일이다.
- 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.
- 클라이언트에 300개까지 쿠키저장 가능, 하나의 도메인당 20개의 값만 가질 수 있으며, 하나의 쿠키값은 4KB까지 저장이 가능하다.
- Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.
- 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request 시에 Request Header를 넣어서 자동으로 서버에 전송한다.
Cookie의 동작 방식
-
클라이언트가 페이지 요청
-
서버에서 쿠키를 생성
-
HTTP 헤더에 쿠키를 포함시켜 응답
-
브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있다
-
같은 요청을 할 경우 HTTP헤더에 쿠키를 함께 보낸다
-
서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답한다.
Cookie의 사용 예
-
방문 사이트에서 로그인 시, "아이디와 비밀번호를 저장하시겠습니까?"
-
쇼핑몰의 장바구니 기능
-
자동로그인, 팝업에서 "오늘 더 이상 이 창을 보지 않음" 체크
Web Storage와 Cookie의 비교
- Cookie는 매번 서버로 전송된다.
- 웹사이트에서 쿠키를 설정하면 이후 모든 웹 요청은 쿠키 정보를 포함해 서버로 전송된다. Web Storage는 저장된 데이터가 클라이언트에 존재할 뿐 서버로 전송되지는 않는다. 이는 네트워크 트래픽 비용을 줄여준다.
- Web Storage는 단순 문자열을 넘어(스크립트) 객체정보를 저장할 수 있다.
- 문자열 기반 데이터 외에 체계적으로 구조화된 객체를 저장할 수 있다. 이는 개발 편의성을 제공해주는 장점이다.(단, 브라우저의 지원 여부를 확인해봐야 한다.)
- Web Storage는 용량의 제한이 없다.
- 쿠키는 개수와 용량에 제한이 있다. 클라리언트에 최대 300개의 쿠키를 저장할 수 있으며, 하나의 사이트(도메인)에서는 최대 20개를 저장할 수 있다. 또한, 하나의 쿠키값은 최대 4KB로 제한되어 있다.
그러나 Web Storage에는 제한이 없다. 쿠키도 하위키를 이용하면 이러한 제한을 일부 해소할 수는 있으나, 대용량으로 쿠키를 저장할 일은 없다.
- Web Storage는 영구 데이터 저장이 가능하다.
- 쿠키는 만료일자를 지정하게 되어있어 언젠가 제거 된다. 만약 만료일자를 지정하지 않으면 세션쿠키가 된다. 만일 영구 쿠키를 원한다면 만료일자를 굉장히 멀게 설정하여 해결할 수 있다.
Web Storage는 만료기간의 설정이 없다. 즉, 한 번 저장한 데이터는 영구적으로 존재하게 된다.
웹 서버 저장소 - Session
Session
- 사용자 정보를 파일 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
- 서버에서 클라이언트를 구분하기 위해 세션 ID를 부여하며, 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.
- 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정 가능하다.
- 데이터를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다.
Session의 동작 방식
-
클라이언트가 서버에 접속 시 세션 ID를 발급받는다.
-
클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있는다.
-
클라이언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 서버에 전달해서 사용한다.
-
서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라이언트 정보를 가져온다.
-
클라리언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답한다.
Session의 사용 예
- 로그인 같이 보안상 중요한 작업을 수행할 때 수행
Cookie와 Session의 비교
- 데이터 저장위치: 쿠키는 클라이언트, 세션은 서버
- 보안: 저장위치 때문에 쿠키는 스니핑에 당할 우려가 있지만, 세션은 쿠키를 이용해 세션 아이디만 저장하고 서버에서 처리하기때문에 보안성은 쿠키<세션
**스니핑: 네트워크의 중간에서 남의 패킷 정보를 도청하는 해킹 유형의 하나.
- 라이프 사이클: 쿠키는 브라우저를 종료해도 만료기간이 남아있으면 존재, 세션은 브라우저 종료 시 만료기간에 상관없이 종료
- 속도: 쿠키>세션
개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.