# [[Frontend System Architecture]] ## πŸ“Œ Brief Summary ν”„λ‘ νŠΈμ—”λ“œ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ³΅μž‘μ„±μ΄ 증가함에 따라 ν™•μž₯μ„±, μœ μ§€λ³΄μˆ˜μ„± 및 κ³ μ„±λŠ₯을 보μž₯ν•˜κΈ° μœ„ν•΄ μ„€κ³„λ˜λŠ” ꡬ쑰적 ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€ [1]. μ΄λŠ” λ‹¨μˆœν•œ UI λ Œλ”λ§μ„ λ„˜μ–΄ λͺ¨λ“ˆμ‹ 폴더 ꡬ쑰, 클린 μ½”λ“œ 방법둠, 효율적인 μƒνƒœ 관리 μ „λž΅, λΉŒλ“œ 및 λŸ°νƒ€μž„ μ΅œμ ν™”λ₯Ό ν¬κ΄„ν•©λ‹ˆλ‹€ [1]. ν˜„λŒ€μ˜ React ν™˜κ²½μ—μ„œλŠ” λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 UI μ»΄ν¬λ„ŒνŠΈλ‘œ λˆ„μˆ˜λ˜λŠ” 것을 λ°©μ§€ν•˜κ³  λͺ…ν™•ν•œ μ˜μ‘΄μ„± 경계λ₯Ό μ„€μ •ν•˜μ—¬ μ‹œμŠ€ν…œμ΄ μ•ˆμ „ν•˜κ²Œ ν™•μž₯λ˜λ„λ‘ ν•˜λŠ” 것이 ν•΅μ‹¬μž…λ‹ˆλ‹€ [2, 3]. ## πŸ“– Core Content * **μ•„ν‚€ν…μ²˜ νŒ¨λŸ¬λ‹€μž„ 및 폴더 ꡬ쑰 (Folder Structure):** * 과거의 파일 μœ ν˜•λ³„(기술적 역할별) 폴더 κ΅¬μ‘°λŠ” 규λͺ¨κ°€ 컀질수둝 μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μ›Œ, λΉ„μ¦ˆλ‹ˆμŠ€ κΈ°λŠ₯(Feature)μ΄λ‚˜ 도메인을 μ€‘μ‹¬μœΌλ‘œ μ½”λ“œλ₯Ό κ΅¬μ„±ν•˜λŠ” ꡬ쑰가 ν‘œμ€€μœΌλ‘œ 자리 μž‘μ•˜μŠ΅λ‹ˆλ‹€ [4, 5]. * **Feature-Sliced Design (FSD):** ν”„λ‘ νŠΈμ—”λ“œμ— νŠΉν™”λœ μ•„ν‚€ν…μ²˜λ‘œ, ν”„λ‘œμ νŠΈλ₯Ό `app`, `pages`, `widgets`, `features`, `entities`, `shared`λΌλŠ” λͺ…ν™•ν•œ 계측(Layer)으둜 λ‚˜λˆ•λ‹ˆλ‹€ [6, 7]. μƒμœ„ 계측은 ν•˜μœ„ κ³„μΈ΅μ—λ§Œ μ˜μ‘΄ν•  수 μžˆλ‹€λŠ” μ—„κ²©ν•œ '단방ν–₯ μ˜μ‘΄μ„±' κ·œμΉ™μ„ μ μš©ν•˜λ©°, 각 λͺ¨λ“ˆμ€ `index.ts`λ₯Ό ν†΅ν•œ 단일 퍼블릭 API(Public API)λ§Œμ„ λ…ΈμΆœν•˜μ—¬ μΊ‘μŠν™”λ₯Ό κ°•μ œν•©λ‹ˆλ‹€ [6, 8, 9]. * **클린 μ½”λ“œ 및 μ†Œν”„νŠΈμ›¨μ–΄ μ—”μ§€λ‹ˆμ–΄λ§ 원칙 (Clean Code Principles):** * **SOLID:** 단일 μ±…μž„ 원칙(SRP)에 따라 300쀄 μ΄μƒμ˜ λ°©λŒ€ν•œ μ»΄ν¬λ„ŒνŠΈλŠ” 더 μž‘κ³  λͺ…ν™•ν•œ μ±…μž„μ„ κ°€μ§„ μ»΄ν¬λ„ŒνŠΈλ‘œ 뢄리해야 ν•˜λ©°, 개방-폐쇄 원칙(OCP)을 μœ„ν•΄ μ»΄ν¬λ„ŒνŠΈ ν•©μ„±(`children` ν™œμš©)을 μ‚¬μš©ν•˜κ³ , μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙(ISP)을 톡해 μ»΄ν¬λ„ŒνŠΈκ°€ κΌ­ ν•„μš”ν•œ Props만 전달받도둝 섀계해야 ν•©λ‹ˆλ‹€ [10-12]. * **DRY, KISS, YAGNI:** μ»€μŠ€ν…€ 훅을 톡해 μ½”λ“œ λ°˜λ³΅μ„ μ€„μ΄λ˜(DRY), λΆˆν•„μš”ν•˜κ³  λ³΅μž‘ν•œ 좔상화λ₯Ό ν”Όν•˜μ—¬ μ½”λ“œλ₯Ό λ‹¨μˆœν•˜κ²Œ μœ μ§€ν•˜κ³ (KISS), λ‹Ήμž₯ ν•„μš”ν•˜μ§€ μ•Šμ€ κΈ°λŠ₯은 미리 κ΅¬ν˜„ν•˜μ§€ μ•ŠλŠ”(YAGNI) μ‹€μš©μ μΈ 접근이 ν•„μš”ν•©λ‹ˆλ‹€ [13-15]. * **넀이밍 κ·œμΉ™ 및 κ±°λ²„λ„ŒμŠ€ (Naming Conventions):** * 운영체제 κ°„μ˜ ν˜Έν™˜μ„±μ„ μœ„ν•΄ 파일 및 폴더 이름은 `kebab-case`λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€ [16-18]. 반면 React μ»΄ν¬λ„ŒνŠΈλŠ” HTML μš”μ†Œμ™€ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ `PascalCase`λ₯Ό, λ³€μˆ˜ 및 ν›…(Hooks)은 `camelCase`, μƒμˆ˜λŠ” `UPPER_SNAKE_CASE`λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€ [19-21]. * μ΄λŸ¬ν•œ κ·œμΉ™μ€ ESLint, Prettier, Husky와 같은 도ꡬλ₯Ό 톡해 μžλ™ν™” 및 κ²€μ¦λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ [19]. * **μƒνƒœ 관리 μ•„ν‚€ν…μ²˜ (State Management):** * ν˜„λŒ€μ˜ μƒνƒœ κ΄€λ¦¬λŠ” 둜컬 μ»΄ν¬λ„ŒνŠΈ μƒνƒœ, μ „μ—­ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μƒνƒœ, μ„œλ²„ μΊμ‹œ μƒνƒœ, URL μƒνƒœλ‘œ 역할을 μ„ΈλΆ„ν™”ν•©λ‹ˆλ‹€ [22]. * 자주 λ³€κ²½λ˜μ§€ μ•ŠλŠ” μ„€μ •κ°’(ν…Œλ§ˆ λ“±)은 Context API둜 μΆ©λΆ„ν•˜μ§€λ§Œ, λΉˆλ²ˆν•˜κ²Œ λ³€κ²½λ˜λŠ” μ „μ—­ μƒνƒœλŠ” λΆˆν•„μš”ν•œ 전체 λ¦¬λ Œλ”λ§μ„ λ°©μ§€ν•˜λŠ” μ„ νƒμž(Selector) νŒ¨ν„΄ 기반의 Zustandκ°€ μœ λ¦¬ν•˜λ©°, λ³΅μž‘ν•œ 비동기 μž‘μ—…κ³Ό λŒ€κ·œλͺ¨ νŒ€ ν˜‘μ—…μ—λŠ” Reduxκ°€ ꢌμž₯λ©λ‹ˆλ‹€ [23-28]. μ„œλ²„ μƒνƒœ 처리λ₯Ό μœ„ν•΄μ„œλŠ” TanStack Query(React Query)λ₯Ό μ‚¬μš©ν•˜μ—¬ λ„€νŠΈμ›Œν¬ λ‘œμ§μ„ UI와 λΆ„λ¦¬ν•©λ‹ˆλ‹€ [26, 29]. * **μ„±λŠ₯ μ΅œμ ν™” (Performance Optimization):** * Viteλ₯Ό ν™œμš©ν•œ λΉŒλ“œ ν™˜κ²½μ—μ„œλŠ” `manualChunks`λ₯Ό 톡해 무거운 벀더 라이브러리λ₯Ό λΆ„λ¦¬ν•˜κ³ , `React.lazy`와 Suspenseλ₯Ό κ²°ν•©ν•˜μ—¬ 라우트 기반 μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…μ„ μ μš©ν•¨μœΌλ‘œμ¨ 초기 λ‘œλ”© 속도λ₯Ό 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€ [30-33]. * 2025λ…„ κΈ°μ€€ React Compilerκ°€ μ•ˆμ •ν™”λ˜μ–΄ λΉŒλ“œ νƒ€μž„μ— μžλ™μœΌλ‘œ λ©”λͺ¨μ΄μ œμ΄μ…˜μ„ μˆ˜ν–‰ν•˜λ―€λ‘œ μˆ˜λ™μ μΈ `useMemo`, `useCallback`의 λ‚¨μš©μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€ [30, 34, 35]. * **디버깅 및 νšŒλ³΅μ„± (Debugging & Resilience):** * μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 좩돌 μ‹œ λ°±μ§€ 화면이 λ‚˜μ˜€λŠ” 것을 막기 μœ„ν•΄ React Error Boundariesλ₯Ό λŒ€μ‹œλ³΄λ“œλ‚˜ μ„œλ“œνŒŒν‹° μœ„μ ― 같은 λΆˆμ•ˆμ •ν•œ μ„Ήμ…˜μ— κ°œλ³„μ μœΌλ‘œ μ μš©ν•˜μ—¬ λŒ€μ²΄ UIλ₯Ό μ œκ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€ [36-38]. * Chrome DevTools의 Heap Snapshotsκ³Ό Allocation Timelinesλ₯Ό 톡해 λ©”λͺ¨λ¦¬ λˆ„μˆ˜(예: λΆ„λ¦¬λœ DOM λ…Έλ“œ, ν•΄μ œλ˜μ§€ μ•Šμ€ 이벀트 λ¦¬μŠ€λ„ˆ)λ₯Ό νƒμ§€ν•˜κ³  κ΄€λ¦¬ν•©λ‹ˆλ‹€ [39-41]. * **Git μ›Œν¬ν”Œλ‘œμš° (Git Workflow):** * μ†Œκ·œλͺ¨ νŒ€μ˜ 경우, 무거운 Git Flow λŒ€μ‹  '수λͺ…이 짧은 κΈ°λŠ₯ 브랜치(Feature-branch)' λ˜λŠ” '트렁크 기반(Trunk-based)' μ›Œν¬ν”Œλ‘œμš°λ₯Ό μ±„νƒν•˜λŠ” 것이 νš¨μœ¨μ μž…λ‹ˆλ‹€ [42-44]. * 좔적성을 높이기 μœ„ν•΄ λΈŒλžœμΉ˜μ™€ 컀밋 λ©”μ‹œμ§€μ— ν‹°μΌ“ IDλ₯Ό ν¬ν•¨ν•˜λ©°, `feat:`, `fix:`와 같은 Conventional Commits κ·œμΉ™μ„ λ”°λ¦…λ‹ˆλ‹€ [45-48]. PR(Pull Request)을 ν†΅ν•œ μ½”λ“œ 리뷰 및 CI ν…ŒμŠ€νŠΈλŠ” main 병합 μ „ ν•„μˆ˜μž…λ‹ˆλ‹€ [45, 49]. ## πŸ”— Knowledge Connections - **Related Topics:** `[[Feature-Sliced Design]]`, `[[SOLID Principles in React]]`, `[[State Management]]`, `[[React Performance Optimization]]`, `[[Git Workflow]]`, `[[Error Boundaries]]` - **Projects/Contexts:** `[[Modern React Application Development (2025)]]`, `[[Vite Build Tool]]` - **Contradictions/Notes:** - μƒνƒœ 관리 접근에 μžˆμ–΄, μ†ŒμŠ€λ“€μ€ Context APIκ°€ μ‚¬μš©ν•˜κΈ° κ°„νŽΈν•˜μ§€λ§Œ μž¦μ€ μ—…λ°μ΄νŠΈκ°€ λ°œμƒν•˜λŠ” μ „μ—­ μƒνƒœμ˜ 경우 '전체 ꡬ독 μ»΄ν¬λ„ŒνŠΈ λ¦¬λ Œλ”λ§'μ΄λΌλŠ” 치λͺ…적인 μ„±λŠ₯ 병λͺ©μ„ μΌμœΌν‚¨λ‹€κ³  μ§€μ ν•˜λ©°, 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Zustandλ‚˜ Redux의 λ„μž…μ„ μ£Όμž₯ν•©λ‹ˆλ‹€ [24, 26, 50-52]. - μ„±λŠ₯ μ΅œμ ν™”μ™€ κ΄€λ ¨ν•΄, React Compiler의 λ„μž…μœΌλ‘œ `React.memo`λ‚˜ `useMemo` 같은 μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ˜ ν•„μš”μ„±μ΄ 크게 μ€„μ–΄λ“€μ—ˆμœΌλ‚˜, μ„œλ“œνŒŒν‹° 라이브러리의 ν˜Έν™˜μ„± 문제(λ§€ λ Œλ”λ§ˆλ‹€ μƒˆλ‘œμš΄ μ°Έμ‘°λ₯Ό λ°˜ν™˜ν•˜λŠ” ν›… λ“±)λ‚˜ κ·œμΉ™μ„ λ”°λ₯΄μ§€ μ•Šμ€ λ ˆκ±°μ‹œ μ½”λ“œμ—μ„œλŠ” μ—¬μ „νžˆ μˆ˜λ™ λ©”λͺ¨μ΄μ œμ΄μ…˜μ΄ ν•„μš”ν•  수 μžˆλ‹€κ³  μ„€λͺ…ν•©λ‹ˆλ‹€ [35, 53, 54]. --- *Last updated: 2026-04-26*