둘 다 effect를 실행하지만 브라우저 페인트를 기준으로 서로 다른 시점에 실행되며 — 그 타이밍 차이가 핵심입니다.
- **
useEffect**는 브라우저가 페인트한 후에 실행됩니다. 비동기적이고 논블로킹입니다. 거의 모든 것에 사용하세요(데이터, 구독, 로깅). - **
useLayoutEffect**는 DOM이 변경된 후이지만 브라우저가 페인트하기 전에 동기적으로 실행됩니다. 보이는 깜빡임을 피하기 위해 동일한 프레임에서 레이아웃을 읽고 DOM을 변경해야 할 때 사용하세요.
text
render → DOM 업데이트 → [useLayoutEffect 실행] → 브라우저 페인트 → [useEffect 실행]
