# [[Large-scale Application Architecture]] ## πŸ“Œ Brief Summary λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•„ν‚€ν…μ²˜(Large-scale Application Architecture)λŠ” λ‹¨μˆœν•œ 슀크립트λ₯Ό λ„˜μ–΄ λ³΅μž‘ν•œ λΆ„μ‚° μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμœΌλ‘œ μ§„ν™”ν•œ ν˜„λŒ€ ν”„λ‘ νŠΈμ—”λ“œλ₯Ό μ§€νƒ±ν•˜κΈ° μœ„ν•œ μ—„κ²©ν•œ ꡬ쑰적 κΈ°λ°˜μž…λ‹ˆλ‹€ [1]. μ΄λŠ” μœ μ§€λ³΄μˆ˜μ„±, ν™•μž₯μ„±, μ„±λŠ₯을 κ·ΉλŒ€ν™”ν•˜κΈ° μœ„ν•΄ μ½”λ“œλ₯Ό 기술적 역할이 μ•„λ‹Œ λΉ„μ¦ˆλ‹ˆμŠ€ κΈ°λŠ₯(Feature)κ³Ό 도메인 μ€‘μ‹¬μœΌλ‘œ κ΅¬μ„±ν•˜λŠ” 것을 ν•΅μ‹¬μœΌλ‘œ ν•©λ‹ˆλ‹€ [1-3]. λŒ€ν‘œμ μœΌλ‘œ Feature-Sliced Design(FSD)κ³Ό 같은 방법둠을 톡해 λͺ…ν™•ν•œ 경계와 μΊ‘μŠν™”, 단방ν–₯ μ˜μ‘΄μ„±μ„ κ°•μ œν•˜μ—¬ μ‹œμŠ€ν…œμ˜ 예츑 κ°€λŠ₯ν•œ μ„±μž₯을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€ [4-7]. ## πŸ“– Core Content * **μ•„ν‚€ν…μ²˜μ˜ ν•„μš”μ„±κ³Ό μ‹€νŒ¨ μš”μΈ**: λ¦¬μ•‘νŠΈ μ‹œμŠ€ν…œμ΄ λŒ€κ·œλͺ¨λ‘œ μ„±μž₯ν•  λ•Œ λ§ˆμ£Όν•˜λŠ” κ°€μž₯ ν”ν•œ μ‹€νŒ¨ 원인은 λ Œλ”λ§ 속도 λ“±μ˜ 기술적 μš”μΈμ΄ μ•„λ‹Œ 'μ•„ν‚€ν…μ²˜μ˜ λΆ•κ΄΄'μž…λ‹ˆλ‹€ [8, 9]. λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 UI μ»΄ν¬λ„ŒνŠΈλ‘œ μƒˆμ–΄λ‚˜κ°€κ±°λ‚˜, μƒνƒœ μ†Œμœ κΆŒμ΄ μ€‘λ³΅λ˜κ³  λΆˆλΆ„λͺ…ν•΄μ§€λ©΄, ν•˜λ‚˜μ˜ λ³€κ²½ 사항이 μ‹œμŠ€ν…œ 전체에 영ν–₯을 λ―ΈμΉ˜λŠ” μˆ¨κ²¨μ§„ κ²°ν•©(Hidden coupling)을 μƒμ„±ν•˜μ—¬ 개발 속도λ₯Ό κΈ‰κ²©νžˆ μ €ν•˜μ‹œν‚΅λ‹ˆλ‹€ [8-10]. * **κΈ°λŠ₯ 기반 ꡬ쑰와 Feature-Sliced Design (FSD)**: 폴더λ₯Ό μ»΄ν¬λ„ŒνŠΈ, ν›… λ“± 기술적 파일 μœ ν˜•λ³„λ‘œ λΆ„λ¦¬ν•˜λŠ” 방식은 μ†Œκ·œλͺ¨ μ•±μ—μ„œλŠ” μ§κ΄€μ μ΄λ‚˜ λŒ€κ·œλͺ¨ ν™˜κ²½μ—μ„œλŠ” ν™•μž₯성이 맀우 λ–¨μ–΄μ§‘λ‹ˆλ‹€ [2, 11-13]. 이에 λŒ€ν•œ ν•΄κ²°μ±…μœΌλ‘œ λΉ„μ¦ˆλ‹ˆμŠ€ κΈ°λŠ₯κ³Ό μ‚¬μš©μž 흐름을 μ€‘μ‹¬μœΌλ‘œ μ½”λ“œλ₯Ό κ΅¬μ„±ν•˜λŠ” FSDκ°€ λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [3, 4, 14]. FSDλŠ” ν”„λ‘œμ νŠΈλ₯Ό `app`, `pages`, `widgets`, `features`, `entities`, `shared`의 6κ°€μ§€ 계측(Layer)으둜 μ—„κ²©νžˆ λ‚˜λˆ•λ‹ˆλ‹€ [5, 7]. 특히 μƒμœ„ 계측은 ν•˜μœ„ 계측에 μ˜μ‘΄ν•  수 μžˆμ§€λ§Œ ν•˜μœ„λŠ” μƒμœ„μ— μ˜μ‘΄ν•  수 μ—†λŠ” '단방ν–₯ μ˜μ‘΄μ„±'κ³Ό λͺ…μ‹œμ μΈ Public API(`index.ts`)λ₯Ό κ°•μ œν•˜μ—¬ λͺ¨λ“ˆ κ°„μ˜ μ•ˆμ •μ μΈ 격리λ₯Ό 보μž₯ν•©λ‹ˆλ‹€ [5, 6, 15, 16]. * **μƒνƒœ 관리(State Management)의 νŒŒνŽΈν™” 및 μ „λ¬Έν™”**: λŒ€κ·œλͺ¨ ν™˜κ²½μ—μ„œλŠ” μƒνƒœλ₯Ό 단일 μŠ€ν† μ–΄μ— 넣기보닀 μš©λ„μ— 맞게 λΆ„λ¦¬ν•˜μ—¬ κ΄€λ¦¬ν•©λ‹ˆλ‹€ [17]. μ„œλ²„ APIλ‘œλΆ€ν„° κ°€μ Έμ˜€λŠ” 데이터(μ„œλ²„ μƒνƒœ)λŠ” TanStack Queryλ₯Ό 톡해 캐싱과 동기화λ₯Ό μ²˜λ¦¬ν•˜κ³ , ν…Œλ§ˆμ™€ 같은 정적이고 전역적인 μƒνƒœλŠ” Context APIλ₯Ό, μ•Œλ¦Όμ΄λ‚˜ μž₯λ°”κ΅¬λ‹ˆμ²˜λŸΌ λΉˆλ²ˆν•˜κ²Œ λ³€ν•˜λŠ” 동적 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœλŠ” Zustandλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [18-22]. 단, κ°œλ°œμžκ°€ 10λͺ… 이상인 λŒ€κ·œλͺ¨ νŒ€μ—μ„œ μ–½ν˜€μžˆλŠ” λ³΅μž‘ν•œ μƒνƒœλ₯Ό 닀루고 μΌκ΄€λœ νŒ¨ν„΄μ„ κ°•μ œν•΄μ•Ό ν•  λ•ŒλŠ” Reduxκ°€ μ‚°μ—… ν‘œμ€€μœΌλ‘œμ„œ νš¨κ³Όμ μž…λ‹ˆλ‹€ [23-25]. * **클린 μ½”λ“œμ™€ 섀계 원칙 (SOLID & DRY)**: κΈ°λŠ₯ν˜• λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈμ—μ„œλ„ μ†Œν”„νŠΈμ›¨μ–΄ 곡학 원칙은 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [16, 26]. 단일 μ±…μž„ 원칙(SRP)에 따라 μ»΄ν¬λ„ŒνŠΈλŠ” ν•œ κ°€μ§€μ˜ μ—­ν• λ§Œ ν•΄μ•Ό ν•˜λ©°, 300쀄이 λ„˜μ–΄κ°„λ‹€λ©΄ μ—¬λŸ¬ 개의 μž‘μ€ μ»΄ν¬λ„ŒνŠΈλ‘œ 뢄리해야 ν•©λ‹ˆλ‹€ [27]. 쀑볡 λ‘œμ§μ€ μ»€μŠ€ν…€ ν›…μœΌλ‘œ μΆ”μΆœν•˜μ—¬ DRY 원칙을 μ§€ν‚€λ˜, κ³Όλ„ν•œ μΆ”μƒν™”λ³΄λ‹€λŠ” 직관적이고 λ‹¨μˆœν•˜κ²Œ μœ μ§€ν•˜λŠ” KISS, YAGNI μ›μΉ™μ˜ κ· ν˜•μ΄ ν•„μš”ν•©λ‹ˆλ‹€ [28-30]. * **μ„±λŠ₯ μ΅œμ ν™” 및 λΉŒλ“œ μ—”μ§€λ‹ˆμ–΄λ§ (Performance & Build)**: κ±°λŒ€ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ λ²ˆλ“€μ€ 초기 λ‘œλ“œλ₯Ό μ§€μ—°μ‹œν‚΅λ‹ˆλ‹€ [31-33]. Vite λ“±μ˜ λ²ˆλ“€λŸ¬λ₯Ό μ΄μš©ν•΄ `manualChunks`둜 무거운 벀더 라이브러리(React core λ“±)λ₯Ό λΆ„λ¦¬ν•˜κ³ , `React.lazy`와 `Suspense`λ₯Ό κ²°ν•©ν•΄ λΌμš°νŠΈλ‚˜ κΈ°λŠ₯ μˆ˜μ€€μ˜ μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…μ„ μ μš©ν•˜μ—¬ μ„±λŠ₯을 λ†’μ—¬μ•Ό ν•©λ‹ˆλ‹€ [34-38]. λ˜ν•œ 2025λ…„μ˜ React CompilerλŠ” λΉŒλ“œ νƒ€μž„μ— μžλ™μœΌλ‘œ λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μ μš©ν•˜μ—¬ μˆ˜λ™ μ„±λŠ₯ μ΅œμ ν™”μ˜ λ²ˆκ±°λ‘œμ›€μ„ μ€„μ—¬μ€λ‹ˆλ‹€ [34, 39-41]. * **볡원λ ₯ (Resilience) 및 λͺ¨λ‹ˆν„°λ§**: λŒ€κ·œλͺ¨ 앱은 단일 μ»΄ν¬λ„ŒνŠΈμ˜ λŸ°νƒ€μž„ 였λ₯˜κ°€ 전체 화면을 λ°±μ§€ν™”ν•˜λŠ” 것을 막기 μœ„ν•΄ Error Boundariesλ₯Ό μ£Όμš” μœ„μ ―μ΄λ‚˜ λΆˆμ•ˆμ •ν•œ μ„Ήμ…˜λ§ˆλ‹€ μ „λž΅μ μœΌλ‘œ λ°°μΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€ [42-45]. λ˜ν•œ ν”„λ‘œλ•μ…˜ λ ˆλ²¨μ—μ„œλŠ” Sentry, LogRocket, Datadogκ³Ό 같은 도ꡬλ₯Ό 톡해 μ‚¬μš©μžμ˜ μ—λŸ¬ λ°œμƒ λ§₯락(Session Replay)κ³Ό λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 등을 μΆ”μ ν•˜μ—¬ 디버깅을 κ³ λ„ν™”ν•©λ‹ˆλ‹€ [45-48]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Feature-Sliced Design]], [[State Management]], [[SOLID Principles]], [[Performance Optimization]], [[Clean Code]], [[Error Boundaries]] - **Projects/Contexts:** [[React]], [[Next.js]], [[Vite]], [[Bulletproof React]] - **Contradictions/Notes:** - FSD μ•„ν‚€ν…μ²˜μ˜ μ μš©μ— λŒ€ν•΄ "λͺ¨λ“  μ½”λ“œλ₯Ό μ²˜μŒλΆ€ν„° μ„Έλ°€ν•˜κ²Œ μŠ¬λΌμ΄μ‹±ν•˜λŠ” 것보닀 λͺ¨λ†€λ¦¬μ‹μœΌλ‘œ μ‹œμž‘ν•œ λ’€ κΈ°λŠ₯의 경계가 λͺ…ν™•ν•΄μ‘Œμ„ λ•Œ λΆ„λ¦¬ν•˜λŠ” 것이 λ‚«λ‹€"λŠ” μƒλ°˜λœ 의견이 μ‘΄μž¬ν•©λ‹ˆλ‹€. μ²˜μŒλΆ€ν„° λ¬΄λ¦¬ν•˜κ²Œ λΆ„ν• ν•˜λ©΄ 3개면 μΆ©λΆ„ν•  쑰각이 수백 개둜 λ‚˜λ‰˜λŠ” λΆ€μž‘μš©μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€ [49]. - FSD의 `shared` 계측에 λŒ€ν•΄μ„œλ„, 쑰직이 컀짐에 따라 관리가 ν†΅μ œ 뢈λŠ₯이 되고 λ²„κ·Έμ˜ μ˜¨μƒμ΄ λ˜μ–΄ μ‹œμŠ€ν…œ 변경을 였히렀 μ–΄λ ΅κ²Œ λ§Œλ“€ 수 μžˆλ‹€λŠ” 싀무적 λΉ„νŒμ΄ μžˆμŠ΅λ‹ˆλ‹€ [50]. --- *Last updated: 2026-04-26*