240528 TIL

Jun Young Kim·2024년 5월 28일
0

TIL

목록 보기
29/63

전역 상태 관리랑 무엇인가?

전역 상태 관리는 애플리케이션 전체에서 공유되는 상태(state)를 관리하는 방법을 말합니다. 이는 주로 대규모 애플리케이션에서 사용되며, 여러 컴포넌트나 모듈 간에 데이터를 일관성 있게 유지하기 위해 필요합니다. 전역 상태를 효율적으로 관리하면 데이터 흐름을 명확하게 하고, 상태 변화를 추적하기 쉬워집니다.

전역 상태 관리의 필요성

  • 데이터 일관성 유지: 여러 컴포넌트가 동일한 데이터를 참조할 때, 데이터의 일관성을 유지하는 것이 중요합니다.
  • 중복 코드 감소: 상태를 중앙에서 관리함으로써 중복 코드를 줄이고, 상태 변경 로직을 일관되게 유지할 수 있습니다.
  • 디버깅 용이: 상태 변화가 중앙에서 관리되기 때문에, 버그를 추적하고 디버깅하기가 쉬워집니다.
  • 예측 가능성 증가: 상태 변화를 예측 가능하게 만들어 애플리케이션의 복잡도를 줄입니다.

전역 상태 관리 방법

  1. 기본적인 방법
    1.1 전역 변수 사용
let globalState = { user: null, theme: 'light' };

function setUser(user) {
  globalState.user = user;
}

function setTheme(theme) {
  globalState.theme = theme;
}

function getState() {
  return globalState;
}

1.2 이벤트 기반 시스템

const state = {};
const listeners = [];

function subscribe(listener) {
  listeners.push(listener);
}

function notify() {
  listeners.forEach(listener => listener(state));
}

function setState(newState) {
  Object.assign(state, newState);
  notify();
}
  1. 라이브러리 사용
    2.1 Redux
    - 기본 개념: Redux는 애플리케이션의 상태를 하나의 중앙 저장소에서 관리하며, 상태는 오직 액션(action)에 의해 변경됩니다.
  • 액션: 상태 변경을 설명하는 객체입니다.
const incrementAction = { type: 'INCREMENT' };
  • 리듀서: 현재 상태와 액션을 받아 새로운 상태를 반환하는 함수입니다.
function counterReducer(state = { count: 0 }, action) {
  switch (action.type) {
    case 'INCREMENT':
      return { count: state.count + 1 };
    default:
      return state;
  }
}
  • 스토어: 상태를 보관하고, 액션을 디스패치하여 상태를 변경하는 객체입니다.
import { createStore } from 'redux';
const store = createStore(counterReducer);

store.subscribe(() => console.log(store.getState()));
store.dispatch(incrementAction); // { count: 1 }

2.2 Context API

  • 기본 개념: React의 Context API는 전역적인 데이터를 컴포넌트 트리 전체에 전달할 수 있는 방법을 제공합니다.
  • Context 생성 및 제공:
import React, { createContext, useContext, useState } from 'react';

const GlobalStateContext = createContext();

export const GlobalStateProvider = ({ children }) => {
  const [state, setState] = useState({ user: null, theme: 'light' });
  return (
    <GlobalStateContext.Provider value={[state, setState]}>
      {children}
    </GlobalStateContext.Provider>
  );
};

export const useGlobalState = () => useContext(GlobalStateContext);
  • Context 사용:
import React from 'react';
import { useGlobalState } from './GlobalStateProvider';

const UserProfile = () => {
  const [state, setState] = useGlobalState();
  
  return (
    <div>
      <p>User: {state.user}</p>
      <button onClick={() => setState({ ...state, user: 'John' })}>Set User</button>
    </div>
  );
};

전역 상태 관리의 장단점

장점

  • 중앙 집중화: 상태를 한 곳에서 관리하여 데이터 흐름을 쉽게 추적할 수 있습니다.
  • 예측 가능성: 상태 변화를 예측 가능하게 만들어 버그를 줄이고 유지보수를 용이하게 합니다.
  • 디버깅 도구: 많은 전역 상태 관리 라이브러리는 디버깅 도구를 제공하여 상태 변화를 시각적으로 추적할 수 있습니다.

단점

  • 복잡성 증가: 작은 애플리케이션에서는 과도한 복잡성을 초래할 수 있습니다.
  • 러닝 커브: 일부 라이브러리는 학습 곡선이 가파를 수 있습니다.
  • 성능 문제: 잘못된 사용은 성능 저하를 초래할 수 있습니다.

결론

전역 상태 관리는 복잡한 애플리케이션에서 필수적인 패턴입니다. 상황에 맞는 적절한 도구와 방법을 선택하는 것이 중요합니다. 작은 프로젝트에서는 Context API나 기본적인 상태 관리를, 대규모 애플리케이션에서는 Redux 같은 라이브러리를 사용하는 것이 좋습니다. 전역 상태 관리의 장단점을 이해하고, 프로젝트 요구사항에 맞게 적용하는 것이 성공적인 애플리케이션 개발의 열쇠입니다.

0개의 댓글