์ฃผ์š” ์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

Slice์™€ Segment

Sliceโ€‹

Slice๋Š” Feature-Sliced Design์˜ ๋‘ ๋ฒˆ์งธ ๊ตฌ์„ฑ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. Slice์˜ ์ฃผ ๋ชฉ์ ์€ ์ œํ’ˆ, ๋น„์ฆˆ๋‹ˆ์Šค, Application ๊ด€์ ์—์„œ ์ฝ”๋“œ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Slice ์ด๋ฆ„์€ ํ‘œ์ค€ํ™”๋˜์–ด ์žˆ์ง€ ์•Š๊ณ  Application์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

  • ์‚ฌ์ง„ ๊ฐค๋Ÿฌ๋ฆฌ: photo, effects, gallery-page
  • ์†Œ์…œ ๋„คํŠธ์›Œํฌ: post, comments, news-feed

Shared์™€ App Layer๋Š” Slice๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Shared๋Š” Business Logic์„ ํฌํ•จํ•˜์ง€ ์•Š๊ณ , App์€ Application ์ „์ฒด ๊ด€๋ จ ์ฝ”๋“œ๋งŒ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Zero ๊ฒฐํ•ฉ๋„๊ณผ High ์‘์ง‘๋„โ€‹

Slice๋Š” ๋…๋ฆฝ์ ์ด๊ณ  ์‘์ง‘๋„ ๋†’์€ ์ฝ”๋“œ ๊ทธ๋ฃน์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ž˜ํ”ฝ์€ _์‘์ง‘๋„_๊ณผ ๊ฒฐํ•ฉ๋„ ๊ฐœ๋…์„ ์‹œ๊ฐํ™”ํ•ฉ๋‹ˆ๋‹ค:

Image inspired by https://enterprisecraftsmanship.com/posts/cohesion-coupling-difference/

์ด์ƒ์ ์ธ Slice ํŠน์ง•:

  1. ๋…๋ฆฝ์  โ€” ๊ฐ™์€ Layer์˜ ๋‹ค๋ฅธ Slice์™€ Zero ๊ฒฐํ•ฉ๋„
  2. ๋†’์€ ์‘์ง‘๋„ โ€” ํ•ต์‹ฌ ๋ชฉ์  ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ํฌํ•จ

Slice์˜ ๋…๋ฆฝ์„ฑ์€ Layer Import Rule๋กœ ๊ฐ•์ œ๋ฉ๋‹ˆ๋‹ค:

Slice์˜ ๋ชจ๋“ˆ์€ ํ•˜์œ„ Layer์˜ ๋‹ค๋ฅธ Slice๋งŒ Import ๊ฐ€๋Šฅ

Slice์˜ Public API Ruleโ€‹

Slice ๋‚ด๋ถ€ ๊ตฌ์กฐ๋Š” ์ž์œ ๋กญ์ง€๋งŒ, ๋‹ค๋ฅธ Slice๊ฐ€ ์‚ฌ์šฉํ•  ์ข‹์€ Public API๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Slice Public API Rule๋กœ ๊ฐ•์ œ๋ฉ๋‹ˆ๋‹ค:

๋ชจ๋“  Slice(์™€ Slice๊ฐ€ ์—†๋Š” Layer์˜ Segment)๋Š” Public API๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ ๋ชจ๋“ˆ์€ Slice/Segment์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ Public API๋งŒ ์ฐธ์กฐ ๊ฐ€๋Šฅ

์ž์„ธํ•œ ๋‚ด์šฉ์€ Public API Reference๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Slice Groupโ€‹

์—ฐ๊ด€๋œ Slice๋“ค์€ ํด๋”๋กœ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, ๋‹ค๋ฅธ Slice์™€ ๋™์ผํ•œ ๊ฒฉ๋ฆฌ ๊ทœ์น™์„ ๋”ฐ๋ผ์•ผ ํ•˜๋ฉฐ, ๊ทธ๋ฃน ๋‚ด ์ฝ”๋“œ ๊ณต์œ ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Features "compose", "like" ๊ทธ๋ฆฌ๊ณ  "delete"๊ฐ€ "post" ํด๋”์— ๊ทธ๋ฃนํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํด๋”์—๋Š” ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์ทจ์†Œ์„ ์ด ๊ทธ์–ด์ง„ "some-shared-code.ts" ํŒŒ์ผ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Segmentโ€‹

Segment๋Š” ๋งˆ์ง€๋ง‰ ๊ตฌ์„ฑ ๋‹จ์œ„๋กœ, ๊ธฐ์ˆ ์  ํŠน์„ฑ์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ๊ทธ๋ฃนํ™”ํ•ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ Segment:

  • ui โ€” UI ๊ด€๋ จ: Component, Date Formatter, Style ๋“ฑ
  • api โ€” Backend ํ†ต์‹ : Request Function, Data Type, Mapper ๋“ฑ
  • model โ€” Data Model: Schema, Interface, Store, Business Logic
  • lib โ€” Slice ๋‚ด๋ถ€ Library ์ฝ”๋“œ
  • config โ€” Configuration๊ณผ Feature Flag

๊ฐ Layer์˜ Segment ์‚ฌ์šฉ๋ฒ•์€ Layer Page๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

Custom Segment๋„ ์ƒ์„ฑ ๊ฐ€๋Šฅํ•˜๋ฉฐ, App๊ณผ Shared Layer์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Segment ์ด๋ฆ„์€ ์ฝ”๋“œ ๋ชฉ์ ์„ ๋ช…ํ™•ํžˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. components, hooks, types๊ฐ™์€ ๋ชจํ˜ธํ•œ ์ด๋ฆ„์€ ํ”ผํ•˜์„ธ์š”.