# [[React Compiler]] ## πŸ“Œ[[ brief]] Summary React CompilerλŠ” κ°œλ°œμžκ°€ μˆ˜λ™μœΌλ‘œ μ μš©ν•΄μ•Ό ν–ˆλ˜ λ©”λͺ¨μ΄μ œμ΄μ…˜(memoization) μž‘μ—…μ„ λΉŒλ“œ νƒ€μž„μ— μžλ™μœΌλ‘œ μ²˜λ¦¬ν•΄ μ£ΌλŠ” React의 μƒˆλ‘œμš΄ μ΅œμ ν™” 도ꡬ이닀 [1-3]. 기쑴의 `useMemo`, `useCallback`, `React.memo`와 같은 μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ˜ λ²ˆκ±°λ‘œμ›€κ³Ό 였λ₯˜ λ°œμƒ κ°€λŠ₯성을 μ—†μ• μ£Όλ©°, 일반 [[JavaScript]]와 React의 κ·œμΉ™(Rules of React)을 μ΄ν•΄ν•˜μ—¬ μž‘λ™ν•˜λ―€λ‘œ κΈ°μ‘΄ μ½”λ“œλ₯Ό μž¬μž‘μ„±ν•  ν•„μš”κ°€ μ—†λ‹€ [1, 4, 5]. 2025λ…„ 말에 μ•ˆμ •ν™”(stable) λ²„μ „μœΌλ‘œ μΆœμ‹œλ˜μ—ˆμœΌλ©°, 데이터 흐름을 λΆ„μ„ν•˜μ—¬ ν•„μš”ν•œ κ³³μ—λ§Œ μ§€λŠ₯적으둜 λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μ‚½μž…ν•¨μœΌλ‘œμ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ Œλ”λ§ μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•œλ‹€ [3, 5, 6]. ## πŸ“– Core Content * **μž‘λ™ 방식 및 μ•„ν‚€ν…μ²˜:** React CompilerλŠ” λΉŒλ“œ λ‹¨κ³„μ—μ„œ λ™μž‘ν•˜λŠ” 정적 뢄석 λ„κ΅¬λ‘œ, Babel λ˜λŠ” SWC ν”ŒλŸ¬κ·ΈμΈ ν˜•νƒœλ‘œ μž‘λ™ν•œλ‹€ [7, 8]. μž‘λ™ 과정은 크게 μ„Έ λ‹¨κ³„λ‘œ λ‚˜λ‰œλ‹€. 첫째, μ»΄ν¬λ„ŒνŠΈ μ½”λ“œλ₯Ό 좔상 ꡬ문 트리(AST, Abstract Syntax Tree)둜 νŒŒμ‹±ν•˜κ³  데이터 흐름을 λΆ„μ„ν•˜λŠ” '뢄석([[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]]λŠ” λ Œλ”λ§ μ‹œκ°„μ„ 20~30% λ‹¨μΆ•ν–ˆμœΌλ©°, Wakelet은 LCPλ₯Ό 25%, INPλ₯Ό 47% ν–₯μƒμ‹œμΌ°λ‹€ [14, 15]. μ΄λŠ” μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ—μ„œ λ°œμƒν•˜λŠ” 인지적 κ³ΌλΆ€ν•˜, κ³Όλ„ν•œ λ©”λͺ¨μ΄μ œμ΄μ…˜, μ˜μ‘΄μ„± λ°°μ—΄ 였λ₯˜ λ“±μ˜ 문제λ₯Ό ν•΄κ²°ν•˜λ©΄μ„œ 얻은 κ΄„λͺ©ν•  λ§Œν•œ μ„±λŠ₯ κ°œμ„ μ΄λ‹€ [4]. * **μ„€μ • 및 점진적 λ„μž…:** [[React 19]] 이상, Node.js 18+ ν™˜κ²½μ—μ„œ μ‚¬μš© κ°€λŠ₯ν•˜λ©° Vite, [[Next.js]](15.3.1 이상), Expo λ“± μ£Όμš” λΉŒλ“œ 도ꡬ 및 ν”„λ ˆμž„μ›Œν¬μ™€ ν˜Έν™˜λœλ‹€ [7, 16]. κΈ°μ‘΄ μ½”λ“œλ² μ΄μŠ€μ—μ„œλŠ” ν•œ λ²ˆμ— λͺ¨λ“  것을 바꾸기보닀 νŠΉμ • 디렉터리뢀터 μ‹œμž‘ν•˜κ±°λ‚˜ μ»΄ν¬λ„ŒνŠΈ 파일 상단에 `'use compiler'` μ§€μ‹œμ–΄λ₯Ό μΆ”κ°€ν•˜μ—¬ μ μ§„μ μœΌλ‘œ λ„μž…ν•˜λŠ” μ „λž΅μ΄ ꢌμž₯λœλ‹€ [17, 18]. [[ESLint]] ν”ŒλŸ¬κ·ΈμΈ(`eslint-plugin-[[React-Hooks]]`)을 ν™œμš©ν•΄ μ»΄νŒŒμΌλŸ¬μ— μ ν•©ν•˜μ§€ μ•Šμ€ μ½”λ“œλ₯Ό 사전에 점검할 μˆ˜λ„ μžˆλ‹€ [18, 19]. * **μ£Όμ˜μ‚¬ν•­ 및 μ˜ˆμ™Έ 처리:** React CompilerλŠ” λ Œλ”λ§ 쀑 λ°œμƒν•˜λŠ” λΆ€μˆ˜ 효과(side effects)λ‚˜ μ™ΈλΆ€ λ³€ν˜•(external mutation)을 μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, React의 κ·œμΉ™μ„ μ² μ €νžˆ μ€€μˆ˜ν•΄μ•Ό ν•œλ‹€ [19-21]. μ»΄νŒŒμΌλŸ¬κ°€ μ΅œμ ν™”ν•  수 μ—†λŠ” νŒ¨ν„΄μ— μ§λ©΄ν•˜λ©΄ μ»΄νŒŒμΌμ„ 포기(Bailout)ν•˜κ³  기쑴의 ν‘œμ€€ React λ™μž‘μœΌλ‘œ λŒμ•„κ°„λ‹€ [21, 22]. ## πŸ”— Knowledge Connections - **Related Topics:** Memoization, Abstract Syntax Tree (AST), Fine-Grained Reactivity, Rules of React, Re-render Cascade - **Projects/Contexts:** [[React 19]], Babel, SWC, [[Next.js]], Vite - **Contradictions/Notes:** React Compilerκ°€ λͺ¨λ“  μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μ™„λ²½νžˆ λŒ€μ²΄ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€. 90% μ΄μƒμ˜ μ΅œμ ν™” μž‘μ—…μ„ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•˜μ§€λ§Œ [2], μ΄νŽ™νŠΈ μ˜μ‘΄μ„±(effect dependency)을 μ œμ–΄ν•΄μ•Ό ν•˜κ±°λ‚˜ μ°Έμ‘° μ•ˆμ •μ„±(stable [[Reference]]s)을 μš”κ΅¬ν•˜λŠ” νŠΉμ • μ„œλ“œνŒŒν‹° 라이브러리(예: TanStack Query의 `useMutation()`)와 연동할 λ•ŒλŠ” μ—¬μ „νžˆ κ°œλ°œμžκ°€ `useMemo`와 `useCallback`을 μ‚¬μš©ν•œ μˆ˜λ™ μ œμ–΄λ₯Ό 병행해야 ν•œλ‹€κ³  μ†ŒμŠ€λ“€μ€ λͺ…μ‹œν•˜κ³  μžˆλ‹€ [23-26]. --- *Last updated: 2026-04-25*