HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🐣
프론트엔드 데브코스 3기 교육생
/
📚
3기 스터디 가이드
/
📒
CS 학습 스터디
/
Cookie, local/sessionStorage(민종)

Cookie, local/sessionStorage(민종)

선정 이유

  • 면접에서 종종 등장하는 키워드
  • 곧 있을 최종 프로젝트에 도움이 될 수 있을만한 키워드

Cookie?

쿠키는 브라우저에 저장되는 작은 크기의 문자열로, HTTP 프로토콜의 일부이다.
보통은 웹 서버에 의해 만들어지며, 서버가 HTTP 응답 헤더의 Set-Cookie에 내용을 넣어 전달하면 브라우저에서 자체적으로 저장한다.
동일한 도메인(서버)로 요청을 할 때마다 쿠키의 내용을 함께 전달한다.
클라이언트 식별과 같은 인증에 가장 많이 쓰인다.

읽기

document.cookie 로 값을 읽을 수 있다.
name - value 쌍으로 이루어져 있으며 ; 로 구분된다.
원하는 값을 찾기 위해 정규식이나 배열 관련 메서드를 사용할 수 있지만… 글쎄?

쓰기

접근자 프로퍼티인 document.cookie 에 값을 할당하면 된다.
document.cookie = "user=minjong;"; // 이름이 'user'인 쿠키의 값만 갱신함 console.log(document.cookie);
이름과 값에 제약이 없기 때문에 유효성을 일관성 있게 처리하기 위해 encodeURIComponent() 로 이스케이프 하는 것이 좋다.
 
❗
쿠키의 제약사항
  • name=value 쌍은 4KB를 넘을 수 없습니다. 이 용량을 넘는 정보는 쿠키에 저장할 수 없다.
  • 도메인 하나당 저장할 수 있는 쿠키의 개수는 한정되어있다.

domain

쿠키는 도메인 별로 관리된다.
domain 옵션에 아무 값도 넣지 않았다면, 쿠키를 설정한 도메인에서만 쿠키에 접근할 수 있다.
blog.minjongdev.com 에서 쿠키가 설정됐다면 www.github.com 에서는 접근할 수 없다.
domain 옵션에 루트 도메인을 설정하는 경우 서브도메인에서 접근가능하다.
minjongdev.com 라고 명시적으로 설정했다면 blog.minjongdev.com 에서도 접근 가능하다.

path

path 옵션과 일치하는 경로나 하위 경로에 있는 페이지만 쿠키에 접근 가능하다.
path=/ 처럼 루트로 설정하는 경우 해당 도메인의 모든 페이지에서 쿠키에 접근이 가능하다.
 
❗
백엔드 API 주소가 api.devcourse.com 인 경우
  • localhost 에서는 확인할 수 없다.
  • devcourse.vercel.app 주소로 웹사이트 배포한 경우 확인할 수 없겠지만 프록시 설정을 통해 동일한 도메인으로 보내는 것 처럼 처리할 수 있다면 확인 가능하다.
    • Set-Cookie 할 때 도메인 옵션을 명시적으로 넣었는지, path 옵션은 제대로 설정했는지 확인이 필요하다.
    • samesite=strict 옵션을 확인해야한다.

expires, max-age

expires 나 max-age 옵션이 지정되어있지 않으면, 브라우저가 닫힐 때 쿠키도 함께 삭제된다.
expires 나 max-age 옵션을 설정하면 브라우저를 닫아도 쿠키가 삭제되지 않는다.

secure

HTTPS로 통신하는 경우에만 쿠키를 전송하는 옵션이다.

httpOnly

클라이언트 측 스크립트가 쿠키를 사용할 수 없게 하는 옵션으로, document.cookie 를 통해 쿠키를 볼 수도 없고 조작할 수도 없게된다.

Storage?

브라우저에서 제공하는 저장공간으로 localStorage 와 sessionStorage 를 사용하면 브라우저에 key - value 형태로 값을 저장할 수 있다.
쿠키와 다르게 웹 스토리지 객체는 네트워크 요청 시 서버로 전송되지 않는다.
웹 스토리지 객체는 오리진별로 관리 되기 때문에 프로토콜이나 서브 도메인이 다르면 데이터에 접근할 수 없다.

localStorage

오리진이 같은 경우 데이터는 모든 탭과 창에서 공유된다.
브라우저나 OS가 재시작하더라도 데이터가 삭제되지 않는다.

sessionStorage

현재 활성화 되어 있는 탭 내에서만 데이터가 유지된다.
하나의 탭에 여러 iframe이 있는 경우엔 데이터가 공유된다.
페이지를 새로 고침할 때는 데이터가 보존 되지만, 탭을 닫는 경우에는 삭제된다.
 

storage event

localStorage 나 sessionStorage의 데이터가 갱신되면 storage 이벤트가 발생한다.
storage 이벤트는 이벤트를 직접 발생시킨 스토리지를 제외하고, storage에서 접근 가능한 window 객체 전부에서 일어난다.
같은 페이지가 두 개의 브라우저 창에 띄워 있는 경우 아래 코드를 실행하면?
// window.addEventListener('storage', () => {})와 같다. window.onstorage = event => { if (event.key != 'now') return; alert(event.key + ':' + event.newValue + " at " + event.url); }; localStorage.setItem('now', Date.now());

참고

HTTP 쿠키 - HTTP | MDN
HTTP 쿠키(웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각입니다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송합니다. 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용합니다. 이를 이용하면 사용자의 로그인 상태를 유지할 수 있습니다.
HTTP 쿠키 - HTTP | MDN
https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies
HTTP 쿠키 - HTTP | MDN
Window.localStorage - Web APIs | MDN
The keys and the values stored with localStorage are always in the UTF-16 string format, which uses two bytes per character. As with objects, integer keys are automatically converted to strings. localStorage data is specific to the protocol of the document.
Window.localStorage - Web APIs | MDN
https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
Window.localStorage - Web APIs | MDN
Window.sessionStorage - Web APIs | MDN
The read-only sessionStorage property accesses a session object for the current origin. sessionStorage is similar tolocalStorage ; the difference is that while data in localStorage doesn't expire, data in sessionStorage is cleared when the page session ends. Whenever a document is loaded in a particular tab in the browser, a unique page session gets created and assigned to that particular tab.
Window.sessionStorage - Web APIs | MDN
https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
Window.sessionStorage - Web APIs | MDN
localStorage와 sessionStorage
웹 스토리지 객체(web storage object)인 localStorage와 sessionStorage 는 브라우저 내에 키-값 쌍을 저장할 수 있게 해줍니다. 이 둘을 사용하면 페이지를 새로 고침하고( sessionStorage의 경우) 심지어 브라우저를 다시 실행해도( localStorage 의 경우) 데이터가 사라지지 않고 남아있습니다. 이 부분은 조만간 뒤에서 살펴보기로 합시다.
localStorage와 sessionStorage
https://ko.javascript.info/localstorage
localStorage와 sessionStorage