JS 로컬 스토리지(2024-11-25 수업)

짝은별·2024년 11월 25일

JS

목록 보기
18/23

web storage

우선 웹 스토리지가 무슨 역할을 하는지 알고 이를 어떤 방식으로 활용해야하는지 살펴보자

예를들어 어떠한 글을 쓰거나, 장바구니에 상품을 저장하는 종류의 행동들은
서버에 저장되어 사용자가 해당 페이지를 벗어나도 기록이 유지가 되어야 UX적으로 편리함을 느낄 수 있다
이를 구현하기 위해선 서버와 소통을 하고 데이터를 받아오는 통신을 거쳐야 한다
하지만 서버와 통신하는 횟수를 증가시키면 그 만큼에 비용이 발생할 뿐더러 비효율적인 통신은 성능 저하를 야기한다

따라서 이를 서버에 저장하는 방식이 아닌 JS에서 browser에 저장하여 불필요한 호출을 줄일 수 있다
이를 web storage에 저장한다라고 칭한다

그렇다면 우선 local storage를 살펴보자

local storage

JS는 기본적으로 렌더링이 되면, 페이지를 이동하면 새로 시작하여 선언한 변수들이 초기화된다
따라서 이를 JS에 저장하려고 하면 초기화가 일어나 정상적인 접근이 불가능하다

따라서 이를 외부(browser)에 저장하여 그 곳에서 꺼내쓸 수 있도록 유도하는 것이다
이때 저장되는 곳을 local storage라고 칭한다

그렇다면 local storage장점은 무엇일까?
우선 가장 큰 장점은 용량이 상당히 크다는 것이다

쿠키의 경우 개당 4KB의 크기를 가진다
하지만 local storage5MB의 크기를 가진다
따라서 많은 양의 정보를 저장할 수 있다는 장점이 있다

또한 같은 오리진의 경우 모든 탭과 창에서 공유하기에 접근이 용이하다
서버에 저장하지 않고, 브라우저에 저장하여 불필요한 통신을 줄여준다
가장 큰 장점으로는 만약 해당 탭종료되거나 재시작하는 경우 데이터가 파기되지 않고 저장되어있다

사용법

사용법도 매우 간단하다

localStorage.setItem('key','value');
localStroage.getItem('key');

setItemgetItem으로 setter와 getter를 동작시킨다
이때 localStoragewindow 객체에 포함되어있다

결과를 살펴보면 다음과 같다

이는 개발자도구(F12) -> Application -> Local storage에서 확인할 수 있다

저장되는 keyvaluestring type으로 저장된다
만약 value다른 형식의 타입을 사용했다면 자동적으로 string으로 변환된다

객체나 배열과 같은 값들을 저장하고 싶다면
이전에 언급했던 JSON.stringify()를 사용해 문자열로 변환하고
getter를 사용할땐 JSON.parse()를 사용해 원래의 타입으로 불러올 수 있다

const obj = { a:1 , b:2 , c:3 };

localStorage.setItem('obj',JSON.stringify(obj));

console.log(JSON.parse(localStorage.getItem('obj')));


저장문자형식으로 하고 불러올 땐 객체로 반환되는 것을 확인할 수 있다

이번엔 local storage의 간단한 특성을 살펴보자

출력을 해보면 다음과 같다
이때 iterator가 없기에 for...of 사용이 불가능하다
하지만 for...in은 사용이 가능하다(key와 value가 있으므로)
하지만 늘 그랬든 for...in추천하지 않는다

이번엔 삭제에 관한 코드를 살펴보자

localStorage.removeItem('key');

key에 해당하는 value가 삭제된 것을 확인할 수 있다
이때 key1:vale1 , key2:value2, key3:value3을 저장하고 한 번에 지워보겠다

localStorage.setItem('key1','value1');
localStorage.setItem('key2','value2');
localStorage.setItem('key3','value3');

localStorage.clear();


첫 번째는 저장을 끝마친 직후이다
이후 clear를 사용한 local storage의 내부이다

이처럼 한 번에 지우는 것도 가능하다

local storage방대하다고는 했지만 5MB라서 얼마나 방대한지 체감이 안될 것이다
핵심은 local storagestring type만 저장한다는 점에 있다
string type으로만 5MB를 채우려면 2~500만자 라고 생각하면 된다

매우 많은 양의 정보를 저장할 수 있다는 의미이다

새로고침탭을 닫았다 여는 작업은 사진으로 보여주기에는 애매한 부분이 있어 직접 해보기를 권장한다

session storage

session storage도 역시 local storage와 마찬가지로 web storage이다
하지만 local storage와의 차이점은 무엇인가?

session storage휘발성이다
즉, 현재 탭 내에서만 유지된다는 의미이다

localStorage.setItem('key1','value1');
localStorage.setItem('key2','value2');
localStorage.setItem('key3','value3');

이는 세션 스토리지에 잘 저장된 모습이다
그렇다면 여기서 새로고침을 해보겠다

변화는 없다
이는 현재 탭에서 이동하지 않고 위치가 유지되었기 때문이다
그렇다면 다른 탭에서도 공유되는지 확인해보자

분명 같은 이름의 탭이지만 local storage와는 다르게 공유를 하지 못하는 모습이다
탭을 껐다가 다시 열어도 똑같이 공유를 하지 못하는 모습을 확인할 수 있다

이처럼 한 페이지에서 새로고침에만 유효하게 작동시킬 때 session storage를 사용할 수 있겠다 라는 생각이 들었다

쿠키

쿠키는 우선 저장되는 위치browser가 아니다
이는 브라우저 별로 다른데 크롬의 경우를 살펴보자
크롬의 쿠키 저장위치는 다음과 같다

C:\Users\\AppData\Local\Google\Chrome\UserData\Default\Cookies

여기에 저장되는 쿠키데이터베이스 포맷이기에 메모장으로 접근하는 것은 불가능하다

쿠키저장경로, 유효시간, 이름, 값을 가지고 있다
이는 사용자브라우저를 종료했다가 다시 사용하는 경우에도 유효하다

어떤 홈페이지에는 이런 종류의 팝업이 존재할 것이다.

만약 오늘 그만보기를 눌렀다면 이는 하루동안 나타나지 않는다
이때 쿠키를 사용하여 만료시간을 정한다면 PC를 재부팅해도 유효하다

그렇다면 사용법에 대해 살펴보자

let cookieString = `${encodeURIComponent(name)}=${encodeURIComponent(value)}
					;path=${path}
					;expires=${date.toUTCString()}`

document.cookie = cookieString;

특이한 점namevalue저장할때 암호화(encoding)와 복호화(decoding)를 거쳐서 쿠키를 해석한다는 점과
시간밀리세컨즈(ms)단위계산하여 저장해야한다는 점이 있다
실제 이 코드는 그런 계산을 하지 않았기에 정상적인 작동은 하지 않을 것으로 예상된다

하지만 보안이 요구되는 곳에는 쿠키를 사용하지 않는다

사용법복잡해 통상적으로는 local storage를 많이 사용한다

profile
FE(철 아님) 개발자 꿈꾸다

0개의 댓글