Skip to content

Commit

Permalink
Merge pull request #25 from Wannabe-Woowa-Article/llqqssttyy
Browse files Browse the repository at this point in the history
ν”„λ‘ νŠΈμ—”λ“œ λ§ˆμŠ€ν„°: κΈ°λŠ₯ λΆ„ν•  λ””μžμΈ(FSD) νŒ¨ν„΄
  • Loading branch information
soi-ha authored Jul 22, 2024
2 parents 990234e + 292c904 commit 20d9762
Showing 1 changed file with 274 additions and 0 deletions.
274 changes: 274 additions & 0 deletions July/article/Frontend-Masters-Feature-Sliced-Design-Pattern.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,274 @@
## πŸ”— [Frontend Masters: Feature-Sliced Design (FSD) Pattern](https://medium.com/stackademic/frontend-masters-feature-sliced-design-fsd-pattern-81416088b006)

### πŸ—“οΈ λ²ˆμ—­ λ‚ μ§œ: 2024.07.17

### 🧚 λ²ˆμ—­ν•œ 크루: λ ›μ„œ(김닀은)

---

## ν”„λ‘ νŠΈμ—”λ“œ λ§ˆμŠ€ν„°: κΈ°λŠ₯ λΆ„ν•  λ””μžμΈ (FSD) νŒ¨ν„΄

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/1*5cXXjXss-JfLz_4RNJu7Tg.jpeg)

<br/>

**λ³΅μž‘ν•œ ν”„λ‘œμ νŠΈλ₯Ό λ§›μžˆλŠ” ν”ΌμžλΌκ³  상상해 λ³΄μ„Έμš”. κΈ°λŠ₯ 뢄할이 μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ΄ν•΄ν•˜κΈ° μœ„ν•΄ ν”Όμžλ₯Ό ν•œ 쑰각씩 λ‚˜λˆ λ΄…μ‹œλ‹€. κ΄€λ¦¬ν•˜κΈ° 쉽고 μœ μ§€λ³΄μˆ˜ν•˜κΈ°μ—λ„ λ§›μžˆμŠ΅λ‹ˆλ‹€! πŸ•**

이전에 Medium κΈ€μ—μ„œ λ§ν–ˆλ˜ λ‚΄μš©μ„ λ°˜λ³΅ν•˜κ² μŠ΅λ‹ˆλ‹€. 이 글은 κΈΈμ–΄μ§ˆ 것이고(μ™œ μ•ˆλ˜κ² μ–΄μš”? πŸ˜‡) μ•„λ§ˆλ„ μ΄ν•΄ν•˜κΈ° 쑰금 μ–΄λ €μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ ν•œ 번 읽고 μ™„λ²½ν•˜κ²Œ μ΄ν•΄ν•˜κ²Œ 되면, 이제 당신은 10λ°° 더 λ‚˜μ€ ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžκ°€ 될 κ²ƒμž…λ‹ˆλ‹€. 😎 컀피 ν•œ μž” μ€€λΉ„ν•˜μ„Έμš”. β˜•οΈ 컀피λ₯Ό μΆ©λΆ„νžˆ λ§ˆμ‹œμ§€ μ•ŠμœΌλ©΄ 10λ°° κ°œλ°œμžκ°€ λ˜λŠ” 데 더 였래 걸릴 κ±°μ˜ˆμš”. πŸ˜…

<br/>

---

<br/>

μ €λŠ” μ›Ή 및 λͺ¨λ°”일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κΈ°λŠ₯ μ„ΈνŠΈλΌλŠ” μž‘μ€ λΆ€λΆ„μœΌλ‘œ λ‚˜λˆ„μ–΄ κ°„μ†Œν™”ν•˜λŠ” 것을 μ’‹μ•„ν•©λ‹ˆλ‹€. 각 κΈ°λŠ₯ μ„ΈνŠΈλŠ” 자체 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 및 데이터 λ ˆμ΄μ–΄λ₯Ό 가지고 μžˆμ–΄ κ΄€λ¦¬ν•˜κΈ°κ°€ 더 μ‰½μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 방법을 κΈ°λŠ₯ λΆ„ν•  λ””μžμΈ (FSD)이라고 ν•˜λ©°, μ»΄ν¬λ„ŒνŠΈ 기반 μ ‘κ·Ό 방식과 μœ μ‚¬ν•œ μž₯점을 κ³΅μœ ν•©λ‹ˆλ‹€. FSDμ—μ„œ 특히 λˆˆμ— λ„λŠ” 점은 μ‚¬μš©μž 쀑심 κΈ°λŠ₯에 μ΄ˆμ μ„ 맞좰 μ›Ή 및 λͺ¨λ°”일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 더 κ΄€λ¦¬ν•˜κΈ° μ‰¬μš΄ λΆ€λΆ„μœΌλ‘œ λΆ„ν•΄ν•  수 μžˆλ‹€λŠ” μ μž…λ‹ˆλ‹€.

<br/>

---

<br/>

## ꡬ쑰

> FSD 방법둠은 μ„Έ 가지 좔상화 μˆ˜μ€€μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€: λ ˆμ΄μ–΄, 슬라이슀, 그리고 μ„Έκ·Έλ¨ΌνŠΈμž…λ‹ˆλ‹€.
<br/>

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/1*exIzF4234oogpgybeG3xbg.jpeg)

<br/>

### λ ˆμ΄μ–΄

λ‹Ήμ‹ μ˜ 앱을 λ§›μžˆλŠ” ν”Όμžλ‘œ 상상해 λ³΄μ„Έμš”. πŸ• (λ„λ―Έλ…Έμ—μ„œ μΌν•˜λŠ” κ°œλ°œμžλ‘œμ„œ ν”Όμž λΉ„μœ λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 제 μžμ—°μŠ€λŸ¬μš΄ κΆŒλ¦¬μž…λ‹ˆλ‹€. 😎)

#### 1. 곡용 λ ˆμ΄μ–΄ (μ‹λ£Œν’ˆ μ €μž₯μ‹€):

- **λͺ¨λ‘λ₯Ό μœ„ν•œ 재료:**
μ—¬λŸ¬ μŠ¬λΌμ΄μŠ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ” μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ, μœ ν‹Έλ¦¬ν‹°, ν›…, 그리고 μ„œλΉ„μŠ€λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. (곡톡 μž¬λ£Œμ™€ 도ꡬλ₯Ό λͺ¨λ‘κ°€ κ°€μ Έκ°ˆ 수 μžˆλŠ” 곡유 주방이라고 μƒκ°ν•˜μ„Έμš”.)
- **μ˜ˆμ‹œ:**
- λ²„νŠΌ, 폼, λͺ¨λ‹¬, λ‚΄λΉ„κ²Œμ΄μ…˜ 바와 같은 곡톡 UI μš”μ†Œ (미리 μ†μ§ˆλœ μ±„μ†Œμ™€ 치즈λ₯Ό μƒκ°ν•˜μ„Έμš”)
- 데이터 ν¬λ§·νŒ…μ΄λ‚˜ 검증을 μœ„ν•œ μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜ (λ‚ μΉ΄λ‘œμš΄ ν”Όμž 컀터와 κ°™μŠ΅λ‹ˆλ‹€)
- Redux, Zustand, Tanstack Query와 같은 κΈ€λ‘œλ²Œ μƒνƒœ 관리 μ†”λ£¨μ…˜ (일관성을 μœ„ν•œ λ ˆμ‹œν”Ό 뢁과 κ°™μŠ΅λ‹ˆλ‹€)

#### 2. ν”„λ‘œμ„ΈμŠ€ λ ˆμ΄μ–΄ (μ£Όλ°© 직원):

- **μ—΄μ‹¬νžˆ μΌν•˜λŠ” μ…°ν”„λ“€:** λ°±κ·ΈλΌμš΄λ“œ μž‘μ—…κ³Ό 데이터 νŽ˜μΉ­μ„ μ²˜λ¦¬ν•˜μ—¬ ν”Όμž 주방이 μ›ν™œν•˜κ²Œ μš΄μ˜λ˜λ„λ‘ ν•©λ‹ˆλ‹€. (반죽, μ†ŒμŠ€, 토핑을 μ€€λΉ„ν•˜κ³  베이킹 과정을 μ‘°μœ¨ν•˜λŠ” ν”Όμž 셰프듀을 μƒκ°ν•˜μ„Έμš”.)
- **μ˜ˆμ‹œ:**
- 온라인 μ‹œμŠ€ν…œμ—μ„œ ν”Όμž 주문을 κ°€μ Έμ˜€κΈ°
- ν”Όμžκ°€ μ€€λΉ„λ˜μ—ˆμ„ λ•Œ μ•Œλ¦Ό 보내기
- 배달 기사와 데이터 λ™κΈ°ν™”ν•˜κΈ°

#### 3. κΈ°λŠ₯ λ ˆμ΄μ–΄ (ν”Όμž 슬라이슀):

- **독립적이고 μžκΈ‰μžμ‘±:** 각 μŠ¬λΌμ΄μŠ€λŠ” νŠΉμ • κΈ°λŠ₯을 μΊ‘μŠν™”ν•˜λ©°, 고유의 UI, 둜직, 데이터λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 마치 κ°œλ³„ 토핑이 μžˆλŠ” ν”Όμž μŠ¬λΌμ΄μŠ€μ™€ κ°™μŠ΅λ‹ˆλ‹€.
- **μ˜ˆμ‹œ:**
- "ν”Όμž μ£Όλ¬Έ" 슬라이슀: ν”Όμž 선택, 맞좀 μ„€μ • 및 결제λ₯Ό 처리 (νŽ˜νΌλ‘œλ‹ˆ, 버섯, μΆ”κ°€ 치즈, 수쾌 -μ†Œμ‹œμ§€- λ“±λ“±)
- "μ£Όλ¬Έ 좔적" 슬라이슀: μ£Όλ¬Έ μƒνƒœμ™€ μ˜ˆμƒ 배달 μ‹œκ°„μ„ ν‘œμ‹œ (ν”Όμž 좔적기와 κ°™μŒ)
- "ν”Όμž 리뷰" 슬라이슀: 고객이 κ²½ν—˜μ„ ν‰κ°€ν•˜κ³  λŒ“κΈ€μ„ 달 수 μžˆλ„λ‘ 함 (μ…°ν”„λ₯Ό μœ„ν•œ ν”Όλ“œλ°± 양식)

#### 4. μ•± λ ˆμ΄μ–΄ (ν”Όμž μ…°ν”„):

- **총주방μž₯:** 전체 ν”Όμž μ œμž‘ μž‘μ—…μ„ κ°λ…ν•˜λ©°, μ–΄λ–€ 슬라이슀λ₯Ό κ΅¬μšΈμ§€, κ³ κ°μ—κ²Œ μ–΄λ–»κ²Œ μ œκ³΅ν• μ§€λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€. (메뉴λ₯Ό μ„€κ³„ν•˜κ³ , μƒˆλ‘œμš΄ λ ˆμ‹œν”Όλ₯Ό λ§Œλ“€λ©°, 각 ν”Όμžκ°€ μ™„λ²½ν•˜κ²Œ μš”λ¦¬λ˜λ„λ‘ 보μž₯ν•˜λŠ” λ§ˆμŠ€ν„° μ…°ν”„λ₯Ό μƒκ°ν•˜μ„Έμš”.)

#### 5. νŽ˜μ΄μ§€ λ ˆμ΄μ–΄ (ν”Όμž 진열):

- **슬라이슀λ₯Ό λ°°μ—΄:** 슬라이슀λ₯Ό 의미 μžˆλŠ” νŽ˜μ΄μ§€ λ ˆμ΄μ•„μ›ƒμœΌλ‘œ κ΅¬μ„±ν•˜μ—¬ ν”Όμž 슬라이슀λ₯Ό μ ‘μ‹œλ‚˜ 배달 μƒμžμ— λ°°μ—΄ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.
- **μ˜ˆμ‹œ:**
- ν™ˆνŽ˜μ΄μ§€: "μΆ”μ²œ ν”Όμž"와 "μ£Όλ¬Έ λ‚΄μ—­" 슬라이슀λ₯Ό κ²°ν•©
- λ‚΄ 계정: "개인 정보"와 "μ£Όλ¬Έ μ„ ν˜Έ μ„€μ •" 슬라이슀λ₯Ό 포함

#### 6. μœ„μ ― λ ˆμ΄μ–΄ (ν–₯μ‹ λ£Œ):

- **선택적 맛 κ°•ν™”μ œ:** μŠ¬λΌμ΄μŠ€λ‚˜ νŽ˜μ΄μ§€/ν™”λ©΄ 전체에 뿌릴 수 μžˆλŠ” μž‘κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈλ‘œ, ν”Όμžμ— μΆ”κ°€ 양념을 λ”ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.
- **μ˜ˆμ‹œ:**
- 검색창 (μ’‹μ•„ν•˜λŠ” ν”Όμžλ₯Ό λΉ λ₯΄κ²Œ μ°ΎκΈ° μœ„ν•΄)
- μ‚¬μš©μž μ•Œλ¦Ό νŒ¨λ„ (ν”Όμžκ°€ μ€€λΉ„λ˜μ—ˆμ„ λ•Œ μ•Œλ¦Ό)
- λͺ¨λ‹¬ λŒ€ν™”μƒμž (νŠΉλ³„ μš”μ²­μ΄λ‚˜ 확인을 μœ„ν•΄)

#### 5. μ—”ν„°ν‹° λ ˆμ΄μ–΄ (μ›μž¬λ£Œ):

- **λ°μ΄ν„°μ˜ ꡬ성 μš”μ†Œ:** ν”Όμžμ˜ 밀가루, 이슀트, ν† ν•‘κ³Ό 같은 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ μ—”ν„°ν‹°λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
- **μ˜ˆμ‹œ:**
- μ‚¬μš©μž μ—”ν„°ν‹° (고객 정보λ₯Ό μ €μž₯)
- ν”Όμž μ—”ν„°ν‹° (ν”Όμž μ’…λ₯˜μ™€ 재료 μ •μ˜)
- μ£Όλ¬Έ μ—”ν„°ν‹° (μ£Όλ¬Έ 정보λ₯Ό 좔적)

<br/>

_κΈ°μ–΅ν•΄μ•Ό ν•  μ£Όμš” 사항:_

- 각 λ ˆμ΄μ–΄λŠ” λͺ…ν™•ν•œ μ±…μž„κ³Ό μ˜μ‘΄μ„± λ°©ν–₯을 가지고 μžˆμŠ΅λ‹ˆλ‹€.
- μŠ¬λΌμ΄μŠ€λŠ” ν”Όμž μŠ¬λΌμ΄μŠ€κ°€ 곡톡 크러슀트λ₯Ό κ³΅μœ ν•˜λŠ” κ²ƒμ²˜λŸΌ 잘 μ •μ˜λœ 계약을 톡해 μ„œλ‘œ μ†Œν†΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
- λͺ©ν‘œλŠ” λͺ¨λ“ˆν™”λ˜κ³  독립적이며 μ‰½κ²Œ ν…ŒμŠ€νŠΈν•  수 μžˆλŠ” 슬라이슀λ₯Ό λ§Œλ“€μ–΄ "ν”Όμž" μ½”λ“œλ² μ΄μŠ€λ₯Ό 더 κ΄€λ¦¬ν•˜κΈ° 쉽고 λ§›μžˆκ²Œ λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€!

<br/>

_μΆ”κ°€ ν”Όμž λΉ„μœ  λ…ΈνŠΈ:_

- μ£Όλ°© 직원(ν”„λ‘œμ„ΈμŠ€)은 λ¬΄λŒ€ λ’€μ—μ„œ μΌν•˜λ©°, 재료λ₯Ό μ€€λΉ„ν•˜κ³  μ›ν™œν•œ ν”Όμž μ œμž‘ 과정을 보μž₯ν•©λ‹ˆλ‹€.
- ν”Όμž μ…°ν”„(μ•±)λŠ” λͺ¨λ“  μž‘μ—…μ„ μ΄κ΄„ν•˜λ©°, λ‹€μ–‘ν•œ ν”Όμž(κΈ°λŠ₯)λ₯Ό μ°½μ‘°ν•˜κ³  이λ₯Ό μ–΄λ–»κ²Œ μ œκ³΅ν• μ§€(νŽ˜μ΄μ§€)λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€.
- μ›μž¬λ£Œ(μ—”ν„°ν‹°)λŠ” μ–΄λ–€ ν”Όμžμ—λ„ ν•„μˆ˜μ μ΄μ§€λ§Œ, κ³ κ°μ—κ²Œ 항상 λ³΄μ΄λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. 이듀은 λͺ¨λ“  것을 κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” κΈ°μ΄ˆμž…λ‹ˆλ‹€.

<br/>

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/1*URBFMm6YigIKqzyBlPiLhg.png)

<br/>

### μ„Έκ·Έλ¨ΌνŠΈ (ν† ν•‘):

- **슬라이슀 λ‚΄μ˜ 재료:** μŠ¬λΌμ΄μŠ€κ°€ μ™„μ „ν•œ κΈ°λŠ₯이라면, 그것은 μ’…μ’… μ„Έκ·Έλ¨ΌνŠΈλΌκ³  λΆˆλ¦¬λŠ” μž‘μ€ λΆ€λΆ„λ“€λ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. μ΄λŠ” ν”Όμž 슬라이슀λ₯Ό κ΅¬μ„±ν•˜λŠ” κ°œλ³„ ν† ν•‘κ³Ό κ°™μŠ΅λ‹ˆλ‹€.
- **νŠΉμ • μž‘μ—…μ— 집쀑:** 각 μ„Έκ·Έλ¨ΌνŠΈλŠ” 슬라이슀 λ‚΄μ—μ„œ λͺ…ν™•ν•œ μ±…μž„μ„ 가지며, νŠΉμ • UI μš”μ†Œ, 데이터 μž‘μ—…, λ˜λŠ” λ‘œμ§μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
- **μ˜ˆμ‹œ:**
- **"ν”Όμž μ£Όλ¬Έ" 슬라이슀 λ‚΄μ—μ„œ:**
- "ν”Όμž 메뉴" μ„Έκ·Έλ¨ΌνŠΈ: μ‚¬μš© κ°€λŠ₯ν•œ ν”Όμž μ˜΅μ…˜κ³Ό 가격을 ν‘œμ‹œν•©λ‹ˆλ‹€.
- "ν† ν•‘ 선택기" μ„Έκ·Έλ¨ΌνŠΈ: 고객이 μ›ν•˜λŠ” 토핑을 선택할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.
- "결제 양식" μ„Έκ·Έλ¨ΌνŠΈ: 결제 및 배달 정보λ₯Ό μˆ˜μ§‘ν•©λ‹ˆλ‹€.

#### **더 React 슀럽게:**

각 μŠ¬λΌμ΄μŠ€λŠ” λ‹€μŒ μ„Έκ·Έλ¨ΌνŠΈ 쀑 ν•˜λ‚˜ λ˜λŠ” μ—¬λŸ¬ 개둜 λ‚˜λ‰©λ‹ˆλ‹€:

- `ui/:` μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ μ»΄ν¬λ„ŒνŠΈ 및 UI κ΄€λ ¨ 둜직
- `model/:` λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 (μŠ€ν† μ–΄, μ•‘μ…˜, μ΄νŽ™νŠΈ, λ¦¬λ“€μ„œ λ“±)
- `lib/:` 인프라 둜직 (μœ ν‹Έλ¦¬ν‹°/헬퍼)
- `config/:` 둜컬 ꡬ성 (μƒμˆ˜, μ—΄κ±°ν˜•, 메타 정보)
- `api/:` API μš”μ²­ 둜직 (API μΈμŠ€ν„΄μŠ€, μš”μ²­ λ“±)

#### **κΈ°μ–΅ν•΄μ•Ό ν•  μ£Όμš” 사항:**

- μŠ¬λΌμ΄μŠ€λŠ” 더 크고 μžκΈ‰μžμ‘±ν•˜λŠ” κΈ°λŠ₯이며, μ„Έκ·Έλ¨ΌνŠΈλŠ” 슬라이슀 λ‚΄μ˜ 더 μž‘κ³  μ§‘μ€‘λœ λΆ€λΆ„μž…λ‹ˆλ‹€.
- 각 μŠ¬λΌμ΄μŠ€λŠ” μ—¬λŸ¬ μ„Έκ·Έλ¨ΌνŠΈλ₯Ό κ°€μ§ˆ 수 있으며, μ΄λŠ” ν”Όμž μŠ¬λΌμ΄μŠ€κ°€ λ‹€μ–‘ν•œ 토핑을 κ°€μ§ˆ 수 μžˆλŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.
- λͺ©ν‘œλŠ” 잘 쑰직된 λͺ¨λ“ˆν˜• μ½”λ“œλ₯Ό λ§Œλ“€μ–΄ μ΄ν•΄ν•˜κ³  κ°œλ°œν•˜κ³  μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰½κ²Œ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 마치 ν”Όμžμ— 각기 λ‹€λ₯Έ 맛을 λ”ν•˜λŠ” μ•„λ¦„λ‹΅κ²Œ λ°°μ—΄λœ ν† ν•‘μ²˜λŸΌ 말이죠!

<br/>

---

> μ§€κΈˆκΉŒμ§€ 읽은 λ‚΄μš©μ„ μ˜ˆμ‹œ μ½”λ“œλ‘œ ν‘œν˜„ν•˜λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”?
#### 1. 폴더 ꡬ쑰(ν”Όμž μ£Όλ°©)

<br/>

![](https://miro.medium.com/v2/resize:fit:1400/format:webp/1*G9DDFy4VZaGCMaogGOduIw.png)

<br/>

#### 2. ν”Όμž μ£Όλ¬Έ 슬라이슀([μ—‘μŠ€νŠΈλΌλ°”κ°„μž](https://www.google.com/search?sca_esv=3a435d22dd23e419&sca_upv=1&sxsrf=ADLYWILLw7hzQVVI4CwvLXqolX_gxgaErw:1721216448127&q=%EC%97%91%EC%8A%A4%ED%8A%B8%EB%9D%BC%EB%B0%94%EA%B0%84%EC%9E%90&si=ACC90nxKpahzDMmxbw_9hLJvJAK3JpogdOEvfA_AFzr5M9qXFLtVutMThXFukBvQMHmxCUo98PKG-n8h7IenCaWTLvXp39OfIY-hzeSbUHXL7aFM9vMT2EIV0OaiDB_2kZcoU9H2D81NzbpZidVQ3ALbj50w-e1yA4X_PRJ47qPIcPKyjZX5xKX1V_tocw3jEz5EAZ3H91MYiy1nXF8e-Vb-beZQgLJcfvT6-SvG712RvwEGgtdwhaUjY5ekx53eLaxG6Sv9Snd_htnQKZmzPPy5XO6UBylgaQ%3D%3D&sa=X&ved=2ahUKEwjil-P3_q2HAxUklFYBHWYqB00Q6RN6BAgZEAE))

```tsx
// features/order-pizza/slice.tsx
import React from 'react';

interface OrderPizzaSliceProps {
// ... props
}

const OrderPizzaSlice: React.FC<OrderPizzaSliceProps> = (
{
/* ...props */
}
) => {
// ... 슬라이슀 둜직과 μƒνƒœ 관리

return (
<div>
<PizzaMenu />
<ToppingSelector />
<CheckoutForm />
</div>
);
};

export default OrderPizzaSlice;
```

<br/>

#### 3. ν”Όμž 메뉴 μ„Έκ·Έλ¨ΌνŠΈ(λ„μš° 베이슀)

```tsx
// features/order-pizza/components/PizzaMenu.tsx
import React from 'react';

interface PizzaMenuProps {
// ... ν”Όμž μ˜΅μ…˜λ“€
}

const PizzaMenu: React.FC<PizzaMenuProps> = (
{
/* ...props */
}
) => {
// ... ν”Όμž μ˜΅μ…˜μ„ fetchν•˜κ³  화면에 그리기

return <ul>{/* List of pizza options */}</ul>;
};

export default PizzaMenu;
```

<br/>

#### 4. ν™ˆνŽ˜μ΄μ§€ (ν”Όμž μ§„μ—΄λŒ€):

Feature-Sliced Design (FSD)은 ν”Όμžλ₯Ό κΉ”λ”ν•˜κ²Œ κ°œλ³„ 쑰각으둜 λ‚˜λˆ„μ–΄ 각 쑰각이 고유의 ν† ν•‘κ³Ό 맛을 κ°€μ§€λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. 이 μ ‘κ·Ό λ°©μ‹μ˜ μž₯점과 단점은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

```tsx
// pages/HomePage.tsx
import React from 'react';
import OrderPizzaSlice from '../features/order-pizza/slice';

const HomePage: React.FC = () => {
return (
<div>
<h1>Welcome to Domino's Pizza!</h1>
<OrderPizzaSlice />
</div>
);
};

export default HomePage;
```

<br/>

#### μ½”λ“œμ—μ„œ μ–»μ–΄μ•Ό ν•  μ£Όμš” λ‚΄μš©:

- **λͺ…ν™•ν•œ 폴더 ꡬ쑰:** 각 μŠ¬λΌμ΄μŠ€λŠ” 고유의 폴더λ₯Ό 가지고 μžˆμ–΄ κ·Έ μ•ˆμ˜ μ»΄ν¬λ„ŒνŠΈμ™€ λ‘œμ§μ„ μ²΄κ³„μ μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
- **독립적인 슬라이슀:** 각 μŠ¬λΌμ΄μŠ€λŠ” λ…λ¦½μ μœΌλ‘œ 개발되고 ν…ŒμŠ€νŠΈλ  수 있으며, μžκΈ‰μžμ‘±ν•˜λŠ” ν”Όμžμ™€ κ°™μŠ΅λ‹ˆλ‹€.
- **μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ:** 곡톡 μ»΄ν¬λ„ŒνŠΈ(λ²„νŠΌ, μž…λ ₯λž€ λ“±)λŠ” 일관성과 νš¨μœ¨μ„±μ„ μœ„ν•΄ μ—¬λŸ¬ μŠ¬λΌμ΄μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
- **νŽ˜μ΄μ§€ λ‚΄ ꡬ성:** νŽ˜μ΄μ§€λŠ” 슬라이슀λ₯Ό κ²°ν•©ν•˜μ—¬ 의미 μžˆλŠ” λ ˆμ΄μ•„μ›ƒμ„ λ§Œλ“œλŠ”λ°, μ΄λŠ” ν”Όμž 슬라이슀λ₯Ό μ ‘μ‹œμ— λ°°μ—΄ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.
- **κΈ°μ–΅ν•˜μ„Έμš”:** 이것은 λ‹¨μˆœν™”λœ μ˜ˆμ œμž…λ‹ˆλ‹€. μ‹€μ œ FSDλŠ” 더 λ³΅μž‘ν•œ μƒνƒœ 관리, 데이터 페칭 및 슬라이슀 κ°„μ˜ 톡신을 ν¬ν•¨ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이 μ˜ˆμ œλŠ” FSDλ₯Ό μ‚¬μš©ν•˜μ—¬ React 앱을 μ‘°μ§ν•˜λŠ” 핡심 원칙을 λ³΄μ—¬μ€λ‹ˆλ‹€.

<br/>

### 쒋은 점 (ν† ν•‘ λΆ€λΆ„): πŸ•

- **관리 용이:** 각각의 κΈ°λŠ₯이 독립적인 ν”Όμž 쑰각처럼 μžκΈ‰μžμ‘±ν•˜μ—¬, μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κ³ , μˆ˜μ •ν•˜κ³ , μ—…λ°μ΄νŠΈν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€. ν•˜λ‚˜μ˜ 뢀뢄을 λ³€κ²½ν•  λ•Œ 도미노 νš¨κ³Όκ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€!
- **ν™•μž₯μ„±:** 더 λ§Žμ€ κΈ°λŠ₯이 ν•„μš”ν•˜μ‹ κ°€μš”? κ·Έλƒ₯ 슬라이슀λ₯Ό μΆ”κ°€ν•˜λ©΄ λ©λ‹ˆλ‹€! FSDλŠ” 앱이 μƒˆλ‘œμš΄ μš”κ΅¬μ— 맞게 μš°μ•„ν•˜κ²Œ μ„±μž₯ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. 마치 μ±„μ†Œ ν”Όμžμ— νŽ˜νΌλ‘œλ‹ˆλ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒμ²˜λŸΌμš”.
- **λΉ λ₯Έ 개발:** μ„œλ‘œ λ‹€λ₯Έ νŒ€μ΄ λ™μ‹œμ— λ³„λ„μ˜ 슬라이슀λ₯Ό μž‘μ—…ν•  수 μžˆμ–΄ 개발 속도가 λΉ¨λΌμ§‘λ‹ˆλ‹€. 마치 μ—¬λŸ¬ μ…°ν”„κ°€ λ™μ‹œμ— ν”Όμžλ₯Ό λ§Œλ“œλŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.
- **λͺ…ν™•ν•œ μ†Œμœ κΆŒ:** 각 μŠ¬λΌμ΄μŠ€μ—λŠ” μ§€μ •λœ "ν”Όμžμ΄μ˜¬λ‘œ(pizzaiolo)"κ°€ μžˆμ–΄, κ°œλ°œμžκ°€ κ·Έ 슬라이슀의 ν’ˆμ§ˆκ³Ό μ„±λŠ₯에 λŒ€ν•΄ μ±…μž„μ„ μ§‘λ‹ˆλ‹€. μ΄λŠ” 각 μ…°ν”„κ°€ μžμ‹ μ˜ μ°½μž‘λ¬Όμ— μžλΆ€μ‹¬μ„ κ°–λŠ” 것과 λΉ„μŠ·ν•©λ‹ˆλ‹€.
- **ν…ŒμŠ€νŠΈ 용이:** ν…ŒμŠ€νŠΈλŠ” 각각의 μŠ¬λΌμ΄μŠ€κ°€ 잘 μ΅μ—ˆλŠ”μ§€ ν™•μΈν•˜λŠ” κ²ƒμ²˜λŸΌ 더 집쀑적이고 효율적으둜 μˆ˜ν–‰λ©λ‹ˆλ‹€.

### 쒋지 μ•Šμ€ 점 (크러슀트): πŸ‘ŽπŸ»

- **κ³„νšμ˜ 어렀움:** μŠ¬λΌμ΄μŠ€κ°€ μ›ν™œν•˜κ²Œ μž‘λ™ν•˜λ €λ©΄ 잘 λ§žλ¬Όλ €μ•Ό ν•©λ‹ˆλ‹€. μ΄λŠ” μΉ˜μ¦ˆκ°€ ν˜λŸ¬λ‚΄λ¦¬μ§€ μ•Šλ„λ‘ 쑰각듀을 잘 λ§žμΆ”λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. ν”Όμž λŒ€ν˜Όλž€μ„ ν”Όν•˜κΈ° μœ„ν•΄ μ‹ μ€‘ν•œ κ³„νšκ³Ό μ†Œν†΅μ΄ μ€‘μš”ν•©λ‹ˆλ‹€.
- **ν•™μŠ΅ 곑선:** μƒˆλ‘œμš΄ μ‚¬λžŒλ“€μ΄ "ν”Όμž"의 λΆ„μ‚°λœ νŠΉμ„±μ— μ²˜μŒμ—λŠ” ν˜Όλž€μŠ€λŸ¬μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. νŒŒμΈμ• ν”Œ 쑰각을 μ–΄λ””μ„œ 찾을지 μ•Œμ•„λ‚΄λŠ” 것과 λΉ„μŠ·ν•©λ‹ˆλ‹€. 이듀을 μ•ˆλ‚΄ν•˜κΈ° μœ„ν•΄ 쒋은 λ¬Έμ„œν™”κ°€ ν•„μˆ˜μ μž…λ‹ˆλ‹€.
- **νŒ€μ›Œν¬μ— 좔가적인 λ…Έλ ₯:** 슬라이슀 κ°„μ˜ μ›ν™œν•œ μ†Œν†΅κ³Ό 연결을 보μž₯ν•˜λŠ” λ°λŠ” μ‹œκ°„κ³Ό μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€. μ΄λŠ” 셰프듀이 μ™„λ²½ν•œ ν”Όμžλ₯Ό ν•¨κ»˜ λ§Œλ“œλŠ” 것을 μ‘°μœ¨ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.
- **잠재적인 쀑볡:** λ•Œλ•Œλ‘œ 두 μŠ¬λΌμ΄μŠ€κ°€ λΉ„μŠ·ν•œ 재료λ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ λͺ¨μ°¨λ λΌμ™€ 리코타λ₯Ό λͺ¨λ‘ μ‚¬μš©ν•˜λŠ” κ²ƒμ²˜λŸΌμš”. λΆˆν•„μš”ν•œ 쀑볡을 ν”Όν•˜κΈ° μœ„ν•΄ μ‹ μ€‘ν•œ κ³„νšκ³Ό 곡유 μžμ›μ΄ ν•„μš”ν•©λ‹ˆλ‹€.
- **λ„κ΅¬μ˜ ν•œκ³„:** FSDλŠ” 아직 비ꡐ적 μƒˆλ‘œμš΄ κ°œλ…μ΄μ–΄μ„œ, 이λ₯Ό μœ„ν•΄ νŠΉλ³„νžˆ μ„€κ³„λœ 도ꡬλ₯Ό μ°ΎλŠ” 것이 μœ λ‹ˆμ½˜ λͺ¨μ–‘μ˜ ν”Όμž 컀터λ₯Ό μ°ΎλŠ” κ²ƒμ²˜λŸΌ μ–΄λ €μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. μ²˜μŒμ—λŠ” 좔가적인 λ…Έλ ₯이 ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

### 정리

FSDλŠ” 크고 λ³΅μž‘ν•œ 앱에 ν›Œλ₯­ν•œ μ „λž΅μ΄ 될 수 μžˆμ§€λ§Œ, λͺ¨λ“  ν”„λ‘œμ νŠΈμ— λ§žλŠ” 만λŠ₯ λ ˆμ‹œν”ΌλŠ” μ•„λ‹™λ‹ˆλ‹€. ν”„λ‘œμ νŠΈμ˜ 크기, νŒ€, 개발 ν™˜κ²½μ„ κ³ λ €ν•œ ν›„ λ„μž…μ„ κ²°μ •ν•˜μ„Έμš”. κ°€μž₯ λ§›μžˆλŠ” ν”Όμžλ„ μ μ ˆν•œ 기술과 μž¬λ£Œκ°€ μ—†μœΌλ©΄ λ§Œλ“€κΈ° μ–΄λ €μšΈ 수 μžˆλ‹€λŠ” 점을 κΈ°μ–΅ν•˜μ„Έμš”!

> μœ μ˜ν•  점: κ²½ν—˜ μˆ˜μ€€μ— 상관없이 깊이 있게 νƒκ΅¬ν•˜κ³  μ‹Άλ‹€λ©΄, μ œκ°€ 자주 μ°Έκ³ ν•˜λŠ” [곡식 λ¬Έμ„œ](https://feature-sliced.design/docs)λ₯Ό μ‚΄νŽ΄λ³΄μ„Έμš”.
---

이 기사λ₯Ό 즐겁게 μ½μœΌμ…¨κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€. 이 기사가 μœ μ΅ν•˜κ±°λ‚˜ 도움이 λ˜μ—ˆλ‹€λ©΄, 컀피 ν•œ μž” 사주며 제 μž‘μ—…μ„ μ§€μ›ν•˜λŠ” 것을 κ³ λ €ν•΄ μ£Όμ„Έμš”. μ—¬λŸ¬λΆ„μ˜ κΈ°μ—¬λŠ” 이런 μ½˜ν…μΈ λ₯Ό 더 많이 λ§Œλ“œλŠ” 데 도움이 λ©λ‹ˆλ‹€. 가상 μ»€ν”Όλ‘œ μ €λ₯Ό λŒ€μ ‘ν•˜λ €λ©΄ μ—¬κΈ°λ₯Ό ν΄λ¦­ν•˜μ„Έμš” β˜•οΈ. ν•΄ν”Ό ν•΄ν‚Ή! πŸš€

0 comments on commit 20d9762

Please sign in to comment.