@@ -5,8 +5,7 @@ sidebar_label: ๊ธฐ์กด ์ํคํ
์ฒ์์ ์ ํํ๊ธฐ
55
66# ๊ธฐ์กด ์ํคํ
์ฒ์์ FSD๋ก์ ๋ง์ด๊ทธ๋ ์ด์
77
8- ์ด ๊ฐ์ด๋๋ ๊ธฐ์กด ์ํคํ
์ฒ๋ฅผ ** Feature-Sliced Design(FSD)** ์ผ๋ก ๋จ๊ณ๋ณ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค.
9-
8+ ์ด ๊ฐ์ด๋๋ ๊ธฐ์กด ์ํคํ
์ฒ๋ฅผ ** Feature-Sliced Design(FSD)** ์ผ๋ก ๋จ๊ณ๋ณ ์ ํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค.
109์๋ ํด๋ ๊ตฌ์กฐ๋ฅผ ์์๋ก ์ดํด๋ณด์ธ์. (ํ๋ ํ์ดํ๋ฅผ ํด๋ฆญํ๋ฉด ํผ์ณ์ง๋๋ค).
1110
1211<details className =" file-tree " >
@@ -54,18 +53,18 @@ Feature-Sliced Design(FSD)์ด **์ ๋ง ํ์ํ์ง ๋จผ์ ํ์ธํ์ธ์.**
5453### ์ ํ์ ๊ณ ๋ คํด์ผ ํ ์งํ
5554
56551 . ์ ๊ท ํ์์ด ํ๋ก์ ํธ์ ์ ์ํ๊ธฐ ์ด๋ ค์ํ๋ ๊ฒฝ์ฐ
57- 2 . ์ฝ๋ ์ผ๋ถ๋ฅผ ์์ ํ ๋, ๊ด๋ จ ์๋ ๋ค๋ฅธ ์ฝ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ** ์ฆ์** ๊ฒฝ์ฐ
56+ 2 . ์ฝ๋ ์ผ๋ถ๋ฅผ ์์ ํ ๋, ๊ด๋ จ ์๋ ๋ค๋ฅธ ์ฝ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ** ์ฆ์** ๊ฒฝ์ฐ
58573 . ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ๊ณ ๋ คํด์ผ ํ ์ฌํญ์ด ๋๋ฌด ๋ง์ ์ด๋ ค์์ ๊ฒช๋ ๊ฒฝ์ฐ
5958
6059** ํ์ ํฉ์ ์์ด FSD ์ ํ์ ์์ํ์ง ๋ง์ธ์.**
61- ํ ๋ฆฌ๋๋ผ๋ ์ ํ์ ์ด์ ์ด ํ์ตยท ์ ํ ๋น์ฉ์ ์ํํ๋ค๋ ์ ์ ๋จผ์ ์ค๋ํด์ผ ํฉ๋๋ค.
60+ ํ ๋ฆฌ๋๋ผ๋ ์ ํ์ ์ด์ ์ด ํ์ต/ ์ ํ ๋น์ฉ์ ์ํํ๋ค๋ ์ ์ ๋จผ์ ์ค๋ํด์ผ ํฉ๋๋ค.
6261๋ํ, ๊ฐ์ ํจ๊ณผ๊ฐ ๋ฐ๋ก ๋์ ๋์ง ์์ ์ ์์ผ๋ฏ๋ก ** ํ์** ๋ฐ ** ํ๋ก์ ํธ ๋งค๋์ (PM)** ์ ์น์ธ์ ์ฌ์ ์ ํ๋ณดํ๊ณ ์ด์ ์ ๊ณต์ ํ์ธ์.
6362
6463:::tip PM ์ค๋ ์ ๊ณ ๋ คํ ์ฌํญ
6564
66- - FSD ์ ํ์ ๋จ๊ณ์ ์ผ๋ก ์งํํ ์ ์์ด ๊ธฐ์กด ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ค๋จํ์ง ์์๋ ๋ฉ๋๋ค.
67- - ๋ช
ํํ ์ํคํ
์ฒ ๊ตฌ์กฐ๋ ์ ๊ท ๊ฐ๋ฐ์ ์จ๋ณด๋ฉ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
68- - ๊ณต์ ๋ฌธ์๋ฅผ ํ์ฉํ๋ฉด ๋ณ๋ ๋ฌธ์ ์ ์งยท๊ด๋ฆฌ ๋น์ฉ์ ์ ๊ฐํ ์ ์์ต๋๋ค.
65+ - FSD ์ ํ์ ๋จ๊ณ์ ์ผ๋ก ์งํํ ์ ์์ด ๊ธฐ์กด ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ค๋จํ์ง ์์๋ ๋ฉ๋๋ค.
66+ - ๋ช
ํํ ์ํคํ
์ฒ ๊ตฌ์กฐ๋ ์ ๊ท ๊ฐ๋ฐ์ ์จ๋ณด๋ฉ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
67+ - ๊ณต์ ๋ฌธ์๋ฅผ ํ์ฉํ๋ฉด ๋ณ๋ ๋ฌธ์ ์ ์งยท๊ด๋ฆฌ ๋น์ฉ์ ์ ๊ฐํ ์ ์์ต๋๋ค.
6968
7069:::
7170
@@ -75,50 +74,48 @@ Feature-Sliced Design(FSD)์ด **์ ๋ง ํ์ํ์ง ๋จผ์ ํ์ธํ์ธ์.**
7574
7675## 1๋จ๊ณ: ํ์ด์ง ๋จ์๋ก ์ฝ๋ ๋ถ๋ฆฌํ๊ธฐ {#divide-code-by-pages}
7776
78- ๋๋ถ๋ถ์ ์ปค์คํ
์ํคํ
์ฒ๋ ๊ท๋ชจ์ ๊ด๊ณ์์ด ์ด๋ฏธ ์ด๋ ์ ๋ ํ์ด์ง ๋จ์๋ก ์ฝ๋๋ฅผ ๋๋๊ณ ์์ต๋๋ค. ` ๐ pages ` ํด๋๊ฐ ์๋ค๋ฉด ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ์ด๋ ๋ฉ๋๋ค.
79-
77+ ๋๋ถ๋ถ์ ์ปค์คํ
์ํคํ
์ฒ๋ ๊ท๋ชจ์ ๊ด๊ณ์์ด ์ด๋ฏธ ์ด๋ ์ ๋ ํ์ด์ง ๋จ์๋ก ์ฝ๋๋ฅผ ๋๋๊ณ ์์ต๋๋ค.
78+ ` ๐ pages ` ํด๋๊ฐ ์๋ค๋ฉด ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ์ด๋ ๋ฉ๋๋ค.
8079
8180์์ ์์ ํด๋์ฒ๋ผ ` ๐ routes ` ๋ง ์๋ค๋ฉด ๋ค์ ์์๋ฅผ ๋ฐ๋ฅด์ธ์.
8281
83- 1 . ` ๐ pages ` ํด๋๋ฅผ ์๋ก ๋ง๋ญ๋๋ค.
84- 2 . ` ๐ routes ` ์ ์๋ ** ํ์ด์ง์ฉ ์ปดํฌ๋ํธ** ๋ฅผ ๊ฐ๋ฅํ ํ ๋ชจ๋ ` ๐ pages ` ํด๋๋ก ์ฎ๊น๋๋ค.
85- 3 . ์ฝ๋๋ฅผ ์ฎ๊ธธ ๋๋ง๋ค ํด๋น ํ์ด์ง ์ ์ฉ ํด๋๋ฅผ ๋ง๋ค๊ณ ๊ทธ ์์ ` index ` ํ์ผ์ ์ถ๊ฐํด entry๋ฅผ ๋
ธ์ถํฉ๋๋ค.
82+ 1 . ` ๐ pages ` ํด๋๋ฅผ ์๋ก ๋ง๋ญ๋๋ค.
83+ 2 . ` ๐ routes ` ์ ์๋ ** ํ์ด์ง์ฉ ์ปดํฌ๋ํธ** ๋ฅผ ๊ฐ๋ฅํ ํ ๋ชจ๋ ` ๐ pages ` ํด๋๋ก ์ฎ๊น๋๋ค.
84+ 3 . ์ฝ๋๋ฅผ ์ฎ๊ธธ ๋๋ง๋ค ํด๋น ํ์ด์ง ์ ์ฉ ํด๋๋ฅผ ๋ง๋ค๊ณ ๊ทธ ์์ ` index.tsx ` ํ์ผ์ ์ถ๊ฐํด ** ์ง์
์ (entry point) ** ๋ฅผ ๋
ธ์ถํฉ๋๋ค.
8685
8786::: note
8887
89- ์ด ๋จ๊ณ์์๋ ** Page A์์ Page B์ ์ฝ๋๋ฅผ import** ํด๋ ๊ด์ฐฎ์ต๋๋ค. ๋์ค ๋จ๊ณ์์ ์ด๋ฌํ ์์กด์ฑ์ ๋ถ๋ฆฌํ ์์ ์ด๋, ์ฐ์ ** ํ์ด์ง ํด๋๋ฅผ ๋ง๋๋ ๊ฒ** ์ ์ง์คํ์ธ์.
88+ ์ด ๋จ๊ณ์์๋ ** Page A์์ Page B์ ์ฝ๋๋ฅผ import** ํด๋ ๊ด์ฐฎ์ต๋๋ค.
89+ ๋์ค ๋จ๊ณ์์ ์ด๋ฌํ ์์กด์ฑ์ ๋ถ๋ฆฌํ ์์ ์ด๋, ์ฐ์ ** ํ์ด์ง ํด๋๋ฅผ ๋ง๋๋ ๊ฒ** ์ ์ง์คํ์ธ์.
9090
9191:::
9292
93- route file:
93+ ** ๐ Route File **
9494
95- ``` js title="src/routes/products.[id].js"
96- export { ProductPage as default } from " src/pages/product"
95+ ``` js title="route file: src/routes/products.[id].js"
96+ export { ProductPage as default } from " src/pages/product" ;
9797```
9898
99- page index file:
99+ ** ๐ Page Index File **
100100
101101``` js title="src/pages/product/index.js"
102- export { ProductPage } from " ./ProductPage.jsx"
102+ export { ProductPage } from " ./ProductPage.jsx" ;
103103```
104104
105- page component file:
105+ ** ๐ Page Component File **
106106
107107``` jsx title="src/pages/product/ProductPage.jsx"
108108export function ProductPage (props ) {
109- return < div / > ;
109+ return < div / > ;
110110}
111111```
112112
113113## 2๋จ๊ณ: ํ์ด์ง ์ธ๋ถ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๊ธฐ {#separate-everything-else-from-pages}
114114
115- 1 . ** ` ๐ src/shared ` ํด๋๋ฅผ ๋ง๋ ๋ค.**
116- - ` ๐ pages ` ๋๋ ` ๐ routes ` ๋ฅผ ** importํ์ง ์๋** ๋ชจ๋ ์ฝ๋๋ฅผ ์ด๊ณณ์ผ๋ก ์ด๋ํ๋ค.
117- 2 . ** ` ๐ src/app ` ํด๋๋ฅผ ๋ง๋ ๋ค.**
118- - ` ๐ pages ` ๋๋ ` ๐ routes ` ๋ฅผ ** importํ๋** ์ฝ๋๋ฅผ ์ด๊ณณ์ผ๋ก ์ฎ๊ธด๋ค. ๋ผ์ฐํธ ํ์ผ๋ ์ฌ๊ธฐ์ ํฌํจํ๋ค.
115+ ** ๐ src/shared ํด๋๋ฅผ ๋ง๋ค๊ณ ,** ๐ pages ๋๋ ๐ routes๋ฅผ importํ์ง ์๋ ๋ชจ๋ (ํ์ผ)์ ์ด ํด๋๋ก ๋ชจ์๋๋ค.
116+ ** ๐ src/app ํด๋๋ฅผ ๋ง๋ค๊ณ ,** ๐ pages ๋๋ ๐ routes๋ฅผ importํ๋ ๋ชจ๋๊ณผ ๋ผ์ฐํธ ์ ์ ํ์ผ์ ์ด ํด๋์ ๋ฐฐ์นํฉ๋๋ค.
119117
120- > ** Shared layer์๋ slice๊ฐ ์๋ค.**
121- > ๋ฐ๋ผ์ segment ๊ฐ import๋ ์์ ๋กญ๋ค.
118+ > ** Shared layer๋ slice ๊ฐ๋
์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์,** ์๋ก ๋ค๋ฅธ segment ๊ฐ์๋ ์์ ๋กญ๊ฒ importํ ์ ์์ต๋๋ค
122119
123120์ด์ ํด๋ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค:
124121
@@ -189,39 +186,40 @@ export function ProductPage(props) {
189186 </ul>
190187</details >
191188
192- ## 3๋จ๊ณ: ํ์ด์ง ๊ฐ์ cross-imports ํด๊ฒฐ {#tackle-cross-imports-between-pages}
189+ ## 3๋จ๊ณ: ํ์ด์ง ๊ฐ cross-imports ํด๊ฒฐ {#tackle-cross-imports-between-pages}
193190
194191<!-- A good way to approach this is by setting up [Steiger][ext-steiger], the linter for FSD. -->
195192<!-- TODO: add instructions once the new config format is standardized -->
196193
197- ํ ํ์ด์ง๊ฐ ๋ค๋ฅธ ํ์ด์ง์ ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๊ณ ์๋ค๋ฉด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์์กด์ฑ์ ์ ๊ฑฐํ๋ค.
198-
199- | ๋ฐฉ๋ฒ | ์ฌ์ฉ ์์ |
200- | ------| -----------|
201- | ** A. ์ฝ๋ ๋ณต์ฌ** | ํ์ด์ง๋ง๋ค ๋ก์ง์ด ๋ฌ๋ผ์ง ๊ฐ๋ฅ์ฑ์ด ์๊ฑฐ๋, ์ฌ์ฌ์ฉ์ฑ์ด ๋ฎ์ ๋ |
202- | ** B. Shared๋ก ์ด๋** | ์ฌ๋ฌ ํ์ด์ง์์ ๊ณตํต์ผ๋ก ์ฐ์ผ ๋ |
194+ ํ ํ์ด์ง๊ฐ ๋ค๋ฅธ ํ์ด์ง์ ์ฝ๋๋ฅผ ์ง์ importํ๊ณ ์๋ค๋ฉด, ์๋ ๋ ๊ฐ์ง ๋ฐฉ์ ์ค ํ๋๋ก ์์กด์ฑ์ ์ ๋ฆฌํฉ๋๋ค.
203195
196+ | ๋ฐฉ๋ฒ | ์ฌ์ฉ ์์ |
197+ | ----------------------------------- | -------------------------------------------------------------- |
198+ | ** A. ์ฝ๋ ๋ณต์ฌํ์ฌ ๋
๋ฆฝ์ํค๊ธฐ** | ํ์ด์ง๋ณ๋ก ๋ก์ง์ด ๋ฌ๋ผ์ง ๊ฐ๋ฅ์ฑ์ด ๋๊ฑฐ๋, ์ฌ์ฌ์ฉ์ฑ์ด ๋ฎ์ ๊ฒฝ์ฐ |
199+ | ** B. Shared๋ก ์ด๋ํ์ฌ ๊ณตํตํํ๊ธฐ** | ์ฌ๋ฌ ํ์ด์ง์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ |
204200
205201- Shared ์ด๋ ์์น ์์
206- - UI ๊ตฌ์ฑ ์์ โ ` ๐ shared/ui `
207- - ์ค์ ์์โโ โ ` ๐ shared/config `
208- - ๋ฐฑ์๋ ํธ์ถโ โ ` ๐ shared/api `
202+ - UI ๊ตฌ์ฑ ์์ โ ` ๐ shared/ui `
203+ - ์ค์ ์์โโ โ ` ๐ shared/config `
204+ - ๋ฐฑ์๋ ํธ์ถโ โ ` ๐ shared/api `
209205
210206::: note
211207
212- ์ฝ๋ ๋ณต์ฌ๋ ์๋ชป์ด ์๋๋ค. ** ์ค๋ณต๋ณด๋ค ์์กด์ฑ ์ต์ํ** ๊ฐ ๋ ์ค์ํ ๋๊ฐ ๋ง๋ค.
213- ๋ค๋ง ๋น์ฆ๋์ค ๋ก์ง์ ์ค๋ณต์ ํผํด์ผ ํ๋ฉฐ, ๋ณต์ฌ ์์๋ DRY ์์น์ ์ผ๋์ ๋๋ค.
208+ ์ฝ๋๋ฅผ ๋ณต์ฌํ๋ ๊ฒ์ ์๋ชป์ด ์๋๋๋ค.
209+ ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ** ์ค๋ณต์ ํ์ฉํ๋๋ผ๋ ํ์ด์ง ๊ฐ ์์กด์ฑ์ ์ค์ด๋ ๊ฒ** ์ด ๋ ์ค์ํฉ๋๋ค.
210+ ๋ค๋ง, ๋น์ฆ๋์ค ๋ก์ง์ฒ๋ผ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ํฐ ํต์ฌ ๋ถ๋ถ์ ์ค๋ณต์ ํผํ๊ณ , ๋ณต์ฌํ ๋์๋ ๊ฐ๋ฅํ ํ DRY ์์น์ ๊ณ ๋ คํฉ๋๋ค.
214211
215212:::
216213
217- ## 4๋จ๊ณ: Shared ๋ ์ด์ด ์ ๋ฆฌํ๊ธฐ {#unpack-shared-layer}
214+ ## 4๋จ๊ณ: Shared Layer ์ ๋ฆฌํ๊ธฐ {#unpack-shared-layer}
218215
219- - ** ํ ํ์ด์ง์์๋ง ์ฐ์ด๋ ์ฝ๋** ๋ ํด๋น ํ์ด์ง ** slice** ๋ก ์ด๋ํ๋ค .
220- - ` actions / reducers / selectors ` ๋ ์์ธ๊ฐ ์๋๋ค. ** ์ฌ์ฉ์ฒ์ ๊ฐ๊น์ด ** ๋๋ ํธ์ด ์ข๋ค.
216+ ** ํ ํ์ด์ง์์๋ง ์ฌ์ฉ๋๋ ์ฝ๋** ๋ ํด๋น ํ์ด์ง์ ** slice** ๋ก ์ด๋ํฉ๋๋ค .
217+ ` actions, reducers, selectors ` ์ญ์ ์์ธ๊ฐ ์๋๋ฉฐ, ** ์ฌ์ฉ๋๋ ์์น์ ๊ฐ๊น์ด ๊ณณ ** ์ ๋๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
221218
222- Shared๋ ๋ชจ๋ layer๊ฐ ์์กดํ ์ ์๋ ** ๊ณตํต ์์กด์ ** ์ด๋ฏ๋ก, ์ฝ๋๋ฅผ ์ต์ํํด ๋ณ๊ฒฝ ์ํ์ ๋ฎ์ถ๋ค.
219+ Shared๋ ๋ชจ๋ layer๊ฐ ์์กดํ ์ ์๋ ** ๊ณตํต ์์กด ์ง์ ์ด** ๊ธฐ ๋๋ฌธ์,
220+ ์ด๊ณณ์ ์ฝ๋๋ฅผ ๊ณผ๋ํ๊ฒ ์์๋์ง ์๊ณ ์ต์ํ์ผ๋ก ์ ์งํ๋ ๊ฒ์ด ๋ณ๊ฒฝ ์ํ์ ์ค์ด๋ ํต์ฌ ์์น์
๋๋ค.
223221
224- ์ต์ข
ํด๋ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค :
222+ ์ด ๋จ๊ณ๋ฅผ ๋ง์น๋ฉด ํด๋ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ์ ํํ๊ฐ ๋๋ ๊ฒ์ด ์์ฐ์ค๋ฝ์ต๋๋ค :
225223
226224<details className =" file-tree " open >
227225 <summary>๐ src</summary>
@@ -280,49 +278,45 @@ Shared๋ ๋ชจ๋ layer๊ฐ ์์กดํ ์ ์๋ **๊ณตํต ์์กด์ **์ด๋ฏ๋ก,
280278
281279## 5๋จ๊ณ: ๊ธฐ์ ์ ๋ชฉ์ ๋ณ segment ์ ๋ฆฌ {#organize-by-technical-purpose}
282280
283-
284- | segment | ์ฉ๋ ์์ |
285- | ----------| -----------|
286- | ` ui ` | Components, formatters, styles |
287- | ` api ` | Backend requests, DTOs, mappers |
288- | ` model ` | Store, schema, business logic |
289- | ` lib ` | Shared utilities / helpers |
281+ | segment | ์ฉ๋ ์์ |
282+ | -------- | ---------------------------------- |
283+ | ` ui ` | Components, formatters, styles |
284+ | ` api ` | Backend requests, DTOs, mappers |
285+ | ` model ` | Store, schema, business logic |
286+ | ` lib ` | Shared utilities / helpers |
290287| ` config ` | Configuration files, feature flags |
291288
289+ > ** ๋ฌด์์ธ์ง** ๊ฐ ์๋๋ผ ** ๋ฌด์์ ์ํด ์กด์ฌํ๋์ง** ๋ฅผ ๊ธฐ์ค์ผ๋ก ํด๋๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
290+ > ๋ฐ๋ผ์ ` components ` , ` utils ` , ` types ` ์ฒ๋ผ ๋ชฉ์ ์ด ๋ชจํธํ ํด๋ ์ด๋ฆ์ ์ง์ํฉ๋๋ค.
292291
293- > โ** ๋ฌด์์ธ์ง** โ๊ฐ ์๋๋ผ โ** ๋ฌด์์ ์ํด** โ ์กด์ฌํ๋์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋๋ค.
294- > ๋ฐ๋ผ์ ` components ` , ` utils ` , ` types ` ๊ฐ์ ์ด๋ฆ์ ์ง์ํ๋ค.
295-
296- 1 . ** ๊ฐ ํ์ด์ง** ์ ` ui / model / api ` ๋ฑ ํ์ํ segment๋ฅผ ๋ง๋ ๋ค.
297- 2 . ** Shared** ํด๋๋ฅผ ์ ๋ฆฌํ๋ค.
298- - ` componentsยทcontainers ` โ ` shared/ui `
299- - ` helpersยทutils ` โโ ` shared/lib ` (๊ธฐ๋ฅ๋ณ ๊ทธ๋ฃนํ ํ)
300- - ` constants ` โโ ` shared/config `
301-
292+ 1 . ** ๊ฐ ํ์ด์ง ๋ด๋ถ** ์์, ํ์ํ ` segment(ui, model, api ๋ฑ) ` ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
293+ 2 . ** Shared ํด๋๋ ๊ณตํต ๊ธฐ๋ฅ๋ง ๋จ๊ธฐ๋๋ก ์ ๋ฆฌํฉ๋๋ค.**
294+ - ` components/containers ` โ ` shared/ui `
295+ - ` helpers/utils ` โโ ` shared/lib ` (๊ธฐ๋ฅ๋ณ ๊ทธ๋ฃนํ ํ)
296+ - ` constants ` โโ ` shared/config `
302297
303298## ์ ํ ๋จ๊ณ {#optional-steps}
304299
305300### 6๋จ๊ณ: ์ฌ๋ฌ ํ์ด์ง์์ ์ฌ์ฌ์ฉ๋๋ Redux slice๋ฅผ Entities / Features layer๋ก ๋ถ๋ฆฌํ๊ธฐ {#form-entities-features-from-redux}
306301
307- - ์ฌ๋ฌ ํ์ด์ง์์ ์ฌ์ฌ์ฉ๋๋ Redux ** slice** ๋ ์ฃผ๋ก ** product, user** ๊ฐ์ ** business entity** ๋ฅผ ํํํฉ๋๋ค.
308- ์ด ๊ฒฝ์ฐ ** Entities layer** ๋ก ์ฎ๊ธฐ๊ณ , ** entity** ๋ง๋ค ํด๋๋ฅผ ํ๋์ฉ ๋ง๋ญ๋๋ค .
309- - ๋๊ธ ์์ฑ์ฒ๋ผ ** ์ฌ์ฉ์ ํ๋(action)** ์ ๋ค๋ฃจ๋ ** slice** ๋ ** Features layer** ๋ก ์ด๋ํฉ๋๋ค .
302+ ์ฌ๋ฌ ํ์ด์ง์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ Redux ** slice** ๋ ๋๋ถ๋ถ ** product, user** ์ฒ๋ผ ๋ช
ํํ ** business entity** ๋ฅผ ํํํฉ๋๋ค.
303+ ์ด๋ฌํ slice๋ ** Entities layer** ๋ก ์ด๋ํ๋ฉฐ , ** entity** ๋ง๋ค ๋ณ๋์ ํด๋๋ฅผ ๊ตฌ์ฑํฉ๋๋ค .
304+ ๋ฐ๋๋ก, ๋๊ธ ์์ฑ์ฒ๋ผ ** ์ฌ์ฉ์์ ํน์ ํ๋(action)** ์ ์ค์ฌ์ผ๋ก ํ ** slice** ๋ ** Features layer** ๋ก ์ฎ๊ฒจ ๋
๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค .
310305
311- ** Entities** ์ ** Features** ๋ ์๋ก ๋
๋ฆฝ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค .
312- Entitles ๊ฐ ์ฐ๊ฒฐ์ด ํ์ํ๋ฉด [ Business-Entities Cross-Relations ๊ฐ์ด๋] [ business-entities-cross-relations ] ๋ฅผ ์ฐธ๊ณ ํ์ธ์ .
313- ํด๋น ** slice** ์ ์ฐ๊ด๋ API ํจ์๋ ` ๐ shared/api ` ์ ๊ทธ๋๋ก ๋์ด๋ ๋ฌด๋ฐฉํฉ๋๋ค .
306+ ** Entities** ์ ** Features** ๋ ์๋ก ์์กดํ์ง ์๊ณ ์ฌ์ฉํ ์ ์๋๋ก ์ค๊ณํด์ผ ํฉ๋๋ค .
307+ Entity ๊ฐ์ ๊ด๊ณ๊ฐ ํ์ํ๋ค๋ฉด [ Business-Entities Cross-Relations ๊ฐ์ด๋] [ business-entities-cross-relations ] ๋ฅผ ์ฐธ๊ณ ํด ๊ตฌ์กฐํํ๋ฉด ๋ฉ๋๋ค .
308+ ํด๋น ** slice** ์ ์ฐ๊ด๋ API ํจ์๋ ` ๐ shared/api ` ์ ๊ทธ๋๋ก ๋์ด๋ ๊ด์ฐฎ์ต๋๋ค .
314309
315310### 7๋จ๊ณ: modules ํด๋ ๋ฆฌํฉํฐ๋ง {#refactor-your-modules}
316311
317- ` ๐ modules ` ๋ ๊ณผ๊ฑฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ชจ์ ๋๋ ๊ณณ์ผ๋ก , ์ฑ๊ฒฉ์ ** Features layer** ์ ๋น์ทํฉ๋๋ค.
318- ๋จ , ์ฑ Header์ฒ๋ผ ** large UI block** (์: global Header, Sidebar)์ด๋ผ๋ฉด ** Widgets layer** ๋ก ์ฎ๊ธฐ๋ ํธ์ด ์ข์ต๋๋ค.
312+ ` ๐ modules ` ๋ ๊ณผ๊ฑฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ชจ์๋๋ ๊ณต๊ฐ์ผ๋ก , ์ฑ๊ฒฉ์ ** Features layer** ์ ๋น์ทํฉ๋๋ค.
313+ ๋ค๋ง , ์ฑ Header์ฒ๋ผ ** large UI block** (์: global Header, Sidebar)์ด๋ผ๋ฉด ** Widgets layer** ๋ก ์ฎ๊ธฐ๋ ํธ์ด ์ข์ต๋๋ค.
319314
320315### 8๋จ๊ณ: shared/ui์ presentational UI ๊ธฐ๋ฐ ๋ง๋ จํ๊ธฐ {#form-clean-ui-foundation}
321316
322317` ๐ shared/ui ` ์๋ ๋น์ฆ๋์ค ๋ก์ง์ด ์ ํ ์๋, ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ presentational UI ์ปดํฌ๋ํธ๋ง ๋จ๊ฒจ์ผ ํฉ๋๋ค.
323-
324- - ๊ธฐ์กด ` ๐ components ` ยท ` ๐ containers ` ์ ์๋ ์ปดํฌ๋ํธ์์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํด ์์ layer๋ก ์ด๋ํฉ๋๋ค.
325- - ์ฌ๋ฌ ๊ณณ์์ ์ฐ์ด์ง ์๋ ๋ถ๋ถ์ ** ๋ณต์ฌ(paste)** ํด์ ๊ฐ layer์์ ๋
๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํด๋ ๊ด์ฐฎ์ต๋๋ค.
318+ ๊ธฐ์กด ` ๐ components / ๐ containers ` ์ ์๋ ์ปดํฌ๋ํธ์์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํด ์์ layer๋ก ์ด๋์ํต๋๋ค.
319+ ์ฌ๋ฌ ๊ณณ์์ ์ฐ์ด์ง ์๋ ๋ถ๋ถ์ ** ๋ณต์ฌ(paste)** ํด์ ๊ฐ layer์์ ๋
๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํด๋ ๋ฌธ์ ์์ต๋๋ค.
326320
327321## ์ฐธ๊ณ ์๋ฃ {#see-also}
328322
0 commit comments