--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[React Compiler|React Compiler]] last_updated: 2026-05-02 --- # [[React Compiler|React Compiler]] ## πŸ“Œ Brief Summary React CompilerλŠ” κ°œλ°œμžκ°€ μˆ˜λ™μœΌλ‘œ μ μš©ν•΄μ•Ό ν–ˆλ˜ λ©”λͺ¨μ΄μ œμ΄μ…˜(memoization) μž‘μ—…μ„ λΉŒλ“œ νƒ€μž„μ— μžλ™μœΌλ‘œ μ²˜λ¦¬ν•΄ μ£ΌλŠ” React의 μƒˆλ‘œμš΄ μ΅œμ ν™” 도ꡬ이닀 [1-3]. 기쑴의 `useMemo`, `useCallback`, `React.memo`와 같은 μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ˜ λ²ˆκ±°λ‘œμ›€κ³Ό 였λ₯˜ λ°œμƒ κ°€λŠ₯성을 μ—†μ• μ£Όλ©°, 일반 [[JavaScript|JavaScript]]와 React의 κ·œμΉ™(Rules of React)을 μ΄ν•΄ν•˜μ—¬ μž‘λ™ν•˜λ―€λ‘œ κΈ°μ‘΄ μ½”λ“œλ₯Ό μž¬μž‘μ„±ν•  ν•„μš”κ°€ μ—†λ‹€ [1, 4, 5]. 2025λ…„ 말에 μ•ˆμ •ν™”(stable) λ²„μ „μœΌλ‘œ μΆœμ‹œλ˜μ—ˆμœΌλ©°, 데이터 흐름을 λΆ„μ„ν•˜μ—¬ ν•„μš”ν•œ κ³³μ—λ§Œ μ§€λŠ₯적으둜 λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μ‚½μž…ν•¨μœΌλ‘œμ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ Œλ”λ§ μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•œλ‹€ [3, 5, 6]. --- React 컴파일러(React Compiler, 이전 λͺ…μΉ­ 'React Forget')λŠ” λΉŒλ“œ νƒ€μž„μ— React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μžλ™μœΌλ‘œ μ΅œμ ν™”ν•΄μ£ΌλŠ” 도ꡬ이닀 [1-4]. κ°œλ°œμžκ°€ μˆ˜λ™μœΌλ‘œ μž‘μ„±ν•˜λ˜ `useMemo`, `useCallback`, `React.memo` λ“±μ˜ λ©”λͺ¨μ΄μ œμ΄μ…˜ μž‘μ—…μ„ μ»΄νŒŒμΌλŸ¬κ°€ μ½”λ“œλ₯Ό λΆ„μ„ν•˜μ—¬ ν•„μš”ν•œ 곳에 μžλ™μœΌλ‘œ μ‚½μž…ν•œλ‹€ [2, 3]. 이λ₯Ό 톡해 λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ λ°©μ§€ν•˜κ³  μ½”λ“œμ˜ 가독성을 높이며, λ©”λͺ¨μ΄μ œμ΄μ…˜ λˆ„λ½μ΄λ‚˜ 였용으둜 μΈν•œ μ„±λŠ₯ μ €ν•˜λ₯Ό 효과적으둜 ν•΄κ²°ν•œλ‹€ [4-6]. ## πŸ“– Core Content * **μž‘λ™ 방식 및 μ•„ν‚€ν…μ²˜:** React CompilerλŠ” λΉŒλ“œ λ‹¨κ³„μ—μ„œ λ™μž‘ν•˜λŠ” 정적 뢄석 λ„κ΅¬λ‘œ, Babel λ˜λŠ” SWC ν”ŒλŸ¬κ·ΈμΈ ν˜•νƒœλ‘œ μž‘λ™ν•œλ‹€ [7, 8]. μž‘λ™ 과정은 크게 μ„Έ λ‹¨κ³„λ‘œ λ‚˜λ‰œλ‹€. 첫째, μ»΄ν¬λ„ŒνŠΈ μ½”λ“œλ₯Ό 좔상 ꡬ문 트리(AST, Abstract Syntax Tree)둜 νŒŒμ‹±ν•˜κ³  데이터 흐름을 λΆ„μ„ν•˜λŠ” '뢄석([[Analysis|Analysis]]) 단계', λ‘˜μ§Έ, 값이 정적인지, propsλ‚˜ μƒνƒœμ— μ˜μ‘΄ν•˜λŠ” λ°˜μ‘ν˜•(reactive)인지, νŒŒμƒλœ 값인지 νŒλ³„ν•˜λŠ” 'μΆ”λ‘ (Inference) 단계', μ…‹μ§Έ, 졜적의 지점에 λ©”λͺ¨μ΄μ œμ΄μ…˜ 경계λ₯Ό μ‚½μž…ν•˜λŠ” 'λ³€ν™˜(Transformation) 단계'이닀 [9, 10]. * **μ„Έλ°€ν•œ λ°˜μ‘μ„±(Fine-Grained Reactivity):** μ»΄νŒŒμΌλŸ¬λŠ” ν‘œν˜„μ‹ μˆ˜μ€€μ—μ„œ λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μˆ˜ν–‰ν•˜μ—¬, νŠΉμ • μž…λ ₯이 변경될 λ•Œλ§Œ μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λ Œλ”λ§λ˜λ„λ‘ ν•œλ‹€ [9, 11]. 이λ₯Ό 톡해 연쇄적인 λ¦¬λ Œλ”λ§(cascading re-renders)을 λ°©μ§€ν•˜κ³  λΆˆν•„μš”ν•˜κ³  λΉ„μš©μ΄ 많이 λ“œλŠ” 계산을 κ±΄λ„ˆλ›°κ²Œ λ§Œλ“€μ–΄ μ€€λ‹€ [11, 12]. * **λ„μž… 효과 및 μ‹€μ œ 사둀:** Meta의 λ‚΄λΆ€ ν…ŒμŠ€νŠΈ κ²°κ³Ό 초기 λ‘œλ“œ μ‹œκ°„ 12% 단좕, μ‚¬μš©μž μƒν˜Έμž‘μš© 속도 2.5λ°° ν–₯상, λ¦¬λ Œλ”λ§ 횟수 60% κ°μ†Œ 효과λ₯Ό λ³΄μ˜€λ‹€ [13]. μ½˜ν…μΈ  에디터인 [[Sanity Studio|Sanity Studio]]λŠ” λ Œλ”λ§ μ‹œκ°„μ„ 20~30% λ‹¨μΆ•ν–ˆμœΌλ©°, Wakelet은 LCPλ₯Ό 25%, INPλ₯Ό 47% ν–₯μƒμ‹œμΌ°λ‹€ [14, 15]. μ΄λŠ” μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ—μ„œ λ°œμƒν•˜λŠ” 인지적 κ³ΌλΆ€ν•˜, κ³Όλ„ν•œ λ©”λͺ¨μ΄μ œμ΄μ…˜, μ˜μ‘΄μ„± λ°°μ—΄ 였λ₯˜ λ“±μ˜ 문제λ₯Ό ν•΄κ²°ν•˜λ©΄μ„œ 얻은 κ΄„λͺ©ν•  λ§Œν•œ μ„±λŠ₯ κ°œμ„ μ΄λ‹€ [4]. * **μ„€μ • 및 점진적 λ„μž…:** [[React 19|React 19]] 이상, Node.js 18+ ν™˜κ²½μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ©° Vite, Next.js(15.3.1 이상), Expo λ“± μ£Όμš” λΉŒλ“œ 도ꡬ 및 ν”„λ ˆμž„μ›Œν¬μ™€ ν˜Έν™˜λœλ‹€ [7, 16]. κΈ°μ‘΄ μ½”λ“œλ² μ΄μŠ€μ—μ„œλŠ” ν•œ λ²ˆμ— λͺ¨λ“  것을 바꾸기보닀 νŠΉμ • 디렉터리뢀터 μ‹œμž‘ν•˜κ±°λ‚˜ μ»΄ν¬λ„ŒνŠΈ 파일 상단에 `'use compiler'` μ§€μ‹œμ–΄λ₯Ό μΆ”κ°€ν•˜μ—¬ μ μ§„μ μœΌλ‘œ λ„μž…ν•˜λŠ” μ „λž΅μ΄ ꢌμž₯λœλ‹€ [17, 18]. ESLint ν”ŒλŸ¬κ·ΈμΈ(`eslint-plugin-[[React-Hooks|React-Hooks]]`)을 ν™œμš©ν•΄ μ»΄νŒŒμΌλŸ¬μ— μ ν•©ν•˜μ§€ μ•Šμ€ μ½”λ“œλ₯Ό 사전에 점검할 μˆ˜λ„ μžˆλ‹€ [18, 19]. * **μ£Όμ˜μ‚¬ν•­ 및 μ˜ˆμ™Έ 처리:** React CompilerλŠ” λ Œλ”λ§ 쀑 λ°œμƒν•˜λŠ” λΆ€μˆ˜ 효과(side effects)λ‚˜ μ™ΈλΆ€ λ³€ν˜•(external mutation)을 μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, React의 κ·œμΉ™μ„ μ² μ €νžˆ μ€€μˆ˜ν•΄μ•Ό ν•œλ‹€ [19-21]. μ»΄νŒŒμΌλŸ¬κ°€ μ΅œμ ν™”ν•  수 μ—†λŠ” νŒ¨ν„΄μ— μ§λ©΄ν•˜λ©΄ μ»΄νŒŒμΌμ„ 포기(Bailout)ν•˜κ³  기쑴의 ν‘œμ€€ React λ™μž‘μœΌλ‘œ λŒμ•„κ°„λ‹€ [21, 22]. --- - **μž‘λ™ 원리**: 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|Sanity Studio]], Wakelet λ“±)μ—μ„œ μ μš©ν•œ κ²°κ³Ό 초기 λ‘œλ“œ μ‹œκ°„ 단좕, μƒν˜Έμž‘μš© μ§€μ—° μ‹œκ°„(INP) κ°œμ„ , λ¦¬λ Œλ”λ§ 횟수 60% κ°μ†Œ λ“±μ˜ κ΄„λͺ©ν•  λ§Œν•œ μ„±λŠ₯ ν–₯상이 μž…μ¦λ˜μ—ˆλ‹€ [14-16]. - **단점 및 ν•œκ³„**: 일뢀 μ„œλ“œνŒŒν‹° 라이브러리(예: TanStack Query λ“± λ Œλ”λ§λ§ˆλ‹€ μ˜λ„μ μœΌλ‘œ μƒˆλ‘œμš΄ 객체λ₯Ό λ°˜ν™˜ν•˜λŠ” ν›…)와 ν˜Έν™˜μ„± λ¬Έμ œκ°€ λ°œμƒν•˜μ—¬ 컴파일러의 μ΅œμ ν™”κ°€ 무λ ₯화될 수 μžˆλ‹€ [17]. λ˜ν•œ, λ‚΄λΆ€ λ™μž‘μ΄ λΈ”λž™λ°•μŠ€μ²˜λŸΌ μ²˜λ¦¬λ˜μ–΄ 예기치 μ•Šμ€ λ¦¬λ Œλ”λ§ λ°œμƒ μ‹œ 원인 규λͺ…κ³Ό 디버깅이 더 κΉŒλ‹€λ‘œμ›Œμ§ˆ 수 있으며, React의 κΈ°λ³Έ 원칙(Rules of React)을 λ‹€μˆ˜ μœ„λ°˜ν•œ λ ˆκ±°μ‹œ μ½”λ“œλ² μ΄μŠ€μ—μ„œλŠ” κ³§λ°”λ‘œ λ„μž…ν•˜κΈ° μ–΄λ ΅λ‹€ [18-20]. - **λ„μž… 및 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ „λž΅**: λͺ¨λ“  μ½”λ“œμ— 일괄 μ μš©ν•  ν•„μš” 없이 νŠΉμ • 디렉터리뢀터 μ‹œμž‘ν•˜κ±°λ‚˜ `'use compiler'` μ§€μ‹œμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 파일 λ‹¨μœ„λ‘œ 점진적인 λ„μž…μ΄ κ°€λŠ₯ν•˜λ‹€ [21, 22]. 컴파일러 적용 μ „ [[ESLint|ESLint]] ν”ŒλŸ¬κ·ΈμΈμ„ μ‚¬μš©ν•˜μ—¬ React κ·œμΉ™ μœ„λ°˜ 사항을 μ‹λ³„ν•˜κ³  μˆ˜μ •ν•˜λŠ” 것이 적극 ꢌμž₯λœλ‹€ [18, 22]. - **μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ˜ μž”μ‘΄ ν•„μš”μ„±**: μ»΄νŒŒμΌλŸ¬κ°€ λŒ€λΆ€λΆ„μ˜ μ΅œμ ν™”λ₯Ό μžλ™μœΌλ‘œ μ²˜λ¦¬ν•˜μ§€λ§Œ, μ΄νŽ™νŠΈ(Effect)의 μ˜μ‘΄μ„± μ œμ–΄λ‚˜ μ•ˆμ •μ μΈ μ°Έμ‘°κ°€ ν•„μˆ˜μ μΈ μ„œλ“œνŒŒν‹° 라이브러리 연동 λ“± λͺ…μ‹œμ μΈ μ œμ–΄κ°€ ν•„μš”ν•œ 상황(Escape Hatch)μ—μ„œλŠ” μ—¬μ „νžˆ `useMemo` 및 `useCallback`을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€ [23-26]. ## βš–οΈ Trade-offs & Caveats No trade-offs available. ## πŸ”— Knowledge Connections - **Related Topics:** Memoization, Abstract Syntax Tree (AST), Fine-Grained Reactivity, Rules of React, Re-render Cascade - **Projects/Contexts:** [[React 19|React 19]], Babel, SWC, [[Next.js|Next.js]], Vite - **Contradictions/Notes:** React Compilerκ°€ λͺ¨λ“  μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μ™„λ²½νžˆ λŒ€μ²΄ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€. 90% μ΄μƒμ˜ μ΅œμ ν™” μž‘μ—…μ„ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•˜μ§€λ§Œ [2], μ΄νŽ™νŠΈ μ˜μ‘΄μ„±(effect dependency)을 μ œμ–΄ν•΄μ•Ό ν•˜κ±°λ‚˜ μ°Έμ‘° μ•ˆμ •μ„±(stable [[Reference|Reference]]s)을 μš”κ΅¬ν•˜λŠ” νŠΉμ • μ„œλ“œνŒŒν‹° 라이브러리(예: TanStack Query의 `useMutation()`)와 연동할 λ•ŒλŠ” μ—¬μ „νžˆ κ°œλ°œμžκ°€ `useMemo`와 `useCallback`을 μ‚¬μš©ν•œ μˆ˜λ™ μ œμ–΄λ₯Ό 병행해야 ν•œλ‹€κ³  μ†ŒμŠ€λ“€μ€ λͺ…μ‹œν•˜κ³  μžˆλ‹€ [23-26]. --- *Last updated: 2026-04-25* --- - **Related Topics:** λ©”λͺ¨μ΄μ œμ΄μ…˜ (Memoization), λΉŒλ“œ νƒ€μž„ μ΅œμ ν™” (Build-Time [[Optimization|Optimization]]), λ¦¬λ Œλ”λ§ (Re-rendering) - **Projects/Contexts:** Meta ν”„λ‘œλ•μ…˜ μ•± (Instagram, Quest Store), [[Sanity Studio|Sanity Studio]], [[Next.js|Next.js]] 및 Vite 톡합 - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ React μ»΄νŒŒμΌλŸ¬κ°€ 적용된 μ»΄ν¬λ„ŒνŠΈλŠ” React DevToolsμ—μ„œ `Memo ✨` λ°°μ§€κ°€ ν‘œμ‹œλ˜μ§€λ§Œ, 이것이 항상 μ΅œμ ν™”μ˜ 성곡을 μ˜λ―Έν•˜λŠ” 것은 μ•„λ‹ˆλ‹€ [17, 27]. 속성에 인라인 κ°μ²΄λ‚˜ ν•¨μˆ˜ λ“± λΆˆμ•ˆμ •ν•œ μ°Έμ‘°κ°€ 전달될 경우, λ°°μ§€κ°€ μžˆλ”λΌλ„ λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈ μ—…λ°μ΄νŠΈ μ‹œ μ—¬μ „νžˆ λ¦¬λ Œλ”λ§μ΄ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ μ£Όμ˜ν•΄μ•Ό ν•œλ‹€ [17]. --- *Last updated: 2026-04-25*