1일 1CS(Computer Science)

useEffect가 호출되는 시점에 대해 설명해 주세요.

표자 2025. 5. 8. 09:09

useEffect가 호출되는 시점 이해하기 🚀

React의 useEffect 훅은 컴포넌트 생명주기의 특정 시점에 자동으로 호출되는 강력한 도구입니다.

마운트 시점 - 컴포넌트가 처음 나타날 때 📥

컴포넌트가 화면에 처음 렌더링된 직후에 useEffect가 실행됩니다. 이 시점은 초기 데이터를 가져오거나 외부 API에 연결하기에 완벽한 타이밍입니다.

function ServerStatusPanel() {
  const [servers, setServers] = useState([]);
  
  useEffect(() => {
    // 컴포넌트가 처음 나타날 때 서버 상태 데이터 가져오기
    fetchServerStatus().then(data => setServers(data));
  }, []); // 빈 배열은 마운트 시에만 실행됨을 의미
  
  return <ServerList data={servers} />;
}

업데이트 시점 - 의존성이 변경될 때 🔄

useEffect의 두 번째 매개변수로 의존성 배열을 전달하면, 이 배열 내의 값들이 변경될 때마다 효과가 다시 실행됩니다.

function RackMonitor({ rackId }) {
  const [temperature, setTemperature] = useState(null);
  
  useEffect(() => {
    // rackId가 변경될 때마다 해당 랙의 온도 데이터 갱신
    const timer = setInterval(() => {
      fetchRackTemperature(rackId).then(temp => setTemperature(temp));
    }, 5000);
    
    return () => clearInterval(timer); // 정리 함수
  }, [rackId]); // rackId가 변경될 때마다 실행
  
  return <TemperatureDisplay value={temperature} />;
}

매 렌더링마다 - 의존성 배열 생략 시 🔁

의존성 배열을 생략하면 컴포넌트가 렌더링될 때마다 useEffect가 실행됩니다. 하지만 이는 성능 문제를 일으킬 수 있어 필요한 경우에만 사용해야 합니다.

function NetworkTrafficWidget() {
  // 매 렌더링마다 실행 (권장하지 않음)
  useEffect(() => {
    logComponentRender();
  }); // 의존성 배열 없음
  
  return <TrafficChart />;
}

언마운트 시점 - 컴포넌트가 사라질 때 🗑️

컴포넌트가 화면에서 제거될 때, useEffect 내에서 반환한 함수(정리 함수)가 호출됩니다. 이는 이벤트 리스너 제거, 타이머 정리, 구독 취소 등의 작업에 이상적입니다.

function AlertSystem() {
  useEffect(() => {
    const subscription = subscribeToAlerts(handleAlert);
    
    // 컴포넌트가 사라질 때 실행되는 정리 함수
    return () => {
      subscription.unsubscribe();
      console.log("알림 구독 해제됨");
    };
  }, []);
  
  return <AlertPanel />;
}

정리 ✨

  • 마운트 시 (🏗️): 컴포넌트가 처음 나타난 직후 ([] 빈 의존성 배열)
  • 업데이트 시 (🔄): 의존성 배열의 값이 변경될 때 ([value1, value2, ...])
  • 언마운트 시 (👋): 컴포넌트가 사라지기 직전 (정리 함수 실행)
  • 매 렌더링 시 (⚠️): 의존성 배열 생략 시 (성능 주의!)

 


 

useEffect가 호출되는 시점에 대해 설명해 주세요.

프론트엔드와 관련된 질문이에요.

React의 useEffect는 컴포넌트의 특정 시점에 자동으로 호출되는 훅으로, 크게 컴포넌트가 마운트, 업데이트, 언마운트되는 시점에 호출됩니다.

먼저, useEffect는 컴포넌트가 마운트될 때, 즉, 처음 렌더링되고 나서 호출됩니다. 이때 데이터 초기화나 외부 API 호출, 구독 설정 등의 작업을 실행할 수 있습니다. 이처럼 useEffect는 컴포넌트가 처음 마운트될 때 필요한 초기 작업을 수행할 수 있도록 해줍니다.

 

또한, useEffect는 의존성 배열에 지정된 값이 변경될 때마다 다시 호출됩니다. 이때, useEffect의 return 값으로 지정된 클린업 함수가 이전 props 및 state와 함께 먼저 호출된 후, 본문의 실행 로직이 업데이트된 props 및 state와 함께 실행됩니다.
두 번째 인자로 주어지는 의존성 배열은 useEffect가 어떤 상태나 props의 변화에 반응할지를 결정합니다. 예를 들어 useEffect(() => {...}, [count])처럼 count 상태가 의존성 배열에 있을 경우, count 값이 변경될 때마다 useEffect가 호출됩니다. 이를 통해 특정 상태나 props가 변경될 때마다 필요한 동작을 수행하도록 할 수 있으며, 컴포넌트의 변화에 따라 동적으로 실행되는 로직을 설정할 수 있습니다. 단, 의존성 배열을 넘기지 않을 경우에는 매 렌더링마다 호출됩니다.

 

마지막으로, 컴포넌트가 언마운트될 때 useEffect의 return 값으로 지정된 클린업 함수가 호출됩니다. 이 정리 함수를 이용하여 이벤트 리스너 제거, 타이머 해제, 구독 취소 등의 작업을 수행할 수 있습니다. 이를 통해 useEffect를 통해 발생한 부수효과를 정리하는 것입니다.

 

요약하자면, useEffect는 컴포넌트가 처음 렌더링된 후, 의존성 배열의 값이 변경될 때, 그리고 컴포넌트가 언마운트될 때 호출됩니다.

728x90