# [[Feature-Sliced Design]] ## πŸ“Œ Brief Summary Feature-Sliced Design(FSD)은 ν”„λ‘ νŠΈμ—”λ“œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜(특히 React)을 μœ„ν•΄ νŠΉλ³„νžˆ κ³ μ•ˆλœ μ΅œμ‹  μ•„ν‚€ν…μ²˜ λ°©λ²•λ‘ μž…λ‹ˆλ‹€ [1, 2]. μ½”λ“œλ₯Ό 기술적인 파일 μœ ν˜•μ΄ μ•„λ‹Œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, μ‚¬μš©μžμ˜ μ—¬μ •, μ±…μž„(Scope and responsibility)을 κΈ°μ€€μœΌλ‘œ κ΅¬μ„±ν•˜μ—¬ ν”„λ‘œμ νŠΈμ˜ μœ μ§€λ³΄μˆ˜μ„±κ³Ό ν™•μž₯성을 λ†’μ΄λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€ [2, 3]. μ»΄ν¬λ„ŒνŠΈ 기반 개발, 도메인 주도 섀계(DDD), λͺ¨λ“ˆν˜• μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜μ˜ 원칙을 κ²°ν•©ν•˜μ—¬ λͺ…ν™•ν•˜κ³  κ°•μ œν•  수 μžˆλŠ” 폴더 및 μ½”λ“œ ꡬ쑰λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€ [1, 4]. ## πŸ“– Core Content * **핡심 계측 ꡬ쑰 (Layers, Slices, Segments):** FSDλŠ” ν”„λ‘œμ νŠΈλ₯Ό λ ˆμ΄μ–΄(Layer), 슬라이슀(Slice), μ„Έκ·Έλ¨ΌνŠΈ(Segment) κ°œλ…μœΌλ‘œ λΆ„ν• ν•©λ‹ˆλ‹€ [5]. κ°€μž₯ μ΅œμƒμœ„ κ°œλ…μΈ λ ˆμ΄μ–΄λŠ” λ‹€μŒκ³Ό 같이 μ—„κ²©ν•˜κ²Œ μ§€μ •λœ 폴더 ꡬ쑰λ₯Ό κ°€μ§‘λ‹ˆλ‹€. * `app`: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ΄ˆκΈ°ν™” 및 μ „μ—­ μ„€μ • [3, 6] * `pages`: 라우트 μˆ˜μ€€μ˜ ν™”λ©΄ μ‘°ν•© [3, 6] * `widgets`: κΈ°λŠ₯(Feature)κ³Ό μ—”ν‹°ν‹°(Entity)λ₯Ό μ‘°ν•©ν•œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ λŒ€ν˜• UI 블둝 [3, 6] * `features`: μ‚¬μš©μžμ˜ μƒν˜Έμž‘μš© μ‹œλ‚˜λ¦¬μ˜€ 및 λΉ„μ¦ˆλ‹ˆμŠ€ μ›Œν¬ν”Œλ‘œμš° [3, 6] * `entities`: 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 데이터 λͺ¨λΈ [3, 6] * `shared`: 도메인에 μ’…μ†λ˜μ§€ μ•Šμ€ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μœ ν‹Έλ¦¬ν‹° 및 UI μ»΄ν¬λ„ŒνŠΈ [3, 6] * **단방ν–₯ μ˜μ‘΄μ„± κ·œμΉ™ (Unidirectional Dependencies):** FSD의 κ°€μž₯ μ€‘μš”ν•œ κ·œμΉ™μœΌλ‘œ, μ½”λ“œλŠ” 였직 λ™μΌν•œ λ ˆμ΄μ–΄ λ˜λŠ” μžμ‹ λ³΄λ‹€ ν•˜μœ„ λ ˆμ΄μ–΄μ˜ μ½”λ“œλ§Œ κ°€μ Έμ˜¬(import) 수 μžˆμŠ΅λ‹ˆλ‹€ [3, 7]. μƒμœ„ λ ˆμ΄μ–΄κ°€ ν•˜μœ„ λ ˆμ΄μ–΄μ— μ˜μ‘΄ν•˜λŠ” 것은 ν—ˆμš©λ˜μ§€λ§Œ, ν•˜μœ„ λ ˆμ΄μ–΄λŠ” μ ˆλŒ€ μƒμœ„ λ ˆμ΄μ–΄μ— μ˜μ‘΄ν•  수 μ—†μŠ΅λ‹ˆλ‹€ [3]. 이λ₯Ό 톡해 μˆ¨κ²¨μ§„ μˆœν™˜ μ°Έμ‘°λ₯Ό μ œκ±°ν•˜κ³  μ•„ν‚€ν…μ²˜μ˜ κ·œμœ¨μ„ κ°•μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [7, 8]. * **곡개 API κ·œμΉ™ (Public API Rule):** 각 μŠ¬λΌμ΄μŠ€λŠ” 주둜 `index.ts`λ₯Ό 톡해 단일 μ§„μž…μ μ„ κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€ [9-11]. μ™ΈλΆ€ λͺ¨λ“ˆμ€ 였직 이 μ§„μž…μ μ—μ„œ λͺ…μ‹œμ μœΌλ‘œ export된 μš”μ†Œμ—λ§Œ μ ‘κ·Όν•΄μ•Ό ν•˜λ©°, λ‚΄λΆ€ νŒŒμΌμ— 직접 μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€ [9, 10]. μ΄λŠ” μΊ‘μŠν™”λ₯Ό κ°•ν™”ν•˜κ³  λͺ…ν™•ν•œ μΈν„°νŽ˜μ΄μŠ€ 계약을 μƒμ„±ν•˜μ—¬ λ¦¬νŒ©ν† λ§ μ‹œ μ‚¬μ΄λ“œ μ΄νŽ™νŠΈλ₯Ό μ΅œμ†Œν™”ν•©λ‹ˆλ‹€ [9, 11]. * **λ„μž… 이점 및 싀무 적용:** λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈκ°€ μ„±μž₯함에 따라 κΈ°λŠ₯ κ°„μ˜ μ˜μ‘΄μ„±μ΄ μ–½νžˆλŠ”(Tangled dependencies) 문제λ₯Ό ν•΄κ²°ν•΄ μ€λ‹ˆλ‹€ [12]. μ½”λ“œλ₯Ό λ…λ¦½μ μœΌλ‘œ μˆ˜μ • 및 ν…ŒμŠ€νŠΈν•  수 있게 ν•΄ μ£Όλ©° [13], 곡유 μƒνƒœλ₯Ό 쀄이고 λ Œλ”λ§ 경계λ₯Ό μ’ν˜€ μ„±λŠ₯ μ΅œμ ν™”μ—λ„ μžμ—°μŠ€λŸ½κ²Œ κΈ°μ—¬ν•©λ‹ˆλ‹€ [14]. ESLint κ·œμΉ™ 등을 톡해 μ•„ν‚€ν…μ²˜ 경계λ₯Ό μžλ™ν™”ν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [15, 16]. * **ν•œκ³„ 및 μ£Όμ˜μ‚¬ν•­:** κ°€μž₯ 큰 κ³Όμ œλŠ” νŠΉμ • κΈ°λŠ₯이 μ •ν™•νžˆ μ–΄λ–€ "Feature" 경계에 μ†ν•˜λŠ”μ§€ νŒŒμ•…ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€ [17]. 인증(Auth)κ³Ό 같은 ꡐ차 κ΄€μ‹¬μ‚¬λŠ” ν•œ λ²ˆμ— κ±°λŒ€ν•œ 슬라이슀둜 λ§Œλ“€κΈ°λ³΄λ‹€ '둜그인', 'κ°€μž…', 'λΉ„λ°€λ²ˆν˜Έ μž¬μ„€μ •' λ“± ꡬ체적이고 μž‘μ€ κΈ°λŠ₯ λ‹¨μœ„λ‘œ λ‚˜λˆ„λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ [17-19]. λ˜ν•œ, νŒ€μ› 전체가 이 방법둠을 μ™„μ „νžˆ μ΄ν•΄ν•˜μ§€ μ•ŠμœΌλ©΄ λͺ¨λ“ˆ λΆ„λ₯˜μ— λŒ€ν•œ 의미둠적 λ…ΌμŸ(Semantic overhead)이 κΈΈμ–΄μ§€κ±°λ‚˜, λͺ¨λ“  μ½”λ“œκ°€ `shared` λ ˆμ΄μ–΄λ‘œ μŸμ•„μ§€λŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€ [16]. ## πŸ”— Knowledge Connections - **Related Topics:** [[Frontend Folder Structure]], [[Domain-Driven Design]], [[Component-Based Architecture]] - **Projects/Contexts:** [[λŒ€κ·œλͺ¨ React μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 μ—”ν„°ν”„λΌμ΄μ¦ˆ μ‹œμŠ€ν…œ ν™•μž₯μ„± 관리]] - **Contradictions/Notes:** μ†ŒμŠ€ [1, 2]λŠ” FSDκ°€ λŒ€κ·œλͺ¨ ν”„λ‘ νŠΈμ—”λ“œ μ‹œμŠ€ν…œμ—μ„œ 직관적이고 ν›Œλ₯­ν•œ ꡬ쑰적 λŒ€μ•ˆμ΄λΌκ³  κ°•μ‘°ν•©λ‹ˆλ‹€. 반면, μ†ŒμŠ€ [16, 17]의 μ‹€μ œ 개발자 λ…Όμ˜μ—μ„œλŠ” νŠΉμ • λͺ¨λ“ˆμ΄ κΈ°λŠ₯(Feature)인지 μœ„μ ―(Widget)인지 κ²°μ •ν•˜λŠ” 과정이 μ’…μ’… λΆˆν•„μš”ν•œ 의미둠적 μ˜€λ²„ν—€λ“œλ₯Ό μœ λ°œν•˜λ©°, νŒ€μ˜ ν•™μŠ΅ 곑선이 λ†’κ³  크둜슀 μ»€νŒ… 문제(Cross-cutting concerns)λ₯Ό κΉ”λ”ν•˜κ²Œ λΆ„λ¦¬ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” ν˜„μ‹€μ μΈ λΉ„νŒμ„ μ œμ‹œν•©λ‹ˆλ‹€. --- *Last updated: 2026-04-26*