Files
2nd/01_Archive/2026-04-20/useEffect 클린업(Cleanup).md
T

4.5 KiB

id, category, confidence_score, tags, last_reinforced, github_commit
id category confidence_score tags last_reinforced github_commit
P-REINFORCE-AUTO-55865D 10_Wiki/💡 Topics/Programming & Language 0.90
auto-reinforced
2026-04-20 [P-Reinforce] Continuous Worker - useEffect 클린업(Cleanup)

useEffect 클린업(Cleanup)

📌 한 줄 통찰 (The Karpathy Summary)

useEffect 훅 내부에서 반환(return)하는 클린업 함수는 컴포넌트가 화면에서 사라질 때(Unmount) 또는 다음 이펙트가 실행되기 전에 호출되어, 불필요하게 남아있는 백그라운드 작업이나 자원 점유를 해제함으로써 애플리케이션의 메모리 누수(Memory Leak)를 방지하는 핵심 메커니즘입니다.

📖 구조화된 지식 (Synthesized Content)

1. 클린업의 필요성과 메모리 누수 방지 React 컴포넌트가 언마운트되더라도, useEffect 내에서 실행된 타이머, 이벤트 리스너, 외부 네트워크 연결 등은 자동으로 종료되지 않습니다. 클린업 작업을 누락하면 컴포넌트가 파괴된 후에도 숨겨진 백그라운드에서 이벤트가 계속 수신되거나 연산이 실행되어, 시간이 지날수록 메모리 점유율이 증가하고 결국 앱을 느려지게 하거나 크래시를 유발합니다.

2. 주요 클린업 대상 및 적용 사례 성능 저하를 막기 위해 다음과 같은 상황에서 반드시 클린업 함수를 작성해야 합니다.

  • 타이머 및 애니메이션 프레임 해제: setInterval을 호출했다면 클린업에서 clearInterval을 실행하고, 게임 루프 등을 위해 requestAnimationFrame을 사용했다면 cancelAnimationFrame을 호출하여 백그라운드 동작을 멈춰야 합니다.
  • 이벤트 리스너 제거: window.addEventListener('resize', handleResize)mousemove 이벤트를 등록했다면, 반드시 window.removeEventListener로 구독을 해제해야 렌더링되지 않는 컴포넌트에서 이벤트 핸들러가 실행되는 것을 막을 수 있습니다.
  • 외부 네트워크 및 워커 종료: 웹소켓(WebSocket)이나 웹 워커(Web Worker) 인스턴스를 생성했다면, 연결이 열린 채로 메모리를 낭비하지 않도록 클린업 시점에 ws.close()worker.terminate()를 호출해야 합니다.
  • 거대한 객체 참조 해제 (GC 지원): useRef 등을 사용해 거대한 데이터 세트 등 큰 객체를 참조하고 있다면, 언마운트 시 명시적으로 참조에 null을 할당(processedRef.current = null)하여 자바스크립트 가비지 컬렉터(GC)가 해당 메모리를 정상적으로 회수할 수 있도록 처리해야 합니다.
  • WebGL 및 GPU 자원 해제 (Three.js/R3F): 일반적인 힙 메모리와 달리 GPU 메모리에 올라간 자원들은 자동으로 가비지 컬렉션되지 않습니다. 따라서 React Three Fiber 등에서 생성한 3D 모델의 컴포넌트가 사라질 때는, 클린업 함수에서 명시적으로 지오메트리, 재질, 텍스처 등에 대해 .dispose() 메서드를 호출하여 VRAM 누수를 방지해야 합니다.

⚠️ 모순 및 업데이트 (Contradictions & RL Update)

  • 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
  • 정책 변화: Programming & Language 분야의 자동 자산화 수행.

🔗 지식 연결 (Graph)