# [[React 컴파일러 (React Compiler)]] ## πŸ“Œ Brief Summary React 컴파일러(React Compiler, 이전 λͺ…μΉ­ 'React Forget')λŠ” λΉŒλ“œ νƒ€μž„μ— React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μžλ™μœΌλ‘œ μ΅œμ ν™”ν•΄μ£ΌλŠ” 도ꡬ이닀 [1-4]. κ°œλ°œμžκ°€ μˆ˜λ™μœΌλ‘œ μž‘μ„±ν•˜λ˜ `useMemo`, `useCallback`, `React.memo` λ“±μ˜ λ©”λͺ¨μ΄μ œμ΄μ…˜ μž‘μ—…μ„ μ»΄νŒŒμΌλŸ¬κ°€ μ½”λ“œλ₯Ό λΆ„μ„ν•˜μ—¬ ν•„μš”ν•œ 곳에 μžλ™μœΌλ‘œ μ‚½μž…ν•œλ‹€ [2, 3]. 이λ₯Ό 톡해 λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ λ°©μ§€ν•˜κ³  μ½”λ“œμ˜ 가독성을 높이며, λ©”λͺ¨μ΄μ œμ΄μ…˜ λˆ„λ½μ΄λ‚˜ 였용으둜 μΈν•œ μ„±λŠ₯ μ €ν•˜λ₯Ό 효과적으둜 ν•΄κ²°ν•œλ‹€ [4-6]. ## πŸ“– Core Content - **μž‘λ™ 원리**: React μ»΄νŒŒμΌλŸ¬λŠ” Babel λ˜λŠ” SWC ν”ŒλŸ¬κ·ΈμΈ ν˜•νƒœλ‘œ λ™μž‘ν•˜λ©° λΉŒλ“œ λ‹¨κ³„μ—μ„œ μ½”λ“œλ₯Ό λ³€ν™˜ν•œλ‹€ [7-9]. Abstract Syntax Tree(AST)λ₯Ό λΆ„μ„ν•˜μ—¬ 데이터 흐름을 μΆ”μ ν•˜κ³ , 각 값을 정적(Static), λ°˜μ‘ν˜•(Reactive), νŒŒμƒ(Derived)으둜 λΆ„λ₯˜ν•œ λ’€ 졜적의 μœ„μΉ˜μ— λ©”λͺ¨μ΄μ œμ΄μ…˜ 경계λ₯Ό μžλ™μœΌλ‘œ μ‚½μž…ν•œλ‹€ [1, 10, 11]. λ‹¨μˆœνžˆ 전체 μ»΄ν¬λ„ŒνŠΈλ₯Ό μΊμ‹±ν•˜λŠ” 것을 λ„˜μ–΄, κ°œλ³„ JSX μš”μ†Œμ™€ λ‚΄λΆ€ 계산 μž‘μ—…κΉŒμ§€ μ„Έλ°€ν•˜κ²Œ(granular) μ΅œμ ν™”ν•˜λŠ” 것이 νŠΉμ§•μ΄λ‹€ [12, 13]. - **μ£Όμš” μž₯점**: μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ΄ μœ λ°œν•˜λŠ” 개발자의 인지적 λΆ€λ‹΄κ³Ό 'μ˜μ‘΄μ„± λ°°μ—΄ μ§€μ˜₯(Dependency Array Hell)'을 μ œκ±°ν•˜μ—¬ μ½”λ“œλ₯Ό κΉ”λ”ν•˜κ²Œ μœ μ§€ν•  수 μžˆλ‹€ [2, 6, 13]. μ‹€μ œ ν”„λ‘œλ•μ…˜ ν™˜κ²½(Meta, Sanity Studio, Wakelet λ“±)μ—μ„œ μ μš©ν•œ κ²°κ³Ό 초기 λ‘œλ“œ μ‹œκ°„ 단좕, μƒν˜Έμž‘μš© μ§€μ—° μ‹œκ°„(INP) κ°œμ„ , λ¦¬λ Œλ”λ§ 횟수 60% κ°μ†Œ λ“±μ˜ κ΄„λͺ©ν•  λ§Œν•œ μ„±λŠ₯ ν–₯상이 μž…μ¦λ˜μ—ˆλ‹€ [14-16]. - **단점 및 ν•œκ³„**: 일뢀 μ„œλ“œνŒŒν‹° 라이브러리(예: TanStack Query λ“± λ Œλ”λ§λ§ˆλ‹€ μ˜λ„μ μœΌλ‘œ μƒˆλ‘œμš΄ 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” ν›…)와 ν˜Έν™˜μ„± λ¬Έμ œκ°€ λ°œμƒν•˜μ—¬ 컴파일러의 μ΅œμ ν™”κ°€ 무λ ₯화될 수 μžˆλ‹€ [17]. λ˜ν•œ, λ‚΄λΆ€ λ™μž‘μ΄ λΈ”λž™λ°•μŠ€μ²˜λŸΌ μ²˜λ¦¬λ˜μ–΄ 예기치 μ•Šμ€ λ¦¬λ Œλ”λ§ λ°œμƒ μ‹œ 원인 규λͺ…κ³Ό 디버깅이 더 κΉŒλ‹€λ‘œμ›Œμ§ˆ 수 있으며, React의 κΈ°λ³Έ 원칙(Rules of React)을 λ‹€μˆ˜ μœ„λ°˜ν•œ λ ˆκ±°μ‹œ μ½”λ“œλ² μ΄μŠ€μ—μ„œλŠ” κ³§λ°”λ‘œ λ„μž…ν•˜κΈ° μ–΄λ ΅λ‹€ [18-20]. - **λ„μž… 및 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ „λž΅**: λͺ¨λ“  μ½”λ“œμ— 일괄 μ μš©ν•  ν•„μš” 없이 νŠΉμ • 디렉터리뢀터 μ‹œμž‘ν•˜κ±°λ‚˜ `'use compiler'` μ§€μ‹œμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 파일 λ‹¨μœ„λ‘œ 점진적인 λ„μž…μ΄ κ°€λŠ₯ν•˜λ‹€ [21, 22]. 컴파일러 적용 μ „ ESLint ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜μ—¬ React κ·œμΉ™ μœ„λ°˜ 사항을 μ‹λ³„ν•˜κ³  μˆ˜μ •ν•˜λŠ” 것이 적극 ꢌμž₯λœλ‹€ [18, 22]. - **μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ˜ μž”μ‘΄ ν•„μš”μ„±**: μ»΄νŒŒμΌλŸ¬κ°€ λŒ€λΆ€λΆ„μ˜ μ΅œμ ν™”λ₯Ό μžλ™μœΌλ‘œ μ²˜λ¦¬ν•˜μ§€λ§Œ, μ΄νŽ™νŠΈ(Effect)의 μ˜μ‘΄μ„± μ œμ–΄λ‚˜ μ•ˆμ •μ μΈ μ°Έμ‘°κ°€ ν•„μˆ˜μ μΈ μ„œλ“œνŒŒν‹° 라이브러리 연동 λ“± λͺ…μ‹œμ μΈ μ œμ–΄κ°€ ν•„μš”ν•œ 상황(Escape Hatch)μ—μ„œλŠ” μ—¬μ „νžˆ `useMemo` 및 `useCallback`을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€ [23-26]. ## πŸ”— Knowledge Connections - **Related Topics:** [[λ©”λͺ¨μ΄μ œμ΄μ…˜ (Memoization)]], [[λΉŒλ“œ νƒ€μž„ μ΅œμ ν™” (Build-Time Optimization)]], [[λ¦¬λ Œλ”λ§ (Re-rendering)]] - **Projects/Contexts:** [[Meta ν”„λ‘œλ•μ…˜ μ•± (Instagram, Quest Store)]], [[Sanity Studio]], [[Next.js 및 Vite 톡합]] - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ React μ»΄νŒŒμΌλŸ¬κ°€ 적용된 μ»΄ν¬λ„ŒνŠΈλŠ” React DevToolsμ—μ„œ `Memo ✨` λ°°μ§€κ°€ ν‘œμ‹œλ˜μ§€λ§Œ, 이것이 항상 μ΅œμ ν™”μ˜ 성곡을 μ˜λ―Έν•˜λŠ” 것은 μ•„λ‹ˆλ‹€ [17, 27]. 속성에 인라인 κ°μ²΄λ‚˜ ν•¨μˆ˜ λ“± λΆˆμ•ˆμ •ν•œ μ°Έμ‘°κ°€ 전달될 경우, λ°°μ§€κ°€ μžˆλ”λΌλ„ λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈ μ—…λ°μ΄νŠΈ μ‹œ μ—¬μ „νžˆ λ¦¬λ Œλ”λ§μ΄ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ μ£Όμ˜ν•΄μ•Ό ν•œλ‹€ [17]. --- *Last updated: 2026-04-25*