Skip to content

Commit 1089075

Browse files
committed
docs: Improve FAQ from-custom in kr documentation
1 parent 82c99c3 commit 1089075

File tree

1 file changed

+64
-70
lines changed
  • i18n/kr/docusaurus-plugin-content-docs/current/guides/migration

1 file changed

+64
-70
lines changed

โ€Ži18n/kr/docusaurus-plugin-content-docs/current/guides/migration/from-custom.mdโ€Ž

Lines changed: 64 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -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

5655
1. ์‹ ๊ทœ ํŒ€์›์ด ํ”„๋กœ์ ํŠธ์— ์ ์‘ํ•˜๊ธฐ ์–ด๋ ค์›Œํ•˜๋Š” ๊ฒฝ์šฐ
57-
2. ์ฝ”๋“œ ์ผ๋ถ€๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ, ๊ด€๋ จ ์—†๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ **์žฆ์€** ๊ฒฝ์šฐ
56+
2. ์ฝ”๋“œ ์ผ๋ถ€๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ, ๊ด€๋ จ ์—†๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ **์žฆ์€** ๊ฒฝ์šฐ
5857
3. ์ƒˆ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ๋„ˆ๋ฌด ๋งŽ์•„ ์–ด๋ ค์›€์„ ๊ฒช๋Š” ๊ฒฝ์šฐ
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"
108108
export 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

Comments
ย (0)