본문 바로가기
React

useEffect

by 들판에 날라다니는 솜 2026. 6. 10.

useEffect란?

useEffect는 컴포넌트가 렌더링된 이후 특정 작업을 실행하기 위한 React Hook이다. API 호출, 이벤트 등록, 타이머 설정, 브라우저 제목 변경, 외부 라이브러리 연동처럼 화면을 그리는 것 외에 추가적으로 수행해야 하는 작업을 처리할 때 사용한다.

React 컴포넌트는 상태(State)가 변경될 때마다 다시 렌더링된다. 버튼을 클릭할 때마다 컴포넌트가 다시 실행되며 렌더링이 출력되는데, 렌더링이 끝난 후 특정 작업을 실행하고 싶을 때 바로 useEffect를 사용한다.


기본 구조

useEffect(() => {
  // 실행할 코드

  return () => {
    // 정리(Cleanup) 코드
  };
}, [dependencies]);

실행 순서

1. 컴포넌트 함수 실행
2. JSX 반환
3. 화면(DOM) 렌더링
4. 브라우저에 화면 표시
5. useEffect 실행

즉, useEffect는 화면이 먼저 그려진 뒤 실행된다.

예를 들어 페이지에 접속했을 때 데이터를 불러오는 코드를 useEffect 안에 작성하면,
사용자는 먼저 화면을 볼 수 있고 그 이후에 API 요청이 실행된다.

React는 화면 렌더링을 우선 처리한 뒤 부수 효과(Side Effect)를 실행하기 때문에
렌더링 과정에 영향을 주지 않고 안전하게 외부 작업을 수행할 수 있다.


 

의존성 배열(Dependency Array)

1. 지정하지 않을 시 : 매 렌더링마다 실행

useEffect(() => {
  console.log("실행");
});

의존성 배열을 작성하지 않으면 렌더링될 때마다 실행된다.

 

2. [] : 최초 한 번만 실행

useEffect(() => {
  console.log("최초 실행");
}, []);

빈 배열을 전달하면 컴포넌트가 처음 마운트될 때만 실행된다.

대표적으로 API 호출 시 자주 사용한다.

useEffect(() => {
  fetchUsers();
}, []);

 

3. [특정 값] : 특정 값이 변경될 때 실행

useEffect(() => {
  console.log("count 변경");
}, [count]);

count 값이 변경될 때마다 실행된다.

function App() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    console.log(`현재 값: ${count}`);
  }, [count]);

  return (
    <button onClick={() => setCount(count + 1)}>
      증가
    </button>
  );
}

Cleanup 함수

useEffect는 컴포넌트가 사라지기 전에 정리 작업도 할 수 있다.

useEffect 안에는 return으로 반환하는 함수가 클린업 함수이다. 

useEffect(() => {
  const timer = setInterval(() => {
    console.log("실행 중");
  }, 1000);

  return () => {
    clearInterval(timer);
  };
}, []);

return 안에 작성한 함수는 다음 상황에서 실행된다.

  • 컴포넌트가 언마운트될 때
  • Effect가 다시 실행되기 직전

useEffect 사용 원칙

1. 화면 렌더링만으로 해결되면 useEffect를 쓰지 않는다

2. 외부 시스템과 동기화할 때 사용한다

useEffect의 본래 목적이다.

예시

  • API 호출
  • 이벤트 등록
  • WebSocket 연결
  • localStorage 저장
  • 타이머 생성
  • 외부 라이브러리 연동

3. 의존성 배열을 정확히 작성한다

4. 정리(Cleanup)가 필요한 작업은 반드시 정리한다

5. 무한 루프를 조심한다

6. 사용자 이벤트는 useEffect에서 처리하지 않는다

'React' 카테고리의 다른 글

React 컴포넌트 구조 및 설계  (0) 2026.06.10
React 탄생  (0) 2026.06.09
useState  (0) 2026.04.13
React 렌더링(간단버전)  (0) 2026.04.13