June 05, 2020
스토리지 객체는단순한 key-value 저장소이며, 이는 객체와 비슷하다. 하지만 이 데이터들은 페이지 로딩에도 온전하게 유지된다. key와 value는 항상 문자열이며 정수로 키를 사용할 경우 이는 자동으로 string으로 변경된다 Storage.getItem() 과 Storage.setItem()ㅁ서드를 사용할 수 있다.
데이터베이스를 사용하지 않고 데이터를 임시적인 용도로 저장 할 때 사용
localstorage.setting = ‘value’;
localstorage[‘setting’] = ‘value’
localstorage.setItem(‘setting’, ‘value’)
위와같이 값을 설정할 수 있는데 pitfaills와 관련된 사항을 막기 위해 Web Storage API(setItem, getItem, removeItem, key, length)를 사용하는것이 권장된다.
window.localStorage.setItem(’key’, ‘value’); // 값 세팅
window.localStorage.getItem(’key’); // 해당 키 가져오기
window.localStorage.removeItem(’key’); // 해당 키 지우기
window.localStorage.clear() // 전부 클리어
로컬스토리지를 지원하는 브라우저는 windows 객체에 localStorage라는 속성이 존재한다. 그러나 여러 이유로 에외가 발생할 수 있는데, 존재하더라도 다양한 브라우저가 로컬스토리지를 비활성화하는 설정을 제공하기 때문에 브라우저가 지원해도 스크립트에서 사용 하지 못할 수 있다.
공식적으로 안내해주는 사용 가능한지 여부를 감지하는 함수
function storageAvailable(type) {
var storage
try {
storage = window[type]
var x = '__storage_test__'
storage.setItem(x, x)
storage.removeItem(x)
return true
} catch (e) {
return (
e instanceof DOMException && // Firefox를 제외한 모든 브라우저
(e.code === 22 || // Firefox
e.code === 1014 || // Firefox를 제외한 모든 브라우저
// 코드가 존재하지 않을 수도 있기 떄문에 이름 필드도 확인
e.name === 'QuotaExceededError' || // Firefox
e.name === 'NS_ERROR_DOM_QUOTA_REACHED') && // 이미 저장된 것이있는 경우에만 QuotaExceededError를 확인
storage &&
storage.length !== 0
)
}
}
그냥 보기만 해보면 브라우저별로 까다롭다. 위 함수는 아래와 같이 사용한다.
if (storageAvailable('localStorage')) {
// 사용가능
} else {
// 사용불가능
}
세션 스토리지는 탭 브라우징이나 새로 실행한 브라우저끼리는 별도의 저장 영역이다. 만약 window.open으로 새 창을 띄운다면 새로운 브라우저 컨텍스트로 인식하여 세션스토리지가 따로 생성,관리되지만 최초 데이터는 복사된다.
스토리지API는 HTML5이후로 나왔다고 한다. 뭐 쿠키의 단점을 보완해서 나왔다고 하긴 하는데 비교해보면 다음과 가다.
Cookie
Local Storage
Session Storage
등등 쿠키의 경우 값을 저장하는 메서드나 지우는 메서드들을 시간과 관련해서 저장하고 지우는데, 쿠키를 사용할때 더 깊게 정리해봐야겠다.