useEffect와 cleanup 실행 순서

토글과 상태 변경을 관찰하면 effect는 ‘렌더마다 실행되는 코드’가 아니라 외부 자원의 시작과 종료를 맞추는 계약임이 보인다.

01 · mount

화면 반영 뒤 effect

컴포넌트가 DOM에 반영된 뒤 타이머·구독 같은 외부 작업을 시작한다.

02 · deps 변경

다음 동기화를 예약한다

의존성 값이 달라진 렌더가 반영되면 effect를 새 조건으로 갱신해야 한다.

03 · cleanup →…

이전 연결을 먼저 끊는다

이전 cleanup을 실행한 다음 새 effect를 실행해 구독이나 타이머가 겹치지 않게 한다.

04 · unmount

마지막 cleanup만 남는다

컴포넌트가 사라질 때 마지막 연결을 해제하며 새 effect는 더 실행하지 않는다.

핵심콘솔 확인: 시작 로그와 정리 로그를 한 쌍으로 두면 누수와 중복 실행을 쉽게 찾을 수 있다. effect가 자원을 만들었다면 cleanup은 같은 자원을 정확히 해제해야 한다.