기본적인 로컬 스토리지 사용법의 비중이 더 많지만.. 그 부분은 더 자세하게 설명된 블로그 글이 많을 것 같아 'SvelteKit에서 Local Storage 사용하기'로 제목을 지었습니다. 스벨트킷 관련 내용만 보고 싶으신 분들은 오른쪽 목차의 'SvelteKit에서 Local Storage 사용하기'로 빠르게 ㄱㄱ!
웹 스토리지 객체의 한 종류로, browser에 key-value 쌍을 반영구적으로 저장. 브라우저를 닫아도 유지되며(↔ 세션스토리지) 삭제하기 전까지 남아있음
client-side
렌더를 하기전에 server-side
렌더를 먼저 수행하기 때문에 localStorage is not defined
error가 날 수 있음import { browser } from '$app/environment'
if(browser)
localStorage.setItem('key', JSON.stringify('value'))
true
가 되는 boolean 값browser && localStorage.getItem('user')
스벨트킷 별 거 아닌 검색팁! 아마 Next.js를 쓰는 분들은 이와 비슷한 에러를 많이 겪어보지 않았나 싶다. 그런데 넥스트와 달리 스벨트킷은 정보가 많이 없다. localStorage를 바로 검색하기보다는 localStorage 속성을 포함하고 있는 window 객체를 검색하면 더 많은 결과를 얻을 수 있다. 아니면 넥스트로 검색해보고 원인의 힌트를 얻는 것도 도움이 될 수도 있겠다.(지금 생각한 거라 아직 안 해봤음)
=> 결론! 로컬 스토리지를 사용하려는 곳이 모두 콜백함수 속이기 때문에(사용자가 버튼을 눌렀을 때 뜨는 내용들을 저장한다거나..) 어딘가 찜찜한 browser는 사용하지 않고, 로컬 스토리지를 사용하기로 했다.
JSON.stringify() 사용하지 않은 경우: 코드 // 콘솔
localStorage.setItem('obj1', {obj1 : 'object1'}) // undefined
localStorage.getItem('obj') // '[object Object]'
localStorage.setItem('arr1', [1, 2, 3]) // undefined
localStorage.getItem('arr1') // '1,2,3'
JSON.stringify() 사용한 경우: 코드 // 콘솔
localStorage.setItem('obj2’, JSON.stringify({obj2 : 'object2'}))
localStorage.getItem('obj2') // '{"obj1":"object"}'
localStorage.setItem('arr2', JSON.stringify([1,2,3])) // undefined
localStorage.getItem('arr2') // '[1,2,3]'
JSON.parse()를 이용해 원래의 형태(객체, 배열)로 변환: 코드 // 콘솔
JSON.parse(localStorage.getItem('obj2')) // {obj1: 'object'}
JSON.parse(localStorage.getItem('arr2')) // (3) [1, 2, 3]
cf) 숫자 1을 넣으면 문자로 자동형변환되므로 getItem 결과 ! == 1
localStorage.arr // '1,2,3'
localStorage['setKey'] = 'setValue' // 'setValue'
localStorage.getItem('setKey') // 'setValue'
delete localStorage.setKey // true
delete localStorage.arr // true
브라우저마다 사용 가능한 용량이 다르지만 5MB 이상.
Lorem Ipsum의 데이터로 많은 양의 글씨를 넣어본 결과, 사파리, 크롬 모두 같은 용량에서 QuotaExceededError가 발생했다.
한글 데이터로 치면 250만 글자 정도 저장 가능하다고 볼 수 있다.