JavaScript

로컬 스토리지 localStorage 와 세션 스토리지 sessionStorage

남희정 2023. 8. 28. 20:58

이번 프로젝트에서 처음으로 사용해본 로컬스토리지 🤔 네트워크 강의 때 공부 했었는데 막상 개발자분이 세션 스토리지와의 차이점을 여쭤봤는데 대답을 하지 못했음.. 반성하고 다시 공부해보자!

`localStorage`

웹 애플리케이션에서  클라이언트 측에서 데이터를 저장하고 관리하는 데 사용하는 기능 중 하나.  사이트 및 앱이 만료날짜 없이 웹 브라우저에 키-값 쌍을 저장할 수 있도록 하는 속성(Property)이다. 사용자가 브라우저를 닫거나 컴퓨터를 다시 시작한 후에도 저장된 데이터는 유지된다.

localStorage는 window 객체의 속성 중 하나로 브라우저 창과 상호작용하고 제어할 수 있는 전역 객체(Global object)로서 사용된다. 또한 window 속성과 메서드와 함께 사용할 수 있다. 

 

`Window.localStorage`

`Window.localStorage`는 JavaScript에서 사용되는 속성(Property)으로, 로컬 스토리지 매커니즘을 제공한다. 이 속성은 Window 인터페이스의 일부로, DOM 문서를 포함하는 창을 나타낸다. Window 인터페이스는 다양한 함수, 생성자, 객체 및 네임스페이스를 포함하고 있다. Window.localStorage는 읽기 전용 속성으로 데이터를 저장하는 로컬 스토리지 객체에 대한 참조를 반환하며, 이 데이터는 원본에서만 접근할 수 있다.

 

쿠키는 서버와 클라이언트 간의 지속적인 데이터 교환을 위해 만들어졌기에 서버로 전송되지만, 두 스토리지의 경우 서버로 자동 전송되지 않는다. 

localStorage를 console에서 읽어봤다.
localStorage의 origin에서 조회할 수 있다.

특징

문자열, boolean, 숫자, null, undefined 등을 저장할 수 있지만 모두 문자열로 반환된다. 키도 문자열로 변환된다.

객체는 저장이 되지 않고 toString 메소드가 호출된 형태로 저장된다.

이를 위해 JSON.stringify와 JSON.parse를 이용하여 객체 통째로 저장하는 방법이 있다.

 

// 저장할 객체
const user = {
  name: 'Nami',
  email: 'nami@example.com',
  age: 100,
};

// 객체를 JSON 문자열로 변환
const userJSON = JSON.stringify(user);

// 로컬 스토리지에 저장
localStorage.setItem('user', userJSON);

// 로컬 스토리지에서 데이터 가져오기
const storedUserJSON = localStorage.getItem('user');

// JSON 문자열을 객체로 파싱
const storedUser = JSON.parse(storedUserJSON);

// 저장된 객체 사용
console.log(storedUser.name);  // Nami
console.log(storedUser.email); // nami@example.com
console.log(storedUser.age);   // 100

 

✔️ 시크릿 브라우징 세션에서 로드된 데이터는 마지막 비공개 탭이 닫히면 삭제됨.

✔️  오프라인에서도 데이터에 엑세스 할 수 있다. 인터넷 연결 없이도 사용할 수 있다.

✔️  쿠키는 최대 4KB, 로컬 스토리지는 최대 5~ 10MB의 데이터를 저장할 수 있음.

✔️  동기적이라 호출된 각 작업이 차례대로 실행된다. 처리하는 데이터에 따라 문제가 생길 수 있음.

✔️  문자열만 저장되어 변환 작업이 필요하다. 이 또한 데이터 양에 따라 문제가 될 수 있음.

 

Window.sessionStorage

sessionStorage 조회

✔️ localStorage와 모든 메서드가 같다. 단지 데이터의 영구성이 없을 뿐이다.

✔️ 단일 세션에 대한 데이터만 저장한다.

✔️ 특정 탭에서만 유효하기 때문에 탭 또는 브라우저가 열린 동안만 지속된다.
✔️ 동일한 URL로 여러 탭/창을 열면 각 탭/창에 대한 세션 저장소가 생성됨.
✔️ 탭을 복제하면 탭의 세션스토리지가 새 탭에 복사된다.
✔️ 탭/창을 닫으면 세션이 종료되고 세션스토리지의 객체가 지워짐!

 

임시로 데이터 저장을 할 수 있어 일회성 데이터에 적합하다. 또한 사용자의 로그인 상태나 장바구니 내용 및 임시 작업 데이터를 관리할 때 사용된다. 그리고 닫을 때 삭제 되므로 보안 측면으로는 로컬 스토리지보다 좋다고 할 수 있다. 

 

 


🤔 보안성을 강화하기 위해 어떤 방법이 있을지 추후에 알아봐야겠다.

 

[Window: localStorage property]

[Window: sessionStorage property]

[View and edit local storage]

[localStorage in JavaScript: A complete guide]

[로컬스토리지, 세션스토리지]