mitt - 컴포넌트간 단방향 통신 라이브러리

그냥차차·2024년 10월 23일
0
post-thumbnail

1. mitt 라이브러리에 대해

  • mitt 깃헙 링크
  • mitt는 가벼운 이벤트 미터(Event Emitter) 라이브러리임.
  • 이벤트 기반 통신을 쉽게 할 수 있게 해주고 보통은 컴포넌트 간 이벤트를 주고받아야 할 때 사용하는데, 복잡한 상태 관리 없이 단순한 이벤트 처리에 유리함.

2. mitt의 장점과 단점

ㄱ. 장점

  • 가벼움: mitt는 매우 가벼워서 성능에 부담이 거의 없음. 코드가 복잡해지지 않음.
  • 단순성: 몇 줄의 코드만으로 이벤트 등록, 발행, 해제 등을 할 수 있음. 복잡한 상태 관리가 필요 없을 때 유용함.
  • 컴포넌트 간 독립성: 이벤트를 통해 컴포넌트 간의 데이터 전달을 쉽게 할 수 있어서 props drilling을 피할 수 있음.

ㄴ. 단점

  • 전역 상태 관리 부재: mitt는 단순한 이벤트 기반 통신에 초점을 맞추기 때문에, 상태 관리 기능이 없음. 상태가 필요하면 따로 관리해줘야 함.
  • 의존성 추적 어려움: 이벤트가 발생하고 구독하는 부분이 분리되어 있기 때문에, 이벤트 흐름을 추적하기 어려울 수 있음. 특히 규모가 커질수록 디버깅이 까다로워짐.

3. 리액트에서 mitt 사용법

  • 리액트에서 mitt를 사용하는 방법은 매우 간단함.
  • 이벤트를 발행하는 컴포넌트와 이벤트를 구독하는 컴포넌트를 작성하면 되는데 mitt는 전역적으로 사용할 수 있는 이벤트 버스를 제공하기 때문에, 여러 컴포넌트 간 통신을 손쉽게 할 수 있음.
import React, { useEffect } from 'react';
import mitt from 'mitt';
const emitter = mitt();
function SenderComponent() {
  const handleClick = () => {
    emitter.emit('customEvent', '이벤트 데이터');
  };
  return <button onClick={handleClick}>이벤트 발행</button>;
}
function ReceiverComponent() {
  useEffect(() => {
    const handler = (message) => {
      console.log('받은 이벤트:', message);
    };
    emitter.on('customEvent', handler);
    return () => {
      emitter.off('customEvent', handler);
    };
  }, []);
  return <div>이벤트를 기다리고 있음</div>;
}
function App() {
  return (
    <div>
      <SenderComponent />
      <ReceiverComponent />
    </div>
  );
}
export default App;
  • 위 코드에서 SenderComponent는 버튼을 클릭하면 customEvent라는 이벤트를 발행하고, ReceiverComponent는 이 이벤트를 구독해서 처리함. 이벤트를 등록하고 해제하는 과정도 매우 간단함

4. props와의 차이점

  • 리액트에서 가장 기본적인 데이터 전달 방법은 props임. - 부모 컴포넌트에서 자식 컴포넌트로 데이터를 내려주는 방식인데, 이때 컴포넌트 간의 계층이 많아지면 props drilling 문제가 발생할 수 있는데, 이때 중간의 컴포넌트들이 그 데이터를 단순히 전달만 하기 위해서 props를 사용할 때 불편함이 커짐.
  • mitt는 이벤트 기반으로 데이터를 주고받기 때문에, props처럼 부모-자식 관계를 통해 데이터를 전달하지 않고도 필요한 컴포넌트끼리 데이터를 주고받을 수 있음.
  • props는 계층적 구조에 의존하고, mitt는 이벤트 발행과 구독에 의존하는 방식임.
  • 간단히 말하면
    props: 부모 → 자식 방향으로 데이터 전달.
    mitt: 컴포넌트 간 독립적으로 이벤트 발생 및 처리.

5. 전역 상태 관리와의 차이점

  • 전역 상태 관리 라이브러리(Redux, Zustand 등)와 mitt의 가장 큰 차이점은 상태 관리 여부임.
  • 전역 상태 관리 라이브러리는 상태를 저장하고 관리함으로써 여러 컴포넌트가 일관성 있게 동일한 데이터를 사용할 수 있게 해주는데 이때, 상태가 변경되면 해당 상태를 참조하고 있는 모든 컴포넌트가 다시 렌더링됨.
  • mitt는 이러한 상태 관리 기능이 없고, 단순히 이벤트 기반 통신만을 제공함. 이벤트를 발행하면 구독하는 컴포넌트가 해당 이벤트에 반응하는 식이라, 상태가 바뀌어도 이를 추적하거나 일관성 있게 관리해주는 기능은 없음.
  • 전역 상태 관리: 상태를 저장하고 이를 일관되게 관리함. 상태 변경에 따른 재렌더링이 자동으로 처리됨.
    mitt: 단순한 이벤트 시스템을 제공. 상태를 저장하지 않으며, 단지 이벤트가 발생하고 구독하는 흐름만 제공함.
  • 정리하자면 mitt는 가벼운 이벤트 기반 통신에 적합하고, 빠르게 이벤트를 주고받을 때 유리함.
  • 전역 상태 관리 라이브러리는 애플리케이션 전체 상태를 관리하고, 상태 변경에 따른 데이터 일관성을 유지하는 데 유리함.
  • 따라서 작은 프로젝트나 일시적 이벤트 처리에는 mitt가 유용하고, 복잡한 데이터 흐름 관리나 상태 유지가 필요한 경우에는 전역 상태 관리 라이브러리를 사용하는 것이 더 적합함.
profile
개발작

0개의 댓글