# [[Engineering Scalable Frontend Systems|Engineering Scalable Frontend Systems]] ## πŸ“Œ Brief Summary ν™•μž₯ κ°€λŠ₯ν•œ ν”„λ‘ νŠΈμ—”λ“œ μ‹œμŠ€ν…œ(Engineering Scalable Frontend Systems)은 λ‹¨μˆœν•œ 슀크립트 싀행을 λ„˜μ–΄ μœ μ§€λ³΄μˆ˜μ„±, κ³ μ„±λŠ₯, 견고성을 κ°–μΆ˜ λΆ„μ‚° μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜λ₯Ό κ΅¬μΆ•ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€ [1]. μ΄λŠ” 기술적 파일 기반 폴더 κ΅¬μ‘°μ—μ„œ κΈ°λŠ₯ 쀑심(Feature-Based) 및 도메인 기반 μ„€κ³„λ‘œμ˜ μ „ν™˜μ„ μš”κ΅¬ν•˜λ©°, μ—„κ²©ν•œ μ½”λ“œ μ»¨λ²€μ…˜κ³Ό κ±°λ²„λ„ŒμŠ€λ₯Ό λ™λ°˜ν•©λ‹ˆλ‹€ [2, 3]. λ˜ν•œ ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμ— SOLID와 같은 μ†Œν”„νŠΈμ›¨μ–΄ 곡학 원칙을 κ²°ν•©ν•˜κ³ , μ„œλ²„/ν΄λΌμ΄μ–ΈνŠΈ μƒνƒœμ˜ 뢄리, 그리고 λΉŒλ“œ νƒ€μž„ 및 λŸ°νƒ€μž„ μ„±λŠ₯ μ΅œμ ν™”λ₯Ό 톡해 예츑 κ°€λŠ₯ν•œ μ„±μž₯을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€ [1, 4, 5]. ## πŸ“– Core Content * **μ•„ν‚€ν…μ²˜ 및 폴더 ꡬ쑰의 μ§„ν™”** 기쑴의 μ»΄ν¬λ„ŒνŠΈ, ν›…, μŠ€νƒ€μΌ 등을 파일 νƒ€μž…λ³„λ‘œ λͺ¨μ•„λ‘λŠ” κ΅¬μ‘°λŠ” 앱이 컀질수둝 인지 λΆ€ν•˜λ₯Ό 높이고 ν™•μž₯을 μ–΄λ ΅κ²Œ λ§Œλ“­λ‹ˆλ‹€ [2, 6]. 2025λ…„μ˜ ν”„λ‘ νŠΈμ—”λ“œ μ‹œμŠ€ν…œμ€ λΉ„μ¦ˆλ‹ˆμŠ€ 도메인과 κΈ°λŠ₯(Feature)을 μ€‘μ‹¬μœΌλ‘œ μ½”λ“œλ₯Ό μ‘μ§‘μ‹œν‚€λŠ” ꡬ쑰λ₯Ό ν‘œμ€€μœΌλ‘œ μ‚Όκ³  μžˆμŠ΅λ‹ˆλ‹€ [3, 7]. 특히 **Feature-Sliced Design (FSD)** 같은 μ•„ν‚€ν…μ²˜λŠ” μ½”λ“œλ₯Ό νš‘λ‹¨ 관심사별 λ ˆμ΄μ–΄(shared, entities, features, widgets, pages, app)둜 λ‚˜λˆ„κ³ , μƒμœ„ κ³„μΈ΅μ—μ„œ ν•˜μœ„ κ³„μΈ΅μœΌλ‘œλ§Œ μ ‘κ·Όν•  수 μžˆλŠ” μ—„κ²©ν•œ 단방ν–₯ μ˜μ‘΄μ„± κ·œμΉ™μ„ κ°•μ œν•©λ‹ˆλ‹€ [8-10]. 각 μŠ¬λΌμ΄μŠ€λŠ” `index.ts`λ₯Ό 톡해 퍼블릭 API(Public API)만 외뢀에 λ…ΈμΆœν•˜μ—¬ λ‚΄λΆ€ κ΅¬ν˜„μ„ μΊ‘μŠν™”ν•©λ‹ˆλ‹€ [4, 11, 12]. * **μ†Œν”„νŠΈμ›¨μ–΄ 곡학 μ›μΉ™μ˜ 적용 (SOLID & Clean Code)** ν”„λ‘ νŠΈμ—”λ“œ μ½”λ“œμ˜ μœ μ§€λ³΄μˆ˜μ„±μ„ μœ„ν•΄ SOLID, DRY, KISS, YAGNI 원칙이 μ μš©λ©λ‹ˆλ‹€ [4, 13]. * 단일 μ±…μž„ 원칙(SRP)에 따라 λ„ˆλ¬΄ λ§Žμ€ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λŒ€ν˜• μ»΄ν¬λ„ŒνŠΈ(예: 300쀄 이상)λŠ” 데이터 패칭, μƒνƒœ 관리, UI λ Œλ”λ§ λ“±μ˜ μ±…μž„μ— 맞게 더 μž‘κ³  독립적인 λ‹¨μœ„λ‘œ λΆ„λ¦¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ [14]. * 개방-폐쇄 원칙(OCP)은 κΈ°μ‘΄ μ»΄ν¬λ„ŒνŠΈ μ†ŒμŠ€λ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  `children` propμ΄λ‚˜ Render Props νŒ¨ν„΄μ„ μ΄μš©ν•œ μ»΄ν¬λ„ŒνŠΈ ν•©μ„±(Composition)으둜 κΈ°λŠ₯을 ν™•μž₯ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ©λ‹ˆλ‹€ [15, 16]. * 쀑볡을 μ€„μ΄λŠ” DRY 원칙은 곡톡 λ‘œμ§μ„ μ»€μŠ€ν…€ ν›…μœΌλ‘œ λΆ„λ¦¬ν•˜λŠ” 것을 ꢌμž₯ν•˜μ§€λ§Œ, μ§€λ‚˜μΉœ μΆ”μƒν™”λŠ” μ½”λ“œ νŒŒμ•…μ„ μ–΄λ ΅κ²Œ ν•˜λ―€λ‘œ λ‹¨μˆœμ„±μ„ μœ μ§€ν•˜λŠ” KISS 원칙과 κ· ν˜•μ„ 이루어야 ν•©λ‹ˆλ‹€ [17]. * **μƒνƒœ 관리 νŒ¨λŸ¬λ‹€μž„μ˜ μ„ΈλΆ„ν™”** κ±°λŒ€ν•œ 단일 μƒνƒœ μ €μž₯μ†Œ(예: 과거의 Redux)에 μ˜μ‘΄ν•˜κΈ°λ³΄λ‹€λŠ” λ°μ΄ν„°μ˜ 성격에 따라 졜적의 도ꡬλ₯Ό μ„ νƒν•˜μ—¬ μƒνƒœλ₯Ό νŒŒνŽΈν™” 및 μ „λ¬Έν™”ν•©λ‹ˆλ‹€ [5]. * **μ „μ—­ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ:** Context APIλŠ” 값이 변경될 λ•Œλ§ˆλ‹€ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈ 전체λ₯Ό λ¦¬λ Œλ”λ§ν•˜λŠ” ν•œκ³„κ°€ μžˆμœΌλ―€λ‘œ [18, 19], μƒνƒœ 변경이 잦고 규λͺ¨κ°€ 큰 μ•±μ—μ„œλŠ” λΆ€λΆ„ ꡬ독(Selector)을 μ§€μ›ν•˜μ—¬ λ Œλ”λ§ μ„±λŠ₯을 μ΅œμ ν™”ν•˜λŠ” **Zustand**λ‚˜ **Jotai**κ°€ μ„ ν˜Έλ©λ‹ˆλ‹€ [5, 20, 21]. * **μ„œλ²„ μƒνƒœ (API Layer):** APIμ—μ„œ κ°€μ Έμ˜¨ λ°μ΄ν„°λŠ” 캐싱, 동기화, λ‘œλ”©/μ—λŸ¬ 사이클 관리가 ν•„μš”ν•˜λ―€λ‘œ, ν΄λΌμ΄μ–ΈνŠΈ μƒνƒœμ™€ λͺ…ν™•νžˆ λΆ„λ¦¬ν•˜μ—¬ **TanStack Query (React Query)** λ“±μ˜ 라이브러리둜 κ΄€λ¦¬ν•©λ‹ˆλ‹€ [18, 22]. * **μ„±λŠ₯ μ—”μ§€λ‹ˆμ–΄λ§ 및 λΉŒλ“œ μ΅œμ ν™”** 초기 λ‘œλ”© μ‹œκ°„κ³Ό Core Web Vitals μ΅œμ ν™”λ₯Ό μœ„ν•΄ λ‹€μ–‘ν•œ 기법이 μ μš©λ©λ‹ˆλ‹€ [23, 24]. * **λΉŒλ“œ/컴파일 νƒ€μž„:** Vite와 같은 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ 개발 ν™˜κ²½μ—μ„œλŠ” λ„€μ΄ν‹°λΈŒ ES λͺ¨λ“ˆμ„ μ œκ³΅ν•˜κ³ , ν”„λ‘œλ•μ…˜μ—μ„œλŠ” Rollup의 `manualChunks`λ₯Ό ν™œμš©ν•΄ μš©λŸ‰μ΄ 큰 벀더 라이브러리(React, Recharts λ“±)λ₯Ό λΆ„ν•  μΊμ‹±ν•˜μ—¬ μΊμ‹œ νš¨μœ¨μ„ λ†’μž…λ‹ˆλ‹€ [23, 25-27]. λ˜ν•œ **React Compiler**의 λ„μž…μœΌλ‘œ μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ μ½”λ“œμ˜ λ¦¬λ Œλ”λ§ λ°©μ§€(λ©”λͺ¨μ΄μ œμ΄μ…˜)λ₯Ό μ²˜λ¦¬ν•˜μ—¬ μˆ˜λ™ μ΅œμ ν™”(`useMemo`, `useCallback`)의 였λ₯˜λ₯Ό μ€„μ—¬μ€λ‹ˆλ‹€ [25, 28, 29]. * **λŸ°νƒ€μž„ μ΅œμ ν™”:** 동적 μž„ν¬νŠΈλ₯Ό μ΄μš©ν•œ 라우트 및 μ»΄ν¬λ„ŒνŠΈ 레벨의 μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…(Code Splitting & Lazy Loading), 그리고 수천 개의 리슀트 μ•„μ΄ν…œ λ Œλ”λ§ μ‹œ DOM λΉ„λŒ€λ₯Ό λ§‰λŠ” 가상화(Virtualization) 기술이 ν•„μˆ˜μ μœΌλ‘œ μš”κ΅¬λ©λ‹ˆλ‹€ [30-32]. * **볡원λ ₯(Resilience) 및 μ‹œμŠ€ν…œ κ±°λ²„λ„ŒμŠ€** κ²¬κ³ ν•œ μ‹œμŠ€ν…œμ€ λŸ°νƒ€μž„ 였λ₯˜κ°€ 전체 μ•±μ˜ ν¬λž˜μ‹œλ‘œ μ΄μ–΄μ§€λŠ” 것을 λ§‰μŠ΅λ‹ˆλ‹€. UI의 λΆˆμ•ˆμ •ν•œ μ˜μ—­μ΄λ‚˜ μ„œλ“œνŒŒν‹° μœ„μ ―μ€ **Error Boundaries**둜 감싸 폴백 UIλ₯Ό μ œκ³΅ν•˜μ—¬ μ•ˆμ •μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€ [33-35]. λ˜ν•œ, λ©”λͺ¨λ¦¬ λˆ„μˆ˜ λ°©μ§€λ₯Ό μœ„ν•œ DevTools νž™ μŠ€λƒ…μƒ· 디버깅과 Sentry, LogRocket 같은 ν΄λΌμš°λ“œ 도ꡬλ₯Ό μ΄μš©ν•œ ν”„λ‘œλ•μ…˜ μ—λŸ¬ λͺ¨λ‹ˆν„°λ§μ΄ ν™œμš©λ©λ‹ˆλ‹€ [36-38]. ν˜‘μ—… μ°¨μ›μ—μ„œλŠ” μΌκ΄€λœ 넀이밍 κ·œμΉ™(예: 파일λͺ…은 kebab-case, μ»΄ν¬λ„ŒνŠΈλŠ” PascalCase)κ³Ό ESLint, Prettier, Huskyλ₯Ό ν†΅ν•œ μžλ™ν™”λœ κ±°λ²„λ„ŒμŠ€, 그리고 Storybook을 ν™œμš©ν•œ μ‹œκ°μ  νšŒκ·€ ν…ŒμŠ€νŠΈκ°€ μ½”λ“œ ν’ˆμ§ˆμ„ 보μž₯ν•©λ‹ˆλ‹€ [39-41]. ## βš–οΈ Trade-offs & Caveats * **Feature-Sliced Design (FSD)의 초기 λ„μž… λΉ„μš© 및 λ³΅μž‘μ„±:** FSDλŠ” ν™•μž₯μ„±κ³Ό λͺ¨λ“ˆν™”에 λ›°μ–΄λ‚˜μ§€λ§Œ λŸ¬λ‹ μ»€λΈŒκ°€ λ†’μœΌλ©°, μž‘μ€ 규λͺ¨μ˜ ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ˜€λ²„μ—”μ§€λ‹ˆμ–΄λ§μœΌλ‘œ 느껴질 수 μžˆμŠ΅λ‹ˆλ‹€ [42, 43]. λ˜ν•œ '인증(Auth)' 같은 νš‘λ‹¨ 관심사(Cross-cutting concerns)λ₯Ό μ •ν™•νžˆ μ–΄λ–€ κΈ°λŠ₯μ΄λ‚˜ μŠ¬λΌμ΄μŠ€μ— λ°°μΉ˜ν• μ§€ 경계λ₯Ό μ„€μ •ν•˜λŠ” 것이 μ–΄λ €μ›Œ νŒ€ λ‚΄ κ·œμΉ™ ν•©μ˜μ™€ 지속적인 λ¬Έμ„œν™”κ°€ μš”κ΅¬λ©λ‹ˆλ‹€ [44, 45]. * **React Compiler 적용의 μ œμ•½:** React Compilerκ°€ μžλ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μˆ˜ν–‰ν•˜μ—¬ μ„±λŠ₯을 λ†’μ—¬μ£Όμ§€λ§Œ, μ΄λŠ” λΈ”λž™λ°•μŠ€λ‘œ λ™μž‘ν•˜κΈ° λ•Œλ¬Έμ— 예기치 μ•Šκ²Œ λ¦¬λ Œλ”λ§μ΄ λ°œμƒν–ˆμ„ λ•Œ 원인을 λ””λ²„κΉ…ν•˜κΈ° 더 μ–΄λ €μ›Œμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€ [46]. λ˜ν•œ λ§€ λ Œλ”λ§λ§ˆλ‹€ μƒˆλ‘œμš΄ 객체 μ°Έμ‘°λ₯Ό λ°˜ν™˜ν•˜λŠ” μ„œλ“œνŒŒν‹° λΌμ΄λΈŒλŸ¬λ¦¬μ™€ μΆ©λŒν•  수 있으며, λ ˆκ±°μ‹œ μ½”λ“œλ² μ΄μŠ€μ˜ 경우 React의 λΆˆλ³€μ„± 및 λΆ€μˆ˜ 효과 κ·œμΉ™(Rules of React)을 μ—„κ²©νžˆ μ€€μˆ˜ν•˜λ„λ‘ λŒ€λŒ€μ μΈ λ¦¬νŒ©ν† λ§μ΄ μ„ ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ [28, 47, 48]. * **Context API vs. μ™ΈλΆ€ μƒνƒœ 관리 라이브러리의 νŠΈλ ˆμ΄λ“œμ˜€ν”„:** Context APIλŠ” λ‚΄μž₯ κΈ°λŠ₯μ΄λ―€λ‘œ μ˜μ‘΄μ„±μ„ μΆ”κ°€ν•˜μ§€ μ•ŠλŠ” μž₯점이 μžˆμ§€λ§Œ, 변경이 μž¦μ€ μƒνƒœμ— μ‚¬μš©ν•  경우 λΆˆν•„μš”ν•œ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈμ˜ 연쇄 λ¦¬λ Œλ”λ§μ„ μœ λ°œν•˜λŠ” 치λͺ…적인 μ„±λŠ₯ 병λͺ©μ„ λ°œμƒμ‹œν‚΅λ‹ˆλ‹€ [19, 20]. λ°˜λŒ€λ‘œ Zustandλ‚˜ TanStack Queryλ₯Ό λ„μž…ν•˜λ©΄ λ¦¬λ Œλ”λ§ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμœΌλ‚˜, μ‹œμŠ€ν…œμ— μƒˆλ‘œμš΄ 라이브러리 μ˜μ‘΄μ„±κ³Ό ν•™μŠ΅ 곑선이 μΆ”κ°€λ©λ‹ˆλ‹€ [21, 49]. * **DRY와 KISS μ›μΉ™μ˜ 상좩:** 쀑볡을 쀄이기(DRY) μœ„ν•΄ 곡톡 λ‘œμ§μ„ κ³ μ°¨ μ»΄ν¬λ„ŒνŠΈ(HOC)λ‚˜ μ»€μŠ€ν…€ ν›…μœΌλ‘œ μ§€λ‚˜μΉ˜κ²Œ μΆ”μƒν™”ν•˜λ©΄, μ½”λ“œκ°€ μ›λž˜μ˜ λ‹¨μˆœν•œ ν˜•νƒœλ³΄λ‹€ μ΄ν•΄ν•˜κ³  λ””λ²„κΉ…ν•˜κΈ° 훨씬 μ–΄λ €μ›Œμ Έ κ²°κ΅­ KISS 원칙을 μœ„λ°°ν•˜κ²Œ λ˜λŠ” λΆ€μž‘μš©μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€ [17]. ## πŸ”— Knowledge Connections ### Related Concepts #### [관계 μœ ν˜• A: μ•„ν‚€ν…μ²˜ 및 μ‹œμŠ€ν…œ ꡬ쑰 (Architecture & Structural Design)] * `[[Feature-Sliced Design (FSD)|Feature-Sliced Design (FSD)]]` * μ—°κ²° 이유: ν˜„λŒ€ ν”„λ‘ νŠΈμ—”λ“œμ˜ λͺ¨λ“ˆν™” 및 ν™•μž₯성을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 널리 μ±„νƒλ˜λŠ” μ•„ν‚€ν…μ²˜ λ°©λ²•λ‘ μ˜ 핡심이기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [9, 10]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λΉ„μ¦ˆλ‹ˆμŠ€ 도메인 기반의 μ½”λ“œ λΆ„ν• , μ—„κ²©ν•œ 단방ν–₯ μ˜μ‘΄μ„± κ·œμΉ™ 적용 방법, 그리고 퍼블릭 APIλ₯Ό ν†΅ν•œ λͺ¨λ“ˆ μΊ‘μŠν™” 원리 [4, 8, 50]. * `[[Error Boundaries|Error Boundaries]]` * μ—°κ²° 이유: 뢀뢄적인 UI λŸ°νƒ€μž„ μ—λŸ¬κ°€ μ‹œμŠ€ν…œ μ „μ²΄μ˜ μž₯μ• (White screen of death)둜 ν™•μ‚°λ˜λŠ” 것을 λ°©μ§€ν•˜λŠ” ꡬ쑰적 μ•ˆμ „ μž₯치이기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [33, 34]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λ Œλ”λ§ νŠΈλ¦¬μ—μ„œ μ»΄ν¬λ„ŒνŠΈ 결함을 κ²©λ¦¬ν•˜λŠ” 원리와 μ‹œμŠ€ν…œ 볡원λ ₯을 λ†’μ΄λŠ” μ—λŸ¬ 처리 μ „λž΅ [33, 35]. #### [관계 μœ ν˜• B: μƒνƒœ 관리 νŒ¨λŸ¬λ‹€μž„ (State Management Paradigms)] * `Zustand vs Context API` * μ—°κ²° 이유: μ „μ—­ μƒνƒœ κ΄€λ¦¬μ—μ„œ μ„±λŠ₯κ³Ό ν™•μž₯성을 κ²°μ •μ§“λŠ” κ°€μž₯ λΉˆλ²ˆν•œ μ•„ν‚€ν…μ²˜ κ²°μ • 지점이기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [5, 19]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: Context API의 λΈŒλ‘œλ“œμΊμŠ€νŠΈ λ Œλ”λ§ 문제점과 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ Zustand의 ꡬ독/μ„ νƒμž(Selector) 기반 λ Œλ”λ§ μ΅œμ ν™” 기법 [19, 20, 51]. * `TanStack Query (React Query)` * μ—°κ²° 이유: ν΄λΌμ΄μ–ΈνŠΈ μƒνƒœμ™€ μ„œλ²„ μƒνƒœ(Server State)λ₯Ό ꡬ쑰적으둜 λΆ„λ¦¬ν•˜μ—¬ API 데이터 처리의 병λͺ©μ„ μ—†μ• μ£ΌκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€ [18, 22]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 데이터 캐싱, λ°±κ·ΈλΌμš΄λ“œ 동기화 및 API κ³„μΈ΅μ˜ 관심사 뢄리(Separation of Concerns) [18, 22]. #### [관계 μœ ν˜• C: μ„±λŠ₯ 및 λΉŒλ“œ μ΅œμ ν™” (Performance & Build Optimization)] * `[[React Compiler|React Compiler]]` * μ—°κ²° 이유: μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ˜ λ³΅μž‘μ„±μ„ 쀄이고 λΉŒλ“œ νƒ€μž„μ— μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§ μ„±λŠ₯을 μžλ™μœΌλ‘œ μ΅œμ ν™”ν•˜λŠ” μ΅œμ‹  핡심 도ꡬ이기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [25, 28, 29]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 선언적 UI ν”„λ ˆμž„μ›Œν¬μ—μ„œμ˜ λΉŒλ“œ νƒ€μž„ μ΅œμ ν™” ν•œκ³„ 및 React의 κ·œμΉ™(Rules of React)이 κ°•μ œν•˜λŠ” λΆˆλ³€μ„±μ˜ μ€‘μš”μ„± [52, 53]. * `Code Splitting & Lazy Loading` * μ—°κ²° 이유: 초기 λ‘œλ“œ(First Paint) 속도 ν–₯상과 JavaScript λ²ˆλ“€ 크기λ₯Ό μ œμ–΄ν•˜λŠ” ν™•μž₯ κ°€λŠ₯ν•œ μ‹œμŠ€ν…œμ˜ ν•„μˆ˜ μ„±λŠ₯ μ „λž΅μ΄κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€ [30, 31, 54]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: Viteλ‚˜ Webpack 같은 λ²ˆλ“€λŸ¬ ν™˜κ²½μ—μ„œ 동적 μž„ν¬νŠΈλ₯Ό ν†΅ν•œ 라우트 λ‹¨μœ„ λΆ„ν•  및 무거운 벀더 청크(`manualChunks`)의 캐싱 뢄리 μ „λž΅ [26, 27, 31]. ### Deeper Research Questions * κ±°λŒ€ν•œ λͺ¨λ†€λ¦¬μ‹ ꡬ쑰 ν˜Ήμ€ 단일 파일 νƒ€μž…(components/, hooks/) 기반의 λ ˆκ±°μ‹œ React 앱을 Feature-Sliced Design(FSD) μ•„ν‚€ν…μ²˜λ‘œ μ μ§„μ μœΌλ‘œ λ¦¬νŒ©ν† λ§ν•  λ•Œ κ³ λ €ν•΄μ•Ό ν•  졜적의 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ „λž΅μ€ 무엇인가? * React Compilerκ°€ λ„μž…λ˜μ–΄ μ»΄ν¬λ„ŒνŠΈμ˜ λ¦¬λ Œλ”λ§μ„ μžλ™μœΌλ‘œ μ œμ–΄ν•˜κ²Œ λœλ‹€λ©΄, κ°œλ°œμžλŠ” 더 이상 `useMemo`λ‚˜ `useCallback`을 μž‘μ„±ν•  ν•„μš”κ°€ μ™„μ „νžˆ μ—†μ–΄μ§€λŠ”κ°€? ν˜Ήμ€ μ—¬μ „νžˆ μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ΄ ν•„μˆ˜μ μΈ μ—£μ§€ μΌ€μ΄μŠ€λŠ” 무엇인가? * Zustand와 같은 ν΄λΌμ΄μ–ΈνŠΈ μƒνƒœ 관리와 TanStack Query와 같은 μ„œλ²„ μƒνƒœ 관리 라이브러리λ₯Ό λ™μ‹œ μ‚¬μš©ν•  λ•Œ, 두 μƒνƒœ μ‚¬μ΄μ˜ 데이터 동기화와 μ˜μ‘΄μ„± μ£Όμž…μ€ μ–΄λ–»κ²Œ 섀계해야 응집도λ₯Ό 높일 수 μžˆλŠ”κ°€? * ν”„λ‘ νŠΈμ—”λ“œ μ„±λŠ₯ μ΅œμ ν™” 쀑 λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•΄ Chrome DevTools νž™ μŠ€λƒ…μƒ·μ—μ„œ μ‹λ³„λ˜λŠ” 'λΆ„λ¦¬λœ DOM λ…Έλ“œ(Detached DOM Nodes)'와 ν΄λ‘œμ €(Closure) μž”λ₯˜ 문제λ₯Ό ν”„λ‘œλ•μ…˜μ—μ„œ μ–΄λ–»κ²Œ λͺ¨λ‹ˆν„°λ§ν•˜κ³  λ°©μ§€ν•  수 μžˆλŠ”κ°€? * Viteλ₯Ό ν™œμš©ν•œ λΉŒλ“œ μ‹œ λŒ€κ·œλͺ¨ 벀더 라이브러리둜 μΈν•œ λ²ˆλ“€ μ‚¬μ΄μ¦ˆ κ²½κ³ ("Large Chunks")λ₯Ό 근본적으둜 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ `manualChunks` 섀정을 μ–΄λ–»κ²Œ λΆ„ν• ν•΄μ•Ό λΈŒλΌμš°μ €μ˜ 병렬 λ‹€μš΄λ‘œλ“œ 및 캐싱 νš¨μœ¨μ„ κ·ΉλŒ€ν™”ν•  수 μžˆλŠ”κ°€? ### Practical Application Contexts * **Implementation:** μ‹ κ·œ 도메인 κΈ°λŠ₯을 κ΅¬ν˜„ν•  λ•Œ 둜직, UI, μ»€μŠ€ν…€ 훅을 ν•˜λ‚˜μ˜ ν”Όμ²˜(Feature) 폴더에 μ‘μ§‘μ‹œν‚€κ³  λ‹€λ₯Έ ν”Όμ²˜μ—μ„œμ˜ 직접 μž„ν¬νŠΈλ₯Ό μ œν•œν•˜μ—¬ μ² μ €νžˆ μΊ‘μŠν™”λœ μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€ [3, 4]. 빈번히 λ°œμƒν•˜λŠ” μ΄λ²€νŠΈλ‚˜ λ Œλ”λ§ 둜직 μ•ˆμ—μ„œλŠ” 인라인 읡λͺ… ν•¨μˆ˜ μ‚¬μš©μ„ μ§€μ–‘ν•˜κ³  λΆˆν•„μš”ν•œ μž¬ν• λ‹Ήμ„ λ§‰μŠ΅λ‹ˆλ‹€ [55, 56]. * **System Design:** μ‹œμŠ€ν…œ 초기 μ•„ν‚€ν…μ²˜λ₯Ό 섀계할 λ•Œ μƒνƒœμ˜ μœ ν˜•μ„ λͺ…ν™•νžˆ λΆ„λ₯˜ν•˜μ—¬, 자주 λ°”λ€Œμ§€ μ•ŠλŠ” ν…Œλ§ˆ/섀정은 Context API에, μƒν˜Έμž‘μš©μ΄ μž¦μ€ μž₯λ°”κ΅¬λ‹ˆ/UI μƒνƒœλŠ” Zustand에, μ„œλ²„ λ°μ΄ν„°λŠ” TanStack Query에 μœ„μž„ν•˜λŠ” 닀측적 μƒνƒœ 트리λ₯Ό μ„€κ³„ν•©λ‹ˆλ‹€ [5, 18, 57]. * **Operation / Maintenance:** ν”„λ‘œλ•μ…˜ 배포 ν›„ Sentry, LogRocket, Datadogκ³Ό 같은 κ°€μ‹œμ„±(Observability) 및 ν΄λΌμš°λ“œ λ‘œκΉ… 도ꡬλ₯Ό 연동해 μ‚¬μš©μž μ„Έμ…˜μ„ λ¦¬ν”Œλ ˆμ΄ν•˜κ³  λŸ°νƒ€μž„ 였λ₯˜ 및 λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 이슈λ₯Ό 사전에 νƒμ§€ν•©λ‹ˆλ‹€ [36, 37]. * **Learning Path:** React 기초(useState, Props)와 μ»΄ν¬λ„ŒνŠΈ 뢄리(SOLID, Clean Code) κ°œλ…μ„ μˆ™μ§€ν•œ ν›„, μ μ§„μ μœΌλ‘œ Context API의 ν•œκ³„λ₯Ό μ²΄ν—˜ν•˜κ³  Zustand둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” 과정을 거치며 λ Œλ”λ§ μ΅œμ ν™”μ™€ λ©”λͺ¨μ΄μ œμ΄μ…˜μ˜ 원리λ₯Ό ν•™μŠ΅ν•©λ‹ˆλ‹€ [4, 14, 58]. * **My Project Relevance:** ν˜„μž¬ μœ μ§€λ³΄μˆ˜ 쀑인 κ±°λŒ€ν•œ React ν”„λ‘œμ νŠΈκ°€ μžˆλ‹€λ©΄, μ»΄ν¬λ„ŒνŠΈ 트리 상단에 λ¬΄λΆ„λ³„ν•˜κ²Œ 배치된 Context Providerλ₯Ό κ±·μ–΄λ‚΄κ³  Zustand 기반의 λΆ€λΆ„ ꡬ독 νŒ¨ν„΄μœΌλ‘œ λ¦¬νŒ©ν† λ§ν•˜κ±°λ‚˜ [21], Storybook 및 Chromatic을 CI νŒŒμ΄ν”„λΌμΈμ— λ„μž…ν•˜μ—¬ PR λ‹¨κ³„μ—μ„œ μ‹œκ°μ  νšŒκ·€ ν…ŒμŠ€νŠΈ(Visual Test)λ₯Ό μžλ™ν™”ν•˜μ—¬ ν’ˆμ§ˆμ„ κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [41, 59]. ### Adjacent Topics * `[[Core Web Vitals|Core Web Vitals]]` * ν™•μž₯ λ°©ν–₯: LCP(Largest Contentful Paint), INP(Interaction to Next Paint), CLS(Cumulative Layout Shift) λ“± ꡬ글이 μ •μ˜ν•œ μ‚¬μš©μž κ²½ν—˜ μ€‘μ‹¬μ˜ μ„±λŠ₯ μΈ‘μ • μ§€ν‘œλ₯Ό μ΄ν•΄ν•˜κ³ , μ•žμ„œ 닀룬 μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…, λ ˆμ΄μ§€ λ‘œλ”©, λ Œλ”λ§ μ΅œμ ν™” 기법이 μ‹€μ œ μ‚¬μš©μž 체감 속도 ν–₯상에 μ–΄λ–»κ²Œ μ§κ²°λ˜λŠ”μ§€ 심측 λΆ„μ„ν•˜λŠ” λ°©ν–₯으둜 연ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€ [23, 60, 61]. * `Git Branching Strategies & CI/CD Governance` * ν™•μž₯ λ°©ν–₯: λ³΅μž‘ν•œ ν”„λ‘ νŠΈμ—”λ“œ μ‹œμŠ€ν…œμ„ λ‹€μˆ˜μ˜ κ°œλ°œμžκ°€ ν˜‘μ—…ν•˜μ—¬ ꡬ좕할 λ•Œ μΆ©λŒμ„ μ΅œμ†Œν™”ν•˜κ³  릴리슀 μ•ˆμ •μ„±μ„ 높이기 μœ„ν•œ GitHub Flow, Trunk-Based Development λ“±μ˜ 브랜칭 μ „λž΅κ³Ό, ESLint/Prettier μžλ™ν™”, Conventional Commitsλ₯Ό ν™œμš©ν•œ 배포 νŒŒμ΄ν”„λΌμΈ(CI/CD) ν†΅μ œ 방법을 ν™•μž₯ν•΄μ„œ 쑰사할 수 μžˆμŠ΅λ‹ˆλ‹€ [62-64]. --- *Last updated: 2026-04-30*