diff --git a/July/article/Frontend-Masters-Feature-Sliced-Design-Pattern.md b/July/article/Frontend-Masters-Feature-Sliced-Design-Pattern.md new file mode 100644 index 0000000..6c9b931 --- /dev/null +++ b/July/article/Frontend-Masters-Feature-Sliced-Design-Pattern.md @@ -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) + +
+ +**λ³΅μž‘ν•œ ν”„λ‘œμ νŠΈλ₯Ό λ§›μžˆλŠ” ν”ΌμžλΌκ³  상상해 λ³΄μ„Έμš”. κΈ°λŠ₯ 뢄할이 μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ΄ν•΄ν•˜κΈ° μœ„ν•΄ ν”Όμžλ₯Ό ν•œ 쑰각씩 λ‚˜λˆ λ΄…μ‹œλ‹€. κ΄€λ¦¬ν•˜κΈ° 쉽고 μœ μ§€λ³΄μˆ˜ν•˜κΈ°μ—λ„ λ§›μžˆμŠ΅λ‹ˆλ‹€! πŸ•** + +이전에 Medium κΈ€μ—μ„œ λ§ν–ˆλ˜ λ‚΄μš©μ„ λ°˜λ³΅ν•˜κ² μŠ΅λ‹ˆλ‹€. 이 글은 κΈΈμ–΄μ§ˆ 것이고(μ™œ μ•ˆλ˜κ² μ–΄μš”? πŸ˜‡) μ•„λ§ˆλ„ μ΄ν•΄ν•˜κΈ° 쑰금 μ–΄λ €μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ ν•œ 번 읽고 μ™„λ²½ν•˜κ²Œ μ΄ν•΄ν•˜κ²Œ 되면, 이제 당신은 10λ°° 더 λ‚˜μ€ ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžκ°€ 될 κ²ƒμž…λ‹ˆλ‹€. 😎 컀피 ν•œ μž” μ€€λΉ„ν•˜μ„Έμš”. β˜•οΈ 컀피λ₯Ό μΆ©λΆ„νžˆ λ§ˆμ‹œμ§€ μ•ŠμœΌλ©΄ 10λ°° κ°œλ°œμžκ°€ λ˜λŠ” 데 더 였래 걸릴 κ±°μ˜ˆμš”. πŸ˜… + +
+ +--- + +
+ +μ €λŠ” μ›Ή 및 λͺ¨λ°”일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κΈ°λŠ₯ μ„ΈνŠΈλΌλŠ” μž‘μ€ λΆ€λΆ„μœΌλ‘œ λ‚˜λˆ„μ–΄ κ°„μ†Œν™”ν•˜λŠ” 것을 μ’‹μ•„ν•©λ‹ˆλ‹€. 각 κΈ°λŠ₯ μ„ΈνŠΈλŠ” 자체 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€, λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 및 데이터 λ ˆμ΄μ–΄λ₯Ό 가지고 μžˆμ–΄ κ΄€λ¦¬ν•˜κΈ°κ°€ 더 μ‰½μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 방법을 κΈ°λŠ₯ λΆ„ν•  λ””μžμΈ (FSD)이라고 ν•˜λ©°, μ»΄ν¬λ„ŒνŠΈ 기반 μ ‘κ·Ό 방식과 μœ μ‚¬ν•œ μž₯점을 κ³΅μœ ν•©λ‹ˆλ‹€. FSDμ—μ„œ 특히 λˆˆμ— λ„λŠ” 점은 μ‚¬μš©μž 쀑심 κΈ°λŠ₯에 μ΄ˆμ μ„ 맞좰 μ›Ή 및 λͺ¨λ°”일 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 더 κ΄€λ¦¬ν•˜κΈ° μ‰¬μš΄ λΆ€λΆ„μœΌλ‘œ λΆ„ν•΄ν•  수 μžˆλ‹€λŠ” μ μž…λ‹ˆλ‹€. + +
+ +--- + +
+ +## ꡬ쑰 + +> FSD 방법둠은 μ„Έ 가지 좔상화 μˆ˜μ€€μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€: λ ˆμ΄μ–΄, 슬라이슀, 그리고 μ„Έκ·Έλ¨ΌνŠΈμž…λ‹ˆλ‹€. + +
+ +![](https://miro.medium.com/v2/resize:fit:1400/format:webp/1*exIzF4234oogpgybeG3xbg.jpeg) + +
+ +### λ ˆμ΄μ–΄ + +λ‹Ήμ‹ μ˜ 앱을 λ§›μžˆλŠ” ν”Όμžλ‘œ 상상해 λ³΄μ„Έμš”. πŸ• (λ„λ―Έλ…Έμ—μ„œ μΌν•˜λŠ” κ°œλ°œμžλ‘œμ„œ ν”Όμž λΉ„μœ λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 제 μžμ—°μŠ€λŸ¬μš΄ κΆŒλ¦¬μž…λ‹ˆλ‹€. 😎) + +#### 1. 곡용 λ ˆμ΄μ–΄ (μ‹λ£Œν’ˆ μ €μž₯μ‹€): + +- **λͺ¨λ‘λ₯Ό μœ„ν•œ 재료:** + μ—¬λŸ¬ μŠ¬λΌμ΄μŠ€μ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ” μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ, μœ ν‹Έλ¦¬ν‹°, ν›…, 그리고 μ„œλΉ„μŠ€λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. (곡톡 μž¬λ£Œμ™€ 도ꡬλ₯Ό λͺ¨λ‘κ°€ κ°€μ Έκ°ˆ 수 μžˆλŠ” 곡유 주방이라고 μƒκ°ν•˜μ„Έμš”.) +- **μ˜ˆμ‹œ:** + - λ²„νŠΌ, 폼, λͺ¨λ‹¬, λ‚΄λΉ„κ²Œμ΄μ…˜ 바와 같은 곡톡 UI μš”μ†Œ (미리 μ†μ§ˆλœ μ±„μ†Œμ™€ 치즈λ₯Ό μƒκ°ν•˜μ„Έμš”) + - 데이터 ν¬λ§·νŒ…μ΄λ‚˜ 검증을 μœ„ν•œ μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜ (λ‚ μΉ΄λ‘œμš΄ ν”Όμž 컀터와 κ°™μŠ΅λ‹ˆλ‹€) + - Redux, Zustand, Tanstack Query와 같은 κΈ€λ‘œλ²Œ μƒνƒœ 관리 μ†”λ£¨μ…˜ (일관성을 μœ„ν•œ λ ˆμ‹œν”Ό 뢁과 κ°™μŠ΅λ‹ˆλ‹€) + +#### 2. ν”„λ‘œμ„ΈμŠ€ λ ˆμ΄μ–΄ (μ£Όλ°© 직원): + +- **μ—΄μ‹¬νžˆ μΌν•˜λŠ” μ…°ν”„λ“€:** λ°±κ·ΈλΌμš΄λ“œ μž‘μ—…κ³Ό 데이터 νŽ˜μΉ­μ„ μ²˜λ¦¬ν•˜μ—¬ ν”Όμž 주방이 μ›ν™œν•˜κ²Œ μš΄μ˜λ˜λ„λ‘ ν•©λ‹ˆλ‹€. (반죽, μ†ŒμŠ€, 토핑을 μ€€λΉ„ν•˜κ³  베이킹 과정을 μ‘°μœ¨ν•˜λŠ” ν”Όμž 셰프듀을 μƒκ°ν•˜μ„Έμš”.) +- **μ˜ˆμ‹œ:** + - 온라인 μ‹œμŠ€ν…œμ—μ„œ ν”Όμž 주문을 κ°€μ Έμ˜€κΈ° + - ν”Όμžκ°€ μ€€λΉ„λ˜μ—ˆμ„ λ•Œ μ•Œλ¦Ό 보내기 + - 배달 기사와 데이터 λ™κΈ°ν™”ν•˜κΈ° + +#### 3. κΈ°λŠ₯ λ ˆμ΄μ–΄ (ν”Όμž 슬라이슀): + +- **독립적이고 μžκΈ‰μžμ‘±:** 각 μŠ¬λΌμ΄μŠ€λŠ” νŠΉμ • κΈ°λŠ₯을 μΊ‘μŠν™”ν•˜λ©°, 고유의 UI, 둜직, 데이터λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 마치 κ°œλ³„ 토핑이 μžˆλŠ” ν”Όμž μŠ¬λΌμ΄μŠ€μ™€ κ°™μŠ΅λ‹ˆλ‹€. +- **μ˜ˆμ‹œ:** + - "ν”Όμž μ£Όλ¬Έ" 슬라이슀: ν”Όμž 선택, 맞좀 μ„€μ • 및 결제λ₯Ό 처리 (νŽ˜νΌλ‘œλ‹ˆ, 버섯, μΆ”κ°€ 치즈, 수쾌 -μ†Œμ‹œμ§€- λ“±λ“±) + - "μ£Όλ¬Έ 좔적" 슬라이슀: μ£Όλ¬Έ μƒνƒœμ™€ μ˜ˆμƒ 배달 μ‹œκ°„μ„ ν‘œμ‹œ (ν”Όμž 좔적기와 κ°™μŒ) + - "ν”Όμž 리뷰" 슬라이슀: 고객이 κ²½ν—˜μ„ ν‰κ°€ν•˜κ³  λŒ“κΈ€μ„ 달 수 μžˆλ„λ‘ 함 (μ…°ν”„λ₯Ό μœ„ν•œ ν”Όλ“œλ°± 양식) + +#### 4. μ•± λ ˆμ΄μ–΄ (ν”Όμž μ…°ν”„): + +- **총주방μž₯:** 전체 ν”Όμž μ œμž‘ μž‘μ—…μ„ κ°λ…ν•˜λ©°, μ–΄λ–€ 슬라이슀λ₯Ό κ΅¬μšΈμ§€, κ³ κ°μ—κ²Œ μ–΄λ–»κ²Œ μ œκ³΅ν• μ§€λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€. (메뉴λ₯Ό μ„€κ³„ν•˜κ³ , μƒˆλ‘œμš΄ λ ˆμ‹œν”Όλ₯Ό λ§Œλ“€λ©°, 각 ν”Όμžκ°€ μ™„λ²½ν•˜κ²Œ μš”λ¦¬λ˜λ„λ‘ 보μž₯ν•˜λŠ” λ§ˆμŠ€ν„° μ…°ν”„λ₯Ό μƒκ°ν•˜μ„Έμš”.) + +#### 5. νŽ˜μ΄μ§€ λ ˆμ΄μ–΄ (ν”Όμž 진열): + +- **슬라이슀λ₯Ό λ°°μ—΄:** 슬라이슀λ₯Ό 의미 μžˆλŠ” νŽ˜μ΄μ§€ λ ˆμ΄μ•„μ›ƒμœΌλ‘œ κ΅¬μ„±ν•˜μ—¬ ν”Όμž 슬라이슀λ₯Ό μ ‘μ‹œλ‚˜ 배달 μƒμžμ— λ°°μ—΄ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. +- **μ˜ˆμ‹œ:** + - ν™ˆνŽ˜μ΄μ§€: "μΆ”μ²œ ν”Όμž"와 "μ£Όλ¬Έ λ‚΄μ—­" 슬라이슀λ₯Ό κ²°ν•© + - λ‚΄ 계정: "개인 정보"와 "μ£Όλ¬Έ μ„ ν˜Έ μ„€μ •" 슬라이슀λ₯Ό 포함 + +#### 6. μœ„μ ― λ ˆμ΄μ–΄ (ν–₯μ‹ λ£Œ): + +- **선택적 맛 κ°•ν™”μ œ:** μŠ¬λΌμ΄μŠ€λ‚˜ νŽ˜μ΄μ§€/ν™”λ©΄ 전체에 뿌릴 수 μžˆλŠ” μž‘κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈλ‘œ, ν”Όμžμ— μΆ”κ°€ 양념을 λ”ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. +- **μ˜ˆμ‹œ:** + - 검색창 (μ’‹μ•„ν•˜λŠ” ν”Όμžλ₯Ό λΉ λ₯΄κ²Œ μ°ΎκΈ° μœ„ν•΄) + - μ‚¬μš©μž μ•Œλ¦Ό νŒ¨λ„ (ν”Όμžκ°€ μ€€λΉ„λ˜μ—ˆμ„ λ•Œ μ•Œλ¦Ό) + - λͺ¨λ‹¬ λŒ€ν™”μƒμž (νŠΉλ³„ μš”μ²­μ΄λ‚˜ 확인을 μœ„ν•΄) + +#### 5. μ—”ν„°ν‹° λ ˆμ΄μ–΄ (μ›μž¬λ£Œ): + +- **λ°μ΄ν„°μ˜ ꡬ성 μš”μ†Œ:** ν”Όμžμ˜ 밀가루, 이슀트, ν† ν•‘κ³Ό 같은 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ μ—”ν„°ν‹°λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. +- **μ˜ˆμ‹œ:** + - μ‚¬μš©μž μ—”ν„°ν‹° (고객 정보λ₯Ό μ €μž₯) + - ν”Όμž μ—”ν„°ν‹° (ν”Όμž μ’…λ₯˜μ™€ 재료 μ •μ˜) + - μ£Όλ¬Έ μ—”ν„°ν‹° (μ£Όλ¬Έ 정보λ₯Ό 좔적) + +
+ +_κΈ°μ–΅ν•΄μ•Ό ν•  μ£Όμš” 사항:_ + +- 각 λ ˆμ΄μ–΄λŠ” λͺ…ν™•ν•œ μ±…μž„κ³Ό μ˜μ‘΄μ„± λ°©ν–₯을 가지고 μžˆμŠ΅λ‹ˆλ‹€. +- μŠ¬λΌμ΄μŠ€λŠ” ν”Όμž μŠ¬λΌμ΄μŠ€κ°€ 곡톡 크러슀트λ₯Ό κ³΅μœ ν•˜λŠ” κ²ƒμ²˜λŸΌ 잘 μ •μ˜λœ 계약을 톡해 μ„œλ‘œ μ†Œν†΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. +- λͺ©ν‘œλŠ” λͺ¨λ“ˆν™”λ˜κ³  독립적이며 μ‰½κ²Œ ν…ŒμŠ€νŠΈν•  수 μžˆλŠ” 슬라이슀λ₯Ό λ§Œλ“€μ–΄ "ν”Όμž" μ½”λ“œλ² μ΄μŠ€λ₯Ό 더 κ΄€λ¦¬ν•˜κΈ° 쉽고 λ§›μžˆκ²Œ λ§Œλ“œλŠ” κ²ƒμž…λ‹ˆλ‹€! + +
+ +_μΆ”κ°€ ν”Όμž λΉ„μœ  λ…ΈνŠΈ:_ + +- μ£Όλ°© 직원(ν”„λ‘œμ„ΈμŠ€)은 λ¬΄λŒ€ λ’€μ—μ„œ μΌν•˜λ©°, 재료λ₯Ό μ€€λΉ„ν•˜κ³  μ›ν™œν•œ ν”Όμž μ œμž‘ 과정을 보μž₯ν•©λ‹ˆλ‹€. +- ν”Όμž μ…°ν”„(μ•±)λŠ” λͺ¨λ“  μž‘μ—…μ„ μ΄κ΄„ν•˜λ©°, λ‹€μ–‘ν•œ ν”Όμž(κΈ°λŠ₯)λ₯Ό μ°½μ‘°ν•˜κ³  이λ₯Ό μ–΄λ–»κ²Œ μ œκ³΅ν• μ§€(νŽ˜μ΄μ§€)λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€. +- μ›μž¬λ£Œ(μ—”ν„°ν‹°)λŠ” μ–΄λ–€ ν”Όμžμ—λ„ ν•„μˆ˜μ μ΄μ§€λ§Œ, κ³ κ°μ—κ²Œ 항상 λ³΄μ΄λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€. 이듀은 λͺ¨λ“  것을 κ°€λŠ₯ν•˜κ²Œ λ§Œλ“œλŠ” κΈ°μ΄ˆμž…λ‹ˆλ‹€. + +
+ +![](https://miro.medium.com/v2/resize:fit:1400/format:webp/1*URBFMm6YigIKqzyBlPiLhg.png) + +
+ +### μ„Έκ·Έλ¨ΌνŠΈ (ν† ν•‘): + +- **슬라이슀 λ‚΄μ˜ 재료:** μŠ¬λΌμ΄μŠ€κ°€ μ™„μ „ν•œ κΈ°λŠ₯이라면, 그것은 μ’…μ’… μ„Έκ·Έλ¨ΌνŠΈλΌκ³  λΆˆλ¦¬λŠ” μž‘μ€ λΆ€λΆ„λ“€λ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€. μ΄λŠ” ν”Όμž 슬라이슀λ₯Ό κ΅¬μ„±ν•˜λŠ” κ°œλ³„ ν† ν•‘κ³Ό κ°™μŠ΅λ‹ˆλ‹€. +- **νŠΉμ • μž‘μ—…μ— 집쀑:** 각 μ„Έκ·Έλ¨ΌνŠΈλŠ” 슬라이슀 λ‚΄μ—μ„œ λͺ…ν™•ν•œ μ±…μž„μ„ 가지며, νŠΉμ • UI μš”μ†Œ, 데이터 μž‘μ—…, λ˜λŠ” λ‘œμ§μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€. +- **μ˜ˆμ‹œ:** +- **"ν”Όμž μ£Όλ¬Έ" 슬라이슀 λ‚΄μ—μ„œ:** + - "ν”Όμž 메뉴" μ„Έκ·Έλ¨ΌνŠΈ: μ‚¬μš© κ°€λŠ₯ν•œ ν”Όμž μ˜΅μ…˜κ³Ό 가격을 ν‘œμ‹œν•©λ‹ˆλ‹€. + - "ν† ν•‘ 선택기" μ„Έκ·Έλ¨ΌνŠΈ: 고객이 μ›ν•˜λŠ” 토핑을 선택할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. + - "결제 양식" μ„Έκ·Έλ¨ΌνŠΈ: 결제 및 배달 정보λ₯Ό μˆ˜μ§‘ν•©λ‹ˆλ‹€. + +#### **더 React 슀럽게:** + +각 μŠ¬λΌμ΄μŠ€λŠ” λ‹€μŒ μ„Έκ·Έλ¨ΌνŠΈ 쀑 ν•˜λ‚˜ λ˜λŠ” μ—¬λŸ¬ 개둜 λ‚˜λ‰©λ‹ˆλ‹€: + +- `ui/:` μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ μ»΄ν¬λ„ŒνŠΈ 및 UI κ΄€λ ¨ 둜직 +- `model/:` λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 (μŠ€ν† μ–΄, μ•‘μ…˜, μ΄νŽ™νŠΈ, λ¦¬λ“€μ„œ λ“±) +- `lib/:` 인프라 둜직 (μœ ν‹Έλ¦¬ν‹°/헬퍼) +- `config/:` 둜컬 ꡬ성 (μƒμˆ˜, μ—΄κ±°ν˜•, 메타 정보) +- `api/:` API μš”μ²­ 둜직 (API μΈμŠ€ν„΄μŠ€, μš”μ²­ λ“±) + +#### **κΈ°μ–΅ν•΄μ•Ό ν•  μ£Όμš” 사항:** + +- μŠ¬λΌμ΄μŠ€λŠ” 더 크고 μžκΈ‰μžμ‘±ν•˜λŠ” κΈ°λŠ₯이며, μ„Έκ·Έλ¨ΌνŠΈλŠ” 슬라이슀 λ‚΄μ˜ 더 μž‘κ³  μ§‘μ€‘λœ λΆ€λΆ„μž…λ‹ˆλ‹€. +- 각 μŠ¬λΌμ΄μŠ€λŠ” μ—¬λŸ¬ μ„Έκ·Έλ¨ΌνŠΈλ₯Ό κ°€μ§ˆ 수 있으며, μ΄λŠ” ν”Όμž μŠ¬λΌμ΄μŠ€κ°€ λ‹€μ–‘ν•œ 토핑을 κ°€μ§ˆ 수 μžˆλŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. +- λͺ©ν‘œλŠ” 잘 쑰직된 λͺ¨λ“ˆν˜• μ½”λ“œλ₯Ό λ§Œλ“€μ–΄ μ΄ν•΄ν•˜κ³  κ°œλ°œν•˜κ³  μœ μ§€λ³΄μˆ˜ν•˜κΈ° μ‰½κ²Œ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 마치 ν”Όμžμ— 각기 λ‹€λ₯Έ 맛을 λ”ν•˜λŠ” μ•„λ¦„λ‹΅κ²Œ λ°°μ—΄λœ ν† ν•‘μ²˜λŸΌ 말이죠! + +
+ +--- + +> μ§€κΈˆκΉŒμ§€ 읽은 λ‚΄μš©μ„ μ˜ˆμ‹œ μ½”λ“œλ‘œ ν‘œν˜„ν•˜λ©΄ μ–΄λ–»κ²Œ λ κΉŒμš”? + +#### 1. 폴더 ꡬ쑰(ν”Όμž μ£Όλ°©) + +
+ +![](https://miro.medium.com/v2/resize:fit:1400/format:webp/1*G9DDFy4VZaGCMaogGOduIw.png) + +
+ +#### 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 = ( + { + /* ...props */ + } +) => { + // ... 슬라이슀 둜직과 μƒνƒœ 관리 + + return ( +
+ + + +
+ ); +}; + +export default OrderPizzaSlice; +``` + +
+ +#### 3. ν”Όμž 메뉴 μ„Έκ·Έλ¨ΌνŠΈ(λ„μš° 베이슀) + +```tsx +// features/order-pizza/components/PizzaMenu.tsx +import React from 'react'; + +interface PizzaMenuProps { + // ... ν”Όμž μ˜΅μ…˜λ“€ +} + +const PizzaMenu: React.FC = ( + { + /* ...props */ + } +) => { + // ... ν”Όμž μ˜΅μ…˜μ„ fetchν•˜κ³  화면에 그리기 + + return ; +}; + +export default PizzaMenu; +``` + +
+ +#### 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 ( +
+

Welcome to Domino's Pizza!

+ +
+ ); +}; + +export default HomePage; +``` + +
+ +#### μ½”λ“œμ—μ„œ μ–»μ–΄μ•Ό ν•  μ£Όμš” λ‚΄μš©: + +- **λͺ…ν™•ν•œ 폴더 ꡬ쑰:** 각 μŠ¬λΌμ΄μŠ€λŠ” 고유의 폴더λ₯Ό 가지고 μžˆμ–΄ κ·Έ μ•ˆμ˜ μ»΄ν¬λ„ŒνŠΈμ™€ λ‘œμ§μ„ μ²΄κ³„μ μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€. +- **독립적인 슬라이슀:** 각 μŠ¬λΌμ΄μŠ€λŠ” λ…λ¦½μ μœΌλ‘œ 개발되고 ν…ŒμŠ€νŠΈλ  수 있으며, μžκΈ‰μžμ‘±ν•˜λŠ” ν”Όμžμ™€ κ°™μŠ΅λ‹ˆλ‹€. +- **μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ:** 곡톡 μ»΄ν¬λ„ŒνŠΈ(λ²„νŠΌ, μž…λ ₯λž€ λ“±)λŠ” 일관성과 νš¨μœ¨μ„±μ„ μœ„ν•΄ μ—¬λŸ¬ μŠ¬λΌμ΄μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. +- **νŽ˜μ΄μ§€ λ‚΄ ꡬ성:** νŽ˜μ΄μ§€λŠ” 슬라이슀λ₯Ό κ²°ν•©ν•˜μ—¬ 의미 μžˆλŠ” λ ˆμ΄μ•„μ›ƒμ„ λ§Œλ“œλŠ”λ°, μ΄λŠ” ν”Όμž 슬라이슀λ₯Ό μ ‘μ‹œμ— λ°°μ—΄ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. +- **κΈ°μ–΅ν•˜μ„Έμš”:** 이것은 λ‹¨μˆœν™”λœ μ˜ˆμ œμž…λ‹ˆλ‹€. μ‹€μ œ FSDλŠ” 더 λ³΅μž‘ν•œ μƒνƒœ 관리, 데이터 페칭 및 슬라이슀 κ°„μ˜ 톡신을 ν¬ν•¨ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이 μ˜ˆμ œλŠ” FSDλ₯Ό μ‚¬μš©ν•˜μ—¬ React 앱을 μ‘°μ§ν•˜λŠ” 핡심 원칙을 λ³΄μ—¬μ€λ‹ˆλ‹€. + +
+ +### 쒋은 점 (ν† ν•‘ λΆ€λΆ„): πŸ• + +- **관리 용이:** 각각의 κΈ°λŠ₯이 독립적인 ν”Όμž 쑰각처럼 μžκΈ‰μžμ‘±ν•˜μ—¬, μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κ³ , μˆ˜μ •ν•˜κ³ , μ—…λ°μ΄νŠΈν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€. ν•˜λ‚˜μ˜ 뢀뢄을 λ³€κ²½ν•  λ•Œ 도미노 νš¨κ³Όκ°€ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€! +- **ν™•μž₯μ„±:** 더 λ§Žμ€ κΈ°λŠ₯이 ν•„μš”ν•˜μ‹ κ°€μš”? κ·Έλƒ₯ 슬라이슀λ₯Ό μΆ”κ°€ν•˜λ©΄ λ©λ‹ˆλ‹€! FSDλŠ” 앱이 μƒˆλ‘œμš΄ μš”κ΅¬μ— 맞게 μš°μ•„ν•˜κ²Œ μ„±μž₯ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. 마치 μ±„μ†Œ ν”Όμžμ— νŽ˜νΌλ‘œλ‹ˆλ₯Ό μΆ”κ°€ν•˜λŠ” κ²ƒμ²˜λŸΌμš”. +- **λΉ λ₯Έ 개발:** μ„œλ‘œ λ‹€λ₯Έ νŒ€μ΄ λ™μ‹œμ— λ³„λ„μ˜ 슬라이슀λ₯Ό μž‘μ—…ν•  수 μžˆμ–΄ 개발 속도가 λΉ¨λΌμ§‘λ‹ˆλ‹€. 마치 μ—¬λŸ¬ μ…°ν”„κ°€ λ™μ‹œμ— ν”Όμžλ₯Ό λ§Œλ“œλŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. +- **λͺ…ν™•ν•œ μ†Œμœ κΆŒ:** 각 μŠ¬λΌμ΄μŠ€μ—λŠ” μ§€μ •λœ "ν”Όμžμ΄μ˜¬λ‘œ(pizzaiolo)"κ°€ μžˆμ–΄, κ°œλ°œμžκ°€ κ·Έ 슬라이슀의 ν’ˆμ§ˆκ³Ό μ„±λŠ₯에 λŒ€ν•΄ μ±…μž„μ„ μ§‘λ‹ˆλ‹€. μ΄λŠ” 각 μ…°ν”„κ°€ μžμ‹ μ˜ μ°½μž‘λ¬Όμ— μžλΆ€μ‹¬μ„ κ°–λŠ” 것과 λΉ„μŠ·ν•©λ‹ˆλ‹€. +- **ν…ŒμŠ€νŠΈ 용이:** ν…ŒμŠ€νŠΈλŠ” 각각의 μŠ¬λΌμ΄μŠ€κ°€ 잘 μ΅μ—ˆλŠ”μ§€ ν™•μΈν•˜λŠ” κ²ƒμ²˜λŸΌ 더 집쀑적이고 효율적으둜 μˆ˜ν–‰λ©λ‹ˆλ‹€. + +### 쒋지 μ•Šμ€ 점 (크러슀트): πŸ‘ŽπŸ» + +- **κ³„νšμ˜ 어렀움:** μŠ¬λΌμ΄μŠ€κ°€ μ›ν™œν•˜κ²Œ μž‘λ™ν•˜λ €λ©΄ 잘 λ§žλ¬Όλ €μ•Ό ν•©λ‹ˆλ‹€. μ΄λŠ” μΉ˜μ¦ˆκ°€ ν˜λŸ¬λ‚΄λ¦¬μ§€ μ•Šλ„λ‘ 쑰각듀을 잘 λ§žμΆ”λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. ν”Όμž λŒ€ν˜Όλž€μ„ ν”Όν•˜κΈ° μœ„ν•΄ μ‹ μ€‘ν•œ κ³„νšκ³Ό μ†Œν†΅μ΄ μ€‘μš”ν•©λ‹ˆλ‹€. +- **ν•™μŠ΅ 곑선:** μƒˆλ‘œμš΄ μ‚¬λžŒλ“€μ΄ "ν”Όμž"의 λΆ„μ‚°λœ νŠΉμ„±μ— μ²˜μŒμ—λŠ” ν˜Όλž€μŠ€λŸ¬μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. νŒŒμΈμ• ν”Œ 쑰각을 μ–΄λ””μ„œ 찾을지 μ•Œμ•„λ‚΄λŠ” 것과 λΉ„μŠ·ν•©λ‹ˆλ‹€. 이듀을 μ•ˆλ‚΄ν•˜κΈ° μœ„ν•΄ 쒋은 λ¬Έμ„œν™”κ°€ ν•„μˆ˜μ μž…λ‹ˆλ‹€. +- **νŒ€μ›Œν¬μ— 좔가적인 λ…Έλ ₯:** 슬라이슀 κ°„μ˜ μ›ν™œν•œ μ†Œν†΅κ³Ό 연결을 보μž₯ν•˜λŠ” λ°λŠ” μ‹œκ°„κ³Ό μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€. μ΄λŠ” 셰프듀이 μ™„λ²½ν•œ ν”Όμžλ₯Ό ν•¨κ»˜ λ§Œλ“œλŠ” 것을 μ‘°μœ¨ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€. +- **잠재적인 쀑볡:** λ•Œλ•Œλ‘œ 두 μŠ¬λΌμ΄μŠ€κ°€ λΉ„μŠ·ν•œ 재료λ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ λͺ¨μ°¨λ λΌμ™€ 리코타λ₯Ό λͺ¨λ‘ μ‚¬μš©ν•˜λŠ” κ²ƒμ²˜λŸΌμš”. λΆˆν•„μš”ν•œ 쀑볡을 ν”Όν•˜κΈ° μœ„ν•΄ μ‹ μ€‘ν•œ κ³„νšκ³Ό 곡유 μžμ›μ΄ ν•„μš”ν•©λ‹ˆλ‹€. +- **λ„κ΅¬μ˜ ν•œκ³„:** FSDλŠ” 아직 비ꡐ적 μƒˆλ‘œμš΄ κ°œλ…μ΄μ–΄μ„œ, 이λ₯Ό μœ„ν•΄ νŠΉλ³„νžˆ μ„€κ³„λœ 도ꡬλ₯Ό μ°ΎλŠ” 것이 μœ λ‹ˆμ½˜ λͺ¨μ–‘μ˜ ν”Όμž 컀터λ₯Ό μ°ΎλŠ” κ²ƒμ²˜λŸΌ μ–΄λ €μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. μ²˜μŒμ—λŠ” 좔가적인 λ…Έλ ₯이 ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€. + +### 정리 + +FSDλŠ” 크고 λ³΅μž‘ν•œ 앱에 ν›Œλ₯­ν•œ μ „λž΅μ΄ 될 수 μžˆμ§€λ§Œ, λͺ¨λ“  ν”„λ‘œμ νŠΈμ— λ§žλŠ” 만λŠ₯ λ ˆμ‹œν”ΌλŠ” μ•„λ‹™λ‹ˆλ‹€. ν”„λ‘œμ νŠΈμ˜ 크기, νŒ€, 개발 ν™˜κ²½μ„ κ³ λ €ν•œ ν›„ λ„μž…μ„ κ²°μ •ν•˜μ„Έμš”. κ°€μž₯ λ§›μžˆλŠ” ν”Όμžλ„ μ μ ˆν•œ 기술과 μž¬λ£Œκ°€ μ—†μœΌλ©΄ λ§Œλ“€κΈ° μ–΄λ €μšΈ 수 μžˆλ‹€λŠ” 점을 κΈ°μ–΅ν•˜μ„Έμš”! + +> μœ μ˜ν•  점: κ²½ν—˜ μˆ˜μ€€μ— 상관없이 깊이 있게 νƒκ΅¬ν•˜κ³  μ‹Άλ‹€λ©΄, μ œκ°€ 자주 μ°Έκ³ ν•˜λŠ” [곡식 λ¬Έμ„œ](https://feature-sliced.design/docs)λ₯Ό μ‚΄νŽ΄λ³΄μ„Έμš”. + +--- + +이 기사λ₯Ό 즐겁게 μ½μœΌμ…¨κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€. 이 기사가 μœ μ΅ν•˜κ±°λ‚˜ 도움이 λ˜μ—ˆλ‹€λ©΄, 컀피 ν•œ μž” 사주며 제 μž‘μ—…μ„ μ§€μ›ν•˜λŠ” 것을 κ³ λ €ν•΄ μ£Όμ„Έμš”. μ—¬λŸ¬λΆ„μ˜ κΈ°μ—¬λŠ” 이런 μ½˜ν…μΈ λ₯Ό 더 많이 λ§Œλ“œλŠ” 데 도움이 λ©λ‹ˆλ‹€. 가상 μ»€ν”Όλ‘œ μ €λ₯Ό λŒ€μ ‘ν•˜λ €λ©΄ μ—¬κΈ°λ₯Ό ν΄λ¦­ν•˜μ„Έμš” β˜•οΈ. ν•΄ν”Ό ν•΄ν‚Ή! πŸš€