탭 간 저장소 이벤트 처리하기
저장소 이벤트 리스너를 사용하여 다른 브라우저 탭의 localStorage 변경에 반응합니다.
탭 간 저장소 이벤트 처리하기은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
탭 간 오래된 상태 문제
사용자가 앱을 두 탭에서 열어 두고 탭 A에서 값을 업데이트하면 탭 B에는 여전히 이전 상태가 표시됩니다. 두 탭은 localStorage를 공유하더라도 각각 메모리에 별도의 리액트 상태를 갖습니다.
조정하지 않으면 두 탭이 현재 값에 대해 서로 다른 상태를 갖게 됩니다.
다른 탭에서 발생하는 저장소 이벤트
브라우저는 localStorage가 변경될 때마다 동일한 출처의 다른 탭에서 storage 이벤트를 전달합니다. 중요한 점은 변경을 수행한 탭에서는 이 이벤트가 발생하지 않는다는 것입니다.
이것이 바로 탭 A가 무언가를 업데이트했다는 사실을 탭 B가 알아차리는 데 필요한 신호입니다.
addEventListener로 수신하기
useEffect에서 window.addEventListener('storage', handler)를 호출하고 이를 제거하는 정리 함수를 반환합니다. 이렇게 하면 컴포넌트가 탭 간 변경 사항을 구독합니다.
효과는 마운트될 때 한 번 실행되어야 하므로 비어 있거나 안정적인 의존성 배열이 적절합니다.
StorageEvent 속성
이벤트 객체에는 변경된 키를 나타내는 key, 변경 전후의 문자열인 oldValue와 newValue, 영향을 받은 저장소 객체인 storageArea가 들어 있습니다.
null 키와 널 값은 저장소 전체가 삭제되었다는 뜻입니다.
해당 키로 필터링하기
저장소 이벤트는 출처의 모든 키에 대해 발생하므로, 처리기는 반응하기 전에 event.key === yourKey를 확인해야 합니다. 관련 없는 키를 무시하면 불필요한 재렌더링을 방지할 수 있습니다.
또한 event.newValue가 널인 경우, 즉 키가 삭제된 경우도 처리하십시오.
이벤트 발생 시 리액트 상태 업데이트
관련된 변경 사항이 도착하면 event.newValue를 파싱하고 설정 함수를 호출해 리액트 상태를 업데이트하십시오. 이렇게 하면 두 번째 탭이 다른 곳에서 발생한 변경 사항과 동기화됩니다.
useLocalStorage 훅과 결합하면 탭 간 연결이 완성됩니다.
BroadcastChannel 대안
BroadcastChannel을 사용하면 동일한 출처의 탭끼리 postMessage로 직접 메시지를 주고받을 수 있습니다. 저장소 이벤트를 이용하는 것보다 깔끔하며 localStorage에 쓰지 않고도 작동합니다.
이름으로 채널을 만들고 업데이트를 게시한 다음 message 이벤트를 수신합니다.
저장소를 위한 useSyncExternalStore
리액트는 외부 저장소를 동시성에 안전한 방식으로 구독할 수 있도록 useSyncExternalStore를 제공합니다. 이 훅의 구독 함수를 storage 이벤트에 연결하고 스냅샷을 localStorage 읽기에 연결할 수 있습니다.
이렇게 하면 외부 저장소의 업데이트가 리액트 렌더링과 올바르게 통합됩니다.
탭 간 로그아웃 사용 사례
대표적인 애플리케이션 사례는 모든 곳에서 로그아웃하는 것입니다. 한 탭에서 인증 플래그를 삭제하면 다른 탭의 저장소 이벤트가 이를 감지하고 해당 탭을 로그인 화면으로 리디렉션합니다.
이렇게 하면 오래된 탭이 인증된 콘텐츠를 계속 표시하는 것을 방지할 수 있습니다.
탭 간 다크 모드 동기화
테마도 이에 잘 맞습니다. 한 탭에서 다크 모드를 전환하면 localStorage에 기록되고, 다른 탭에서 저장소 이벤트가 발생하며, 다른 탭의 테마 상태도 즉시 일치하도록 업데이트됩니다.
사용자는 어느 탭으로 전환하더라도 일관된 화면을 볼 수 있습니다.
함께 구성하기
탭 간 동기화는 storage 이벤트를 수신하거나 BroadcastChannel을 사용하고, 해당 키만 필터링한 다음, 새 값으로 리액트 상태를 업데이트하는 과정으로 요약할 수 있습니다.
안정적이고 동시성에 안전한 구독에는 useSyncExternalStore가 현대적인 선택입니다.
빠른 확인
탭 간 이벤트에 대한 이해를 확인해 보십시오.
복습
storage 이벤트가 다른 탭에서 발생한다는 점과 이벤트를 수신하고 키로 필터링하며 상태를 업데이트하는 방법을 배웠습니다. 또한 BroadcastChannel과 useSyncExternalStore라는 대안도 살펴보았습니다.
모든 탭에서 로그아웃하기와 탭 간 다크 모드 동기화 같은 실제 사용 사례도 확인했습니다.
AI 튜터와 함께 React을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 88
- 레슨
- 324
자주 묻는 질문
“탭 간 저장소 이벤트 처리하기” 강의는 무료인가요?
네 — “탭 간 저장소 이벤트 처리하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“탭 간 저장소 이벤트 처리하기”에서 뭘 배우나요?
저장소 이벤트 리스너를 사용하여 다른 브라우저 탭의 localStorage 변경에 반응합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
React Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“탭 간 저장소 이벤트 처리하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- React에서 localStorage 읽기 및 쓰기
- localStorage와 상태 동기화하기
- 탭 간 저장소 이벤트 처리하기
- sessionStorage, IndexedDB와 적절한 API 선택하기