리액트

로컬 스토리지

hyyyeon 2025. 1. 29. 15:57

브라우저에는 크게 두 개의 스토리지가 있다.
로컬 스토리지와 세션 스토리지

 

Web Storage

HTML5 스펙에서는 웹 스토리지라는 것이 추가됨

 

Cookie

네트워크 요청 시 서버로 함께 저장되는 문자열 데이터
쿠키도 일종의 저장소, 사용자의 활동 정보를 브라우저에 기록해뒀다가 서버에 전달

  • 쿠키와 네트워크 요청이 많아지면 비효율이 발생함.
    => 쿠키는 모든 네트워크 요청에 포함되기 때문
  • 로컬 스토리지와 세션 스토리지는 네트워크 요청에 포함되지 않기 때문에 쿠키와 다르게 비효율X

Local Storage

key-value 쌍으로 데이터를 저장하고 조회할 수 있는 데이터 저장소
서버로 전달되지 않음
지우지 않는 이상 브라우저나 탭을 닫았다 열어도 유지됨

Session Storage

key-value 쌍으로 데이터를 저장하고 조회할 수 있는 데이터 저장소
서버로 전달되지 않음
같은 탭 안에서는 데이터가 유지되지만, 탭을 닫거나 브라우저를 닫으면 데이터가 지워짐

 


로컬 스토리지 관련 함수

localStorage.setItem() : 로컬 스토리지의 값을 저장하는 함수
함수 호출시 getItem() 사용

  • 문자열 값만 저장됨. (문자열이 아닌 것은 문자열로 변환해서 저장됨)
ex 코드) 
localStorage.setItem('name', 'steve')
localStorage.getItem('name')
-> 'steve'

// 숫자도 문자열로 변환하여 저장
localStorage.setItem('age', 100)
localStorage.getItem('age')
-> '100'

// object를 문자열 형태로 변경하여 저장
localStorage.setItem('test', {'test': 123})
localStorage.getItem('test')
-> '[object Object]'

 

 

JSON.stringify() : 오브젝트 형태를 스토리지에 저장할 때 사용
문자열 형태(json 형태)로 바꿔줌

ex 코드) 
JSON.stringify({'test': 123})
-> '{"test": 123}'

localStorage.setItem('test', JSON.stringify({'test': 123}))
localStorage.getItem('test')
-> '{"test": 123}'

 

JSON.parse() : 문자열 json데이터를 object로 변환

JSON.parse(localStorage.getItem('test'))
-> {test: 123}

 

localStorage가 브라우저 어디에 저장이 되는지 확인
크롬 개발자도구(f12) -> 어플리케이션 -> 스토리지 -> 로컬스토리지 에서 확인가능. 수정도 가능


 

타이핑한 문자 하나하나를 저장하기 위해 코드에서 setItem이 여러번 호출됨 -> 로컬스토리지에 빠르게 입력, 저장 -> 성능에 영향 -> 최적화를 위해 함수를 묶어서 한번에 처리.
=> 디바운스 기법 (디바운스 라이브러리)
Lodash 사이트에서 debounce 검색 후 다운

터미널)
npm install --save lodash.debounce
// --save : package.json에 로데시 디바운스를 명시해줌
app.js)
const debouncedSetItem = debounce(setItem, 5000);
// 타이핑을 안한지 5초 뒤에 SetItem 실행
// debounce 함수를 통해 SetItem에 Debounce가 적용된 함수를 리턴해줌

 

'리액트' 카테고리의 다른 글

이벤트 종류  (0) 2025.01.29
JSX  (0) 2025.01.29
리엑트의 뜻과 특징  (1) 2025.01.29