# [[Frontend Application Stability]] ## πŸ“Œ Brief 단기 μš”μ•½ Frontend Application Stability(ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•ˆμ •μ„±)λŠ” ν˜„λŒ€μ˜ λ³΅μž‘ν•œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λŸ°νƒ€μž„ 였λ₯˜, μ„±λŠ₯ μ €ν•˜ 및 λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό μš°μ•„ν•˜κ²Œ μ²˜λ¦¬ν•˜λ©° μ‹ λ’°μ„± 있게 μž‘λ™ν•˜λŠ” μƒνƒœλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€ [1-3]. 이λ₯Ό λ‹¬μ„±ν•˜κΈ° μœ„ν•΄μ„œλŠ” 단일 μ»΄ν¬λ„ŒνŠΈμ˜ 였λ₯˜κ°€ 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν¬λž˜μ‹œ(예: 흰 ν™”λ©΄)둜 μ΄μ–΄μ§€λŠ” 것을 λ§‰λŠ” λ°©μ–΄ κΈ°μ œμ™€ 효율적인 λ©”λͺ¨λ¦¬ 관리, 그리고 예츑 κ°€λŠ₯ν•œ μ•„ν‚€ν…μ²˜ 섀계가 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [2, 4, 5]. 결과적으둜 μ•ˆμ •μ μΈ μ‹œμŠ€ν…œμ€ μ˜ˆμƒμΉ˜ λͺ»ν•œ 결함이 λ°œμƒν•˜λ”λΌλ„ μ•±μ˜ λ‚˜λ¨Έμ§€ 뢀뢄을 μƒν˜Έμž‘μš© κ°€λŠ₯ν•œ μƒνƒœλ‘œ μœ μ§€ν•˜λ©° μ‚¬μš©μž κ²½ν—˜μ„ λ³΄ν˜Έν•©λ‹ˆλ‹€ [6, 7]. ## πŸ“– Core Content * **μ—λŸ¬ 경계(Error Boundaries)λ₯Ό ν†΅ν•œ μž₯μ•  격리:** React μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ Œλ”λ§ 쀑 였λ₯˜κ°€ λ°œμƒν•˜λ©΄ 기본적으둜 전체 μ»΄ν¬λ„ŒνŠΈ 트리λ₯Ό 마운트 ν•΄μ œν•˜μ—¬ 빈 화면을 λ…ΈμΆœν•©λ‹ˆλ‹€ [8, 9]. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ Error Boundary(클래슀 μ»΄ν¬λ„ŒνŠΈ ν˜•νƒœ)λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•˜μœ„ νŠΈλ¦¬μ—μ„œ λ°œμƒν•˜λŠ” JavaScript μ—λŸ¬(λ Œλ”λ§, 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œ, μƒμ„±μž λ‚΄λΆ€)λ₯Ό ν¬μ°©ν•˜κ³  λŒ€μ²΄ UI(Fallback UI)λ₯Ό λ Œλ”λ§ν•©λ‹ˆλ‹€ [2, 9]. λŒ€μ‹œλ³΄λ“œ, μ„œλ“œνŒŒν‹° μœ„μ ―, λ³΅μž‘ν•œ 폼 λ“± λΆˆμ•ˆμ •ν•œ UI μ„Ήμ…˜μ„ κ°œλ³„ Error Boundary둜 감싸면 ν•œ μ»΄ν¬λ„ŒνŠΈμ— 버그가 μžˆμ–΄λ„ μ•±μ˜ λ‚˜λ¨Έμ§€ κΈ°λŠ₯은 정상 μž‘λ™ν•©λ‹ˆλ‹€ [4, 6, 8]. * **λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 관리와 μ„±λŠ₯ μ•ˆμ •μ„±:** μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μž₯μ‹œκ°„ 싀행될 λ•Œ ν• λ‹Ήλœ λ©”λͺ¨λ¦¬κ°€ ν•΄μ œλ˜μ§€ μ•Šκ³  λˆ„μ λ˜λŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)λŠ” λͺ¨λ°”일 κΈ°κΈ°μ—μ„œμ˜ μ•± μ •μ§€λ‚˜ μ„±λŠ₯ μ €ν•˜μ˜ μ£Όμ›μΈμž…λ‹ˆλ‹€ [3, 10, 11]. μ»΄ν¬λ„ŒνŠΈκ°€ 마운트 ν•΄μ œλ  λ•Œ μ œκ±°λ˜μ§€ μ•Šμ€ 이벀트 λ¦¬μŠ€λ„ˆλ‚˜ DOM νŠΈλ¦¬μ—μ„œ λΆ„λ¦¬λ˜μ—ˆμœΌλ‚˜ JavaScript μ°Έμ‘°κ°€ λ‚¨μ•„μžˆλŠ” 'Detached DOM nodes', ν΄λ‘œμ €(Closure)에 μ˜ν•΄ μœ μ§€λ˜λŠ” λΆˆν•„μš”ν•œ μ°Έμ‘° 등이 λŒ€ν‘œμ μΈ μ›μΈμž…λ‹ˆλ‹€ [12-14]. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ `useEffect` λ‚΄μ—μ„œ 정리(Cleanup) ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•΄μ•Ό ν•˜λ©° [15], 객체 캐싱 μ‹œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ΄ κ°€λŠ₯ν•œ `WeakMap`을 ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [16]. * **μ˜μ‘΄μ„± μ œμ–΄μ™€ μ•„ν‚€ν…μ²˜ λͺ¨λ“ˆν™”:** λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 UI μ»΄ν¬λ„ŒνŠΈκ°€ λ¬΄λΆ„λ³„ν•˜κ²Œ μ„žμ΄κ³  암묡적인 μ˜μ‘΄μ„±μ΄ 생기면 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ쑰가 λΆ•κ΄΄λ©λ‹ˆλ‹€ [17, 18]. FSD(Feature-Sliced Design) 같은 μ•„ν‚€ν…μ²˜λŠ” μ½”λ“œλ₯Ό κΈ°λŠ₯(Scope) λ‹¨μœ„λ‘œ κ΅¬μ„±ν•˜κ³  단방ν–₯ μ˜μ‘΄μ„±(μƒμœ„ λ ˆμ΄μ–΄λŠ” ν•˜μœ„ λ ˆμ΄μ–΄μ— μ˜μ‘΄ν•  수 μžˆμœΌλ‚˜ 역은 λΆˆκ°€)을 κ°•μ œν•©λ‹ˆλ‹€ [19]. μ΄λŸ¬ν•œ κ·œμΉ™μ€ μˆœν™˜ μ°Έμ‘°λ₯Ό μ œκ±°ν•˜κ³  μ½”λ“œ λ³€κ²½ μ‹œ λ‹€λ₯Έ λͺ¨λ“ˆμ— λ―ΈμΉ˜λŠ” λΆ€μž‘μš©(Side effect)을 μ°¨λ‹¨ν•˜μ—¬ μ½”λ“œλ² μ΄μŠ€μ˜ μ•ˆμ •μ„±μ„ λ†’μž…λ‹ˆλ‹€ [19, 20]. * **λͺ¨λ‹ˆν„°λ§ 및 κ°€μ‹œμ„± 확보:** ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œμ˜ μ•ˆμ •μ„±μ„ μœ μ§€ν•˜λ €λ©΄ μ‚¬μš©μž ν™˜κ²½μ—μ„œ λ°œμƒν•˜λŠ” μ—λŸ¬λ₯Ό ν¬μ°©ν•˜λŠ” λ‘œκΉ… 도ꡬ가 ν•„μš”ν•©λ‹ˆλ‹€ [21, 22]. Sentry, LogRocket, Datadog 같은 ν΄λΌμš°λ“œ 도ꡬ듀은 λ‹¨μˆœν•œ μŠ€νƒ 트레이슀λ₯Ό λ„˜μ–΄, λ„€νŠΈμ›Œν¬ μš”μ²­, μ‚¬μš©μž μƒν˜Έμž‘μš©, Redux/Zustand μƒνƒœ λ³€ν™”λ₯Ό ν¬ν•¨ν•œ 'μ„Έμ…˜ λ¦¬ν”Œλ ˆμ΄(Session Replay)'λ₯Ό μ œκ³΅ν•˜μ—¬ λ³΅μž‘ν•œ λ²„κ·Έμ˜ κ·Όλ³Έ 원인을 좔적할 수 있게 ν•©λ‹ˆλ‹€ [22-26]. * **μ›Œν¬ν”Œλ‘œμš° 및 배포 μ•ˆμ •μ„±:** Git ν”Œλ‘œμš° ν™˜κ²½μ—μ„œ main 브랜치의 배포 μ•ˆμ •μ„±μ„ μœ μ§€ν•˜λ €λ©΄ κΈ°λŠ₯ 브랜치(Feature branch) λ‹¨μœ„λ‘œ μž‘μ—…μ„ λΆ„λ¦¬ν•˜κ³  Pull Request λ‹¨κ³„μ—μ„œ μ½”λ“œ 리뷰λ₯Ό 거쳐야 ν•©λ‹ˆλ‹€ [27-29]. 특히 Storybookκ³Ό Happo 같은 도ꡬλ₯Ό μ—°λ™ν•˜λ©΄, μ‹œκ°μ  νšŒκ·€(Visual Regression)와 μ ‘κ·Όμ„± ν…ŒμŠ€νŠΈλ₯Ό 톡해 μ˜λ„μΉ˜ μ•Šμ€ UI λ³€κ²½μ΄λ‚˜ 결함이 ν”„λ‘œλ•μ…˜μ— λ°°ν¬λ˜λŠ” 것을 사전에 차단할 수 μžˆμŠ΅λ‹ˆλ‹€ [30-32]. ## βš–οΈ Trade-offs & Caveats * **Error Boundaries의 포착 ν•œκ³„:** Error BoundariesλŠ” 선언적인 λ Œλ”λ§ λ‚΄μ˜ μ—λŸ¬λŠ” ν¬μ°©ν•˜μ§€λ§Œ 이벀트 ν•Έλ“€λŸ¬ λ‚΄λΆ€, 비동기 μ½”λ“œ(`setTimeout` λ“±), μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§, ν˜Ήμ€ Error Boundary μ»΄ν¬λ„ŒνŠΈ μžμ²΄μ—μ„œ λ°œμƒν•œ μ—λŸ¬λŠ” μž‘μ•„λ‚΄μ§€ λͺ»ν•©λ‹ˆλ‹€ [33-35]. μ΄λŸ¬ν•œ 경우 기쑴의 λͺ…λ Ήν˜• `try/catch` 블둝을 μˆ˜λ™μœΌλ‘œ μ‚¬μš©ν•΄ λŒ€μ‘ν•΄μ•Ό ν•©λ‹ˆλ‹€ [34, 36]. * **λͺ¨λ‹ˆν„°λ§ λ„κ΅¬μ˜ μ„±λŠ₯ λΆ€ν•˜ 및 λΉ„μš©:** μ„Έμ…˜ λ¦¬ν”Œλ ˆμ΄μ™€ μƒμ„Έν•œ ν”„λ‘ νŠΈμ—”λ“œ λ‘œκΉ…μ„ μ œκ³΅ν•˜λŠ” 도ꡬ(예: LogRocket, Datadog)λŠ” μƒμ„Έν•œ 디버깅 μ»¨ν…μŠ€νŠΈλ₯Ό μ œκ³΅ν•˜λŠ” 이점이 μžˆμœΌλ‚˜, λ²ˆλ“€ 크기λ₯Ό μ¦κ°€μ‹œν‚€κ³  νŽ˜μ΄μ§€ λ‘œλ“œ μ‹œκ°„μ„ μ΅œλŒ€ 120msκΉŒμ§€ μ§€μ—°μ‹œν‚¬ 수 μžˆλŠ” μ„±λŠ₯ μƒμ˜ νŠΈλ ˆμ΄λ“œμ˜€ν”„κ°€ μžˆμŠ΅λ‹ˆλ‹€ [37-39]. λ˜ν•œ, νŠΈλž˜ν”½μ΄ 높은 μ„œλΉ„μŠ€μ—μ„œλŠ” 데이터 μˆ˜μ§‘(Ingest) 및 인덱싱(Index)에 λ§‰λŒ€ν•œ λΉ„μš©μ΄ λ°œμƒν•  수 μžˆμœΌλ―€λ‘œ, 둜그 λ³Όλ₯¨μ„ μ‘°μ ˆν•˜λŠ” λ“±μ˜ νƒ€ν˜‘μ΄ ν•„μš”ν•©λ‹ˆλ‹€ [40-42]. * **μ•„ν‚€ν…μ²˜ 엄격성에 λ”°λ₯Έ ν•™μŠ΅ 곑선:** FSDλ‚˜ μ—„κ²©ν•œ 폴더 뢄리 정책은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μž₯기적 μ•ˆμ •μ„±μ„ λ•μ§€λ§Œ, 초기 μ§„μž… μž₯벽이 λ†’μŠ΅λ‹ˆλ‹€ [43, 44]. κ°œλ°œμžκ°€ μ»΄ν¬λ„ŒνŠΈ 쀑심 μ‚¬κ³ μ—μ„œ 'κΈ°λŠ₯(Feature)' 쀑심 μ‚¬κ³ λ‘œ μ „ν™˜ν•΄μ•Ό ν•˜λ©°, μž‘μ€ ν”„λ‘œμ νŠΈμ—μ„œλŠ” λΆˆν•„μš”ν•œ μΆ”μƒν™”λ‚˜ μ˜€λ²„μ—”μ§€λ‹ˆμ–΄λ§μœΌλ‘œ 느껴질 수 μžˆμŠ΅λ‹ˆλ‹€ [43, 45, 46]. ## πŸ”— Knowledge Connections ### Related Concepts #### [관계 μœ ν˜• A (μ•„ν‚€ν…μ²˜/기반 기술)] - [[Feature-Sliced Design]] - μ—°κ²° 이유: λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ½”λ“œμ˜ λͺ¨λ“ˆμ„±κ³Ό 단방ν–₯ μ˜μ‘΄μ„±μ„ κ°•μ œν•˜μ—¬ ꡬ쑰적 λΆ•κ΄΄λ‘œ μΈν•œ λΆˆμ•ˆμ •μ„±μ„ λ°©μ§€ν•©λ‹ˆλ‹€ [19, 47, 48]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, 곡유 UI, μ—”ν‹°ν‹°λ₯Ό λͺ…ν™•ν•œ 계측(Layers)으둜 λ‚˜λˆ„κ³  μ™ΈλΆ€ μΈν„°νŽ˜μ΄μŠ€(Public API)λ§Œμ„ λ…ΈμΆœμ‹œμΌœ μ˜μ‘΄μ„±μ„ κ΄€λ¦¬ν•˜λŠ” 원리 [19, 20, 49]. - [[React Error Boundaries]] - μ—°κ²° 이유: λŸ°νƒ€μž„ λ Œλ”λ§ μ—λŸ¬κ°€ λ°œμƒν–ˆμ„ λ•Œ μ•± 전체가 μ •μ§€ν•˜λŠ” 것을 막고, μ‚¬μš©μžμ—κ²Œ μœ μ—°ν•œ λŒ€μ²˜ λ°©μ•ˆμ„ μ œκ³΅ν•˜λŠ” 핡심 λ°©μ–΄ μˆ˜λ‹¨μž…λ‹ˆλ‹€ [2, 7, 9]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: React μ»΄ν¬λ„ŒνŠΈ 생λͺ…μ£ΌκΈ° λ‚΄μ—μ„œ μ—λŸ¬λ₯Ό μ „νŒŒν•˜κ³  λŒ€μ²΄ ν™”λ©΄(Fallback UI)으둜 λ³΅κ΅¬ν•˜λŠ” 선언적 μ—λŸ¬ 처리 방식 [33, 34, 50]. - [[Memory Leaks]] - μ—°κ²° 이유: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μž₯μ‹œκ°„ μ‚¬μš©λ  λ•Œ λ©”λͺ¨λ¦¬ ν•œκ³„λ₯Ό μ΄ˆκ³Όν•˜μ—¬ 앱이 λ©ˆμΆ”κ±°λ‚˜ 좩돌(Crash)ν•˜κ²Œ λ§Œλ“œλŠ” μ£Όμš” μ›μΈμž…λ‹ˆλ‹€ [10, 11]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λΆ„λ¦¬λœ DOM λ…Έλ“œ(Detached DOM nodes)λ‚˜ ν•΄μ œλ˜μ§€ μ•Šμ€ 이벀트 λ¦¬μŠ€λ„ˆκ°€ JavaScript κ°€λΉ„μ§€ 컬렉터λ₯Ό λ°©ν•΄ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜ [12, 13, 51]. #### [관계 μœ ν˜• B (κ΅¬ν˜„/ν™œμš© 도ꡬ)] - [[Cloud Logging Tools]] - μ—°κ²° 이유: ν”„λ‘œλ•μ…˜ ν™˜κ²½μ˜ ν”„λ‘ νŠΈμ—”λ“œ μ—λŸ¬μ™€ μ„±λŠ₯ 이슈λ₯Ό κ°€μ‹œν™”ν•˜κ³  μ‹€μ‹œκ°„μœΌλ‘œ λͺ¨λ‹ˆν„°λ§ν•˜μ—¬ 문제 ν•΄κ²° 속도λ₯Ό κ·ΉλŒ€ν™”ν•©λ‹ˆλ‹€ [21, 22]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ„Έμ…˜ λ¦¬ν”Œλ ˆμ΄(Session Replay), μ—λŸ¬ μžλ™ κ·Έλ£Ήν™”, λΆ„μ‚° 좔적(Distributed Tracing)을 ν†΅ν•œ λ³΅μž‘ν•œ 버그 μ»¨ν…μŠ€νŠΈμ˜ 해석 κ³Όμ • [23-25, 52]. - [[Chrome DevTools Memory Profiler]] - μ—°κ²° 이유: λˆˆμ— 보이지 μ•ŠλŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ 객체 μœ μ§€(Retention) μƒνƒœλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ μ§„λ‹¨ν•˜μ—¬ μ•ˆμ •μ„±μ„ κ°œμ„ ν•˜λŠ” 뢄석 λ„κ΅¬μž…λ‹ˆλ‹€ [5, 11]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: νž™ μŠ€λƒ…μƒ·(Heap Snapshot)의 델타(Delta) κ°’ 비ꡐ 및 ν• λ‹Ή νƒ€μž„λΌμΈ(Allocation Timeline)을 톡해 λˆ„μˆ˜ 원인 객체λ₯Ό μ—­μΆ”μ ν•˜λŠ” 방법 [5, 53, 54]. ### Deeper Research Questions - React Error Boundariesκ°€ 비동기 λ‘œμ§μ΄λ‚˜ 이벀트 ν•Έλ“€λŸ¬μ—μ„œ λ°œμƒν•˜λŠ” μ˜ˆμ™Έλ₯Ό 본질적으둜 ν¬μ°©ν•˜μ§€ λͺ»ν•˜λŠ” React의 λ Œλ”λ§ μ•„ν‚€ν…μ²˜μ  μ΄μœ λŠ” 무엇인가? - ν”„λ‘ νŠΈμ—”λ“œ ν™˜κ²½μ—μ„œ WeakMap을 ν™œμš©ν•œ μΊμ‹œ 관리가 ν΄λ‘œμ €(Closure)둜 인해 λ°œμƒν•˜λŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό ꡬ체적으둜 μ–΄λ–»κ²Œ μ˜ˆλ°©ν•˜λŠ”κ°€? - λŒ€κ·œλͺ¨ νŒ€ ν™˜κ²½μ—μ„œ Feature-Sliced Design(FSD) λ„μž… μ‹œ, 인증(Auth)κ³Ό 같은 νš‘λ‹¨ 관심사(Cross-cutting concerns)λ₯Ό λ ˆμ΄μ–΄ 원칙에 μœ„λ°°λ˜μ§€ μ•Šκ²Œ λ°°μΉ˜ν•˜λŠ” 졜적의 방법은 무엇인가? - ν”„λ‘œλ•μ…˜ ν™˜κ²½μ— Sentryλ‚˜ LogRocket을 μ μš©ν•  λ•Œ, Core Web Vitals(특히 TBT, INP λ“±) μ €ν•˜λ₯Ό μ΅œμ†Œν™”ν•˜λ©΄μ„œλ„ ν•„μš”ν•œ 둜그λ₯Ό ν™•λ³΄ν•˜κΈ° μœ„ν•œ 졜적의 μƒ˜ν”Œλ§ λΉ„μœ¨κ³Ό μ„€μ • μ „λž΅μ€ 무엇인가? - μ „μ—­ μƒνƒœ 관리 도ꡬ(Context API vs. Zustand λ“±)의 선택이 λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§ 폭주λ₯Ό μœ λ°œν•˜μ—¬ μ•±μ˜ μ„±λŠ₯적 μ•ˆμ •μ„±μ— λ―ΈμΉ˜λŠ” ꡬ쑰적인 μ°¨μ΄λŠ” 무엇인가? ### Practical Application Contexts - **Implementation:** React μ»΄ν¬λ„ŒνŠΈλ₯Ό μž‘μ„±ν•  λ•Œ μ„œλ“œνŒŒν‹° λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ λ³΅μž‘ν•œ 데이터λ₯Ό λ‹€λ£¨λŠ” μœ„μ ―μ€ κ°œλ³„ Error Boundary둜 감싸 였λ₯˜λ₯Ό κ΅­μ†Œν™”(Isolate)ν•˜κ³ , `useEffect` ν›… λ‚΄λΆ€μ˜ 이벀트 ꡬ독은 λ°˜λ“œμ‹œ ν•΄μ œ(Cleanup)ν•˜μ—¬ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€ [4, 8, 15, 16]. - **System Design:** μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 폴더 ꡬ쑰λ₯Ό 기술 μŠ€νƒ 기쀀이 μ•„λ‹Œ κΈ°λŠ₯(Feature/Domain) 기반 λ˜λŠ” FSD ꡬ쑰둜 μ„€κ³„ν•˜μ—¬ λͺ¨λ“ˆ κ°„μ˜ 암묡적인 μ–½νž˜μ„ 막고 μž₯기적인 μœ μ§€λ³΄μˆ˜μ„±μ„ 보μž₯ν•©λ‹ˆλ‹€ [48, 55, 56]. - **Operation / Maintenance:** Sentry λ˜λŠ” Datadog RUM을 CI/CD νŒŒμ΄ν”„λΌμΈκ³Ό ν†΅ν•©ν•˜μ—¬, μƒˆλ‘œμš΄ 배포 직후 λ°œμƒν•˜λŠ” κ³ μœ ν•œ λŸ°νƒ€μž„ 였λ₯˜λ‚˜ 퍼포먼슀 μ €ν•˜λ₯Ό μ„Έμ…˜ λ¦¬ν”Œλ ˆμ΄λ₯Ό 톡해 μ¦‰κ°μ μœΌλ‘œ μΈμ§€ν•˜κ³  ν•«ν”½μŠ€λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€ [22-24, 52]. - **Learning Path:** μš°μ„  React의 λ Œλ”λ§ λ™μž‘ 원리와 생λͺ…μ£ΌκΈ° λ©”μ„œλ“œλ₯Ό ν•™μŠ΅ν•œ λ’€, Error Boundaries κ΅¬ν˜„ -> Chrome DevToolsλ₯Ό ν™œμš©ν•œ Memory Leak 뢄석 기법 -> FSD 같은 ν™•μž₯ κ°€λŠ₯ν•œ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄ μˆœμ„œλ‘œ μ‹œμŠ€ν…œ 레벨의 μ•ˆμ •μ„± 섀계 λŠ₯λ ₯을 ν‚€μ›λ‹ˆλ‹€ [2, 9, 47, 53]. - **My Project Relevance:** ν˜„μž¬ μœ μ§€λ³΄μˆ˜ μ€‘μ΄κ±°λ‚˜ 개발 쀑인 ν”„λ‘œμ νŠΈμ˜ `main` 브랜치 μ•ˆμ •μ„±μ„ μœ„ν•΄ Pull Request μ‹œ Storybook 및 Happoλ₯Ό ν†΅ν•œ μ‹œκ°μ  νšŒκ·€ ν…ŒμŠ€νŠΈ(Visual Regression Test) μžλ™ν™”λ₯Ό μ—°λ™ν•˜κ³ , λΆˆμ•ˆμ •ν•œ νŽ˜μ΄μ§€ ꡬ역에 Error Boundaryλ₯Ό μ”Œμ›Œ μ‚¬μš©μžμ˜ μ΄νƒˆμ„ λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [8, 30, 31]. ### Adjacent Topics - [[React Performance Optimization]] - ν™•μž₯ λ°©ν–₯: μ•ˆμ •μ„± μœ μ§€λΏ μ•„λ‹ˆλΌ `React.memo`, `useMemo`, `useCallback`, 가상화(Virtualization) 등을 톡해 λΆˆν•„μš”ν•œ λ¦¬λ Œλ”λ§μ„ μ°¨λ‹¨ν•˜κ³  λŸ°νƒ€μž„ μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•˜λŠ” μ‹€ν–‰ 레벨의 μ΅œμ ν™” 기법 탐ꡬ [57-60]. - [[Git Workflow & Governance]] - ν™•μž₯ λ°©ν–₯: μ•ˆμ •μ μΈ 배포와 버전 관리λ₯Ό λ‹΄λ³΄ν•˜κΈ° μœ„ν•œ Feature Branching, GitHub Flow, Conventional Commits λ“± ν˜‘μ—… κ·œμΉ™ 및 CI/CD ν’ˆμ§ˆ 게이트(Quality gates) 적용 λ°©μ•ˆ [29, 61-63]. --- *Last updated: 2026-04-30*