Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

new_bird-hyun

Next.js에서 Zustand와 SWR을 활용한 실시간 데이터 동기화 전략 본문

코딩 공부

Next.js에서 Zustand와 SWR을 활용한 실시간 데이터 동기화 전략

새혀니 2025. 3. 14. 22:02

 

  • SWR과 Zustand를 결합하여 클라이언트 및 서버 데이터를 동기화하는 방법
  • 데이터 정합성을 유지하면서 상태를 업데이트하는 전략
  • 실시간 데이터 패칭과 캐싱을 최적화하는 기법

npm install swr zustand

 

store/useDataStore.js (Zustand 전역 상태)

import { create } from 'zustand';

const useDataStore = create((set) => ({
  data: null,
  updateData: (newData) => set({ data: newData }),
}));

export default useDataStore;

 

components/LiveData.js (SWR을 활용한 실시간 데이터 패칭)

'use client';

import useSWR from 'swr';
import useDataStore from '../store/useDataStore';

const fetcher = (url) => fetch(url).then((res) => res.json());

export default function LiveData() {
  const { data, error } = useSWR('https://jsonplaceholder.typicode.com/posts/1', fetcher, {
    refreshInterval: 5000, // 5초마다 데이터 갱신
  });

  const updateData = useDataStore((state) => state.updateData);

  if (error) return <p>데이터를 불러오는 중 오류 발생</p>;
  if (!data) return <p>로딩 중...</p>;

  updateData(data);

  return (
    <div>
      <h2>실시간 데이터</h2>
      <p>제목: {data.title}</p>
      <p>내용: {data.body}</p>
    </div>
  );
}

 

components/GlobalState.js (Zustand 전역 상태 확인)

'use client';

import useDataStore from '../store/useDataStore';

export default function GlobalState() {
  const data = useDataStore((state) => state.data);

  return (
    <div>
      <h2>전역 상태 데이터</h2>
      {data ? <p>{data.title}</p> : <p>데이터 없음</p>}
    </div>
  );
}

 

app/page.js (전체 페이지 구성)

import LiveData from '../components/LiveData';
import GlobalState from '../components/GlobalState';

export default function Home() {
  return (
    <div>
      <LiveData />
      <GlobalState />
    </div>
  );
}

 

 

  • SWR을 활용하면 자동으로 데이터를 갱신하고 캐싱할 수 있음
  • Zustand와 결합하면 전역 상태에서 최신 데이터를 유지하면서 UI를 최적화 가능