@@ -3,181 +3,211 @@ sidebar_position: 1
33pagination_next : reference/slices-segments
44---
55
6- import useBaseUrl from ' @docusaurus/useBaseUrl' ;
6+ import useBaseUrl from " @docusaurus/useBaseUrl" ;
77
88# Layer
99
10- Layer๋ Feature-Sliced Design์์ ** ์ฝ๋๋ฅผ ๊ตฌ๋ถํ๋ ๊ฐ์ฅ ํฐ ๋ฒ์** ์
๋๋ค.
11- ์ฝ๋๋ฅผ ๋๋ ๋๋ ๊ฐ ๋ถ๋ถ์ด ** ์ด๋ค ๊ธฐ๋ฅ์ ๋ด๋นํ๋์ง** ์ ** ๋ค๋ฅธ ์ฝ๋์ ์ผ๋ง๋ ์์กดํ๋์ง** ๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
12- Layer๋ง๋ค ** ์ด๋ค ์ญํ ์ ๋งก๋์ง** ์ ๋ํ ๊ณตํต๋ ์๋ฏธ๊ฐ ์์ต๋๋ค.
13-
14- ์ด ** 7๊ฐ์ Layer** ๊ฐ ์์ผ๋ฉฐ, ** ๋ด๋น ๊ธฐ๋ฅ๊ณผ ์์กด์ฑ์ด ๋ง์ ๊ฒ** ๋ถํฐ ** ์ ์ ๊ฒ** ์์ผ๋ก ๋์ดํฉ๋๋ค.
15-
16- <img src = { useBaseUrl (" /img/layers/folders-graphic-light.svg#light-mode-only" )} width = " 180" style = { { float: " right" , margin: " 0 1em" }} alt = " A file system tree, with a single root folder called src and then seven subfolders: app, processes, pages, widgets, features, entities, shared. The processes folder is slightly faded out." />
17- <img src = { useBaseUrl (" /img/layers/folders-graphic-dark.svg#dark-mode-only" )} width = " 180" style = { { float: " right" , margin: " 0 1em" }} alt = " A file system tree, with a single root folder called src and then seven subfolders: app, processes, pages, widgets, features, entities, shared. The processes folder is slightly faded out." />
18-
19- 1 . App
20- 2 . Processes (deprecated)
21- 3 . Pages
22- 4 . Widgets
23- 5 . Features
24- 6 . Entities
10+ Layer๋ Feature-Sliced Design์์ ์ฝ๋๋ฅผ ๋๋ ๋ ์ฌ์ฉํ๋ ** ๊ฐ์ฅ ํฐ ๊ตฌ๋ถ ๋จ์** ์
๋๋ค.
11+ ์ฝ๋๋ฅผ ๋๋ ๋๋ ๊ฐ ๋ถ๋ถ์ด ** ์ด๋ค ์ญํ ์ ๋งก๋์ง** , ๊ทธ๋ฆฌ๊ณ ** ๋ค๋ฅธ ์ฝ๋์ ์ผ๋ง๋ ์์กดํ๋์ง** ๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค.
12+ ๊ฐ Layer๋ ** ์ด Layer์๋ ์ด๋ค ์ฝ๋๊ฐ ์์ผ ํ๋์ง** ์ ๋ํด ** ๊ณตํต๋ ์๋ฏธ์ ์ฑ
์** ์ด ์ ํด์ ธ ์์ต๋๋ค.
13+
14+ ์ด ** 7๊ฐ์ Layer** ๊ฐ ์์ผ๋ฉฐ, ์๋๋ก ๋ด๋ ค๊ฐ์๋ก ** ๋ด๋นํ๋ ๊ธฐ๋ฅ๊ณผ ์์กด์ฑ์ด ์ค์ด๋๋ ์์** ์
๋๋ค.
15+
16+ <img
17+ src = { useBaseUrl (" /img/layers/folders-graphic-light.svg#light-mode-only" )}
18+ width = " 180"
19+ style = { { float: " right" , margin: " 0 1em" }}
20+ alt = " A file system tree, with a single root folder called src and then seven subfolders: app, processes, pages, widgets, features, entities, shared. The processes folder is slightly faded out."
21+ />
22+ <img
23+ src = { useBaseUrl (" /img/layers/folders-graphic-dark.svg#dark-mode-only" )}
24+ width = " 180"
25+ style = { { float: " right" , margin: " 0 1em" }}
26+ alt = " A file system tree, with a single root folder called src and then seven subfolders: app, processes, pages, widgets, features, entities, shared. The processes folder is slightly faded out."
27+ />
28+
29+ 1 . App
30+ 2 . Processes (deprecated)
31+ 3 . Pages
32+ 4 . Widgets
33+ 5 . Features
34+ 6 . Entities
25357 . Shared
2636
27- > ๋ชจ๋ Layer๋ฅผ ๊ผญ ์จ์ผ ํ๋ ๊ฑด ์๋๋๋ค. ** ํ์ํ ๋๋ง** ์ถ๊ฐํ์ธ์.
28- > ๋๋ถ๋ถ์ ํ๋ก ํธ์๋ ํ๋ก์ ํธ๋ ์ต์ํ ` shared ` , ` page ` , ` app ` ์ ํฌํจํฉ๋๋ค.
37+ > ๋ชจ๋ Layer๋ฅผ ๋ฐ๋์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒ์ ์๋๋๋ค.
38+ > ** ํ์ํ ๊ฒฝ์ฐ์๋ง** Layer๋ฅผ ์ถ๊ฐํ์ธ์.
39+ > ๋๋ถ๋ถ์ ํ๋ก ํธ์๋ ํ๋ก์ ํธ๋ ๋ณดํต ์ต์ํ ` shared ` , ` page ` , ` app ` ์ ๋๋ ์ฌ์ฉํฉ๋๋ค.
2940
30- ์ค๋ฌด์์๋ ํด๋๋ช
์ ์๋ฌธ์๋ก ์์ฑํฉ๋๋ค(์: ` ๐ shared ` , ` ๐ page ` , ` ๐ app ` ).
31- ** ์๋ก์ด Layer๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค** (์ญํ ์ด ์ด๋ฏธ ํ์คํ๋์ด ์์).
41+ ์ค๋ฌด์์๋ ํด๋๋ช
์ ๋ณดํต ์๋ฌธ์๋ก ์์ฑํฉ๋๋ค. (์: ` ๐ shared ` , ` ๐ page ` , ` ๐ app ` )
42+ ๋ํ, ** ์๋ก์ด Layer๋ฅผ ์ง์ ์ ์ํด์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.**
43+ (๊ฐ Layer์ ์ญํ ์ด ์ด๋ฏธ ํ์ค์ผ๋ก ์ถฉ๋ถํ ์ ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.)
3244
3345## Import ๊ท์น
3446
35- Layer๋ ** Slice(์๋ก ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋ ๋ชจ๋ ๋ฌถ์)** ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
36- Slice ๊ฐ ์ฐ๊ฒฐ์ ** Layer Import ๊ท์น** ์ผ๋ก ์ ํํฉ๋๋ค.
47+ ๊ฐ Layer๋ ์ฌ๋ฌ ๊ฐ์ ** Slice(์๋ก ๋ฐ์ ํ๊ฒ ์ฐ๊ด๋ ๋ชจ๋ ๋ฌถ์)** ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
48+ Slice๋ค ์ฌ์ด์ ์ฐ๊ฒฐ์ ** Layer Import ๊ท์น** ์ ํตํด ์ ํํฉ๋๋ค.
49+
50+ > ** ๊ท์น:**
51+ > ํ๋์ Slice ์์์ ์์ฑ๋ ์ฝ๋๋
52+ > ** ์์ ์ด ์ํ Layer๋ณด๋ค ์๋ Layer** ์ ์๋ * ๋ค๋ฅธ Slice* ๋ง importํ ์ ์์ต๋๋ค.
3753
38- > ** ๊ท์น ** : Slice ์์ ์ฝ๋๋ ** ์์ ๋ณด๋ค ์๋ Layer ** ์ * ๋ค๋ฅธ Slice * ๋ง Importํ ์ ์์ต๋๋ค .
54+ ์๋ฅผ ๋ค์ด, ` ๐ ~/features/aaa/api/request.ts ` ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค .
3955
40- ์: ` ๐ ~/features/aaa/api/request.ts ` ๋
41- - ๊ฐ์ Layer์ ` ๐ ~/features/bbb ` โ ** ๋ถ๊ฐ๋ฅ**
42- - ๋ ์๋ Layer(` ๐ ~/entities ` , ` ๐ ~/shared ` ) โ ** ๊ฐ๋ฅ**
43- - ๊ฐ์ Slice(` ๐ ~/features/aaa/lib/cache.ts ` ) โ ** ๊ฐ๋ฅ**
56+ - ๊ฐ์ Layer์ ` ๐ ~/features/bbb ` โ ** import ๋ถ๊ฐ๋ฅ**
57+ - ๋ ์๋ Layer(` ๐ ~/entities ` , ` ๐ ~/shared ` ) โ ** import ๊ฐ๋ฅ**
58+ - ๊ฐ์ Slice(` ๐ ~/features/aaa/lib/cache.ts ` ) โ ** import ๊ฐ๋ฅ**
4459
45- ` app ` ๊ณผ ` shared ` ๋ ** ์์ธ** ์
๋๋ค.
46- ๋ Layer๋ ** Layer์ด๋ฉด์ ๋์์ ํ๋์ ํฐ Slice์ฒ๋ผ ๋์** ํ๊ณ , ๋ด๋ถ๋ ** Segment** ๋ก ๋๋๋๋ค.
47- ์ด ๊ฒฝ์ฐ Segment๋ผ๋ฆฌ ์์ ๋กญ๊ฒ Importํ ์ ์์ต๋๋ค.
48- (` shared ` ๋ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ด ์๊ณ , ` app ` ์ ๋ชจ๋ ๋๋ฉ์ธ์ ๋ฌถ๋ ์ญํ ์ ํฉ๋๋ค.)
60+ ` app ` ๊ณผ ` shared ` ๋ ์กฐ๊ธ ํน์ดํ Layer์
๋๋ค.
61+ ๋ Layer๋ ** Layer์ด๋ฉด์ ๋์์ ํ๋์ ํฐ Slice์ฒ๋ผ ๋์** ํ๊ณ ๋ด๋ถ ๊ตฌ์กฐ๋ ** Segment** ๋ก ๋๋ฉ๋๋ค.
62+
63+ ์ด ๊ฒฝ์ฐ์๋ Layer ๋ด๋ถ์์ Segment๋ผ๋ฆฌ๋ ์์ ๋กญ๊ฒ importํ ์ ์์ต๋๋ค.
64+ (` shared ` ๋ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ด ์๊ณ , ` app ` ์ ๋ชจ๋ ๋๋ฉ์ธ์ ๋ฌถ๋ ์์ ์กฐ์ ์ ์ญํ ์ ํฉ๋๋ค.)
4965
5066## Layer๋ณ ์ญํ
5167
52- ๊ฐ Layer๊ฐ ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๋ค ์ฝ๋๋ฅผ ํฌํจํ๋์ง ์ ๋ฆฌํ์ต๋๋ค.
68+ ์ด์ ๊ฐ Layer๊ฐ ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ์ง๋์ง,
69+ ๊ทธ๋ฆฌ๊ณ ๋ณดํต ์ด๋ค ์ข
๋ฅ์ ์ฝ๋๊ฐ ํด๋น Layer์ ๋ค์ด์ค๋์ง ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
5370
5471### Shared
5572
56- ์ฑ์ ** ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์** ๋ฅผ ๋ชจ์๋ก๋๋ค.
57- ๋ฐฑ์๋, ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์คํ ํ๊ฒฝ๊ณผ์ ์ฐ๊ฒฐ, ๊ทธ๋ฆฌ๊ณ ** ๋์ ์์ง๋์ ๋ด๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ** ๋ฅผ ํฌํจํฉ๋๋ค.
58-
59- - ` app ` ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ** Slice ์์ด Segment๋ก๋ง ๊ตฌ์ฑ** ํฉ๋๋ค.
60- - ๋น์ฆ๋์ค ๋๋ฉ์ธ์ด ์์ผ๋ฏ๋ก ** Shared ์์ ํ์ผ๋ผ๋ฆฌ๋ ์์ ๋กญ๊ฒ Import** ํ ์ ์์ต๋๋ค.
61-
62- Segment ์์
63- - ` ๐ api ` โ API ํด๋ผ์ด์ธํธ์ ๋ฐฑ์๋ ์์ฒญ ํจ์
64- - ` ๐ ui ` โ ๊ณตํต UI ์ปดํฌ๋ํธ
65- - ** ๋น์ฆ๋์ค ๋ก์ง ์ ์ธ** , ** ๋ธ๋๋ ํ
๋ง ์ ์ฉ ๊ฐ๋ฅ**
66- - ๋ก๊ณ , ๋ ์ด์์, ์๋์์ฑ/๊ฒ์์ฐฝ ๋ฑ UI ๋ก์ง ํฌํจ ๊ฐ๋ฅ
67- - ์๋์์ฑ/๊ฒ์์ฐฝ ๋ฑ ** UI ๋ก์ง ์ปดํฌ๋ํธ** ๋ ๊ฐ๋ฅ
68- - ` ๐ lib ` โ ๋ด๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
69- - ๋จ์ ` utils/helpers ` ๋ชจ์์ด ์๋ ([ ์ด ๊ธ ์ฐธ๊ณ ] [ ext-sova-utility-dump ] )
70- - ํ๋์ ์ฃผ์ (๋ ์ง, ์์, ํ
์คํธ ๋ฑ)์ ์ง์ค
71- - README๋ก ์ญํ ๊ณผ ๋ฒ์๋ฅผ ๋ฌธ์ํ
73+ Shared Layer๋ ์ฑ์ ** ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์์ ๊ธฐ๋ฐ ๋๊ตฌ๋ค์ ๋ชจ์๋๋ ๊ณณ** ์
๋๋ค.
74+ ๋ฐฑ์๋, ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์คํ ํ๊ฒฝ๊ณผ์ ์ฐ๊ฒฐ,
75+ ๊ทธ๋ฆฌ๊ณ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํ๋ ** ์์ง๋ ๋์ ๋ด๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ** ๊ฐ ์ฌ๊ธฐ์ ์์นํฉ๋๋ค.
76+
77+ ` app ` ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ** Slice ์์ด Segment๋ก๋ง ๊ตฌ์ฑ** ํฉ๋๋ค.
78+ ๋น์ฆ๋์ค ๋๋ฉ์ธ์ด ์๊ธฐ ๋๋ฌธ์, ** Shared ๋ด๋ถ์ ํ์ผ๋ค์ ์๋ก ์์ ๋กญ๊ฒ import** ํ ์ ์์ต๋๋ค.
79+
80+ Segment ์์:
81+
82+ - ` ๐ api ` โ API ํด๋ผ์ด์ธํธ์ ๊ณตํต ๋ฐฑ์๋ ์์ฒญ ํจ์
83+ - ` ๐ ui ` โ ๊ณตํต UI ์ปดํฌ๋ํธ
84+ - ** ๋น์ฆ๋์ค ๋ก์ง์ ํฌํจํ์ง ์์ง๋ง** , ** ๋ธ๋๋ ํ
๋ง๋ ์ ์ฉ ๊ฐ๋ฅ**
85+ - ๋ก๊ณ , ๋ ์ด์์, ์๋์์ฑ/๊ฒ์์ฐฝ ๋ฑ ** UI ์์ฒด ๋ก์ง** ์ ํฌํจํ๋ ์ปดํฌ๋ํธ๋ ํ์ฉ
86+ - ` ๐ lib ` โ ๋ด๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
87+ - ๋จ์ํ ` utils/helpers ` ๋ฅผ ๋ชจ์๋๋ ํด๋๊ฐ ์๋๋๋ค. ([ ์ด ๊ธ ์ฐธ๊ณ ] [ ext-sova-utility-dump ] )
88+ - ๋ ์ง, ์์, ํ
์คํธ ๋ฑ ** ํ๋์ ์ฃผ์ ์ ์ง์ค** ํด์ผ ํฉ๋๋ค.
89+ - README๋ฅผ ํตํด ์ญํ ๊ณผ ๋ฒ์๋ฅผ ๋ฌธ์ํํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
7290- ` ๐ config ` โ ํ๊ฒฝ๋ณ์, ์ ์ญ Feature Flag
7391- ` ๐ routes ` โ ๋ผ์ฐํธ ์์/ํจํด
7492- ` ๐ i18n ` โ ๋ฒ์ญ ์ค์ , ์ ์ญ ๋ฌธ์์ด
7593
76- > Segment ์ด๋ฆ์ ** ๋ฌด์์ ํ๋ ํด๋์ธ์ง ** ๋๋ฌ๋์ผ ํฉ๋๋ค.
77- > ` components ` , ` hooks ` , ` types ` ์ฒ๋ผ ์ญํ ์ด ๋ถ๋ช
ํํ ์ด๋ฆ์ ํผํ์ธ์.
94+ > Segment ์ด๋ฆ์ ** ์ด ํด๋๊ฐ ๋ฌด์์ ํ๋์ง ** ๋ฅผ ๋ช
ํํ๊ฒ ๋๋ฌ๋ด์ผ ํฉ๋๋ค.
95+ > ` components ` , ` hooks ` , ` types ` ์ฒ๋ผ ์ญํ ์ด ๋ชจํธํ ์ด๋ฆ์ ๊ฐ๊ธ์ ํผํ์ธ์.
7896
7997### Entities
8098
81- ํ๋ก์ ํธ์์ ๋ค๋ฃจ๋ ** ํต์ฌ ๋ฐ์ดํฐ ๊ฐ๋
** ์ ๋ํ๋
๋๋ค .
82- ๋น์ฆ๋์ค ์ฉ์ด(์: ` User ` , ` Post ` , ` Product ` )์ ์ผ์นํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค .
99+ Entities Layer๋ ํ๋ก์ ํธ์์ ๋ค๋ฃจ๋ ** ํต์ฌ ๋น์ฆ๋์ค ๊ฐ๋
** ์ ํํํฉ๋๋ค .
100+ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ์ค์ ๋๋ฉ์ธ ์ฉ์ด(์: ` User ` , ` Post ` , ` Product ` )์ ์ผ์นํฉ๋๋ค .
83101
84- Entity Slice์๋ ๋ค์์ ํฌํจํ ์ ์์ต๋๋ค:
102+ ๊ฐ Entity Slice์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ํฌํจํ ์ ์์ต๋๋ค.
85103
86- ๊ตฌ์ฑ
87- - ` ๐ model ` โ ๋ฐ์ดํฐ ์ํ์ ๊ฒ์ฆ ์คํค๋ง
88- - ` ๐ api ` โ ํด๋น Entity์ API ์์ฒญ
89- - ` ๐ ui ` โ Entity์ ์๊ฐ์ ํํ
90- - ์์ ํ UI ๋ธ๋ก์ด ์๋์ด๋ ๋จ
91- - ์ฌ๋ฌ ํ์ด์ง์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ์ค๊ณ
92- - ๋น์ฆ๋์ค ๋ก์ง์ props/slot์ผ๋ก ์ฐ๊ฒฐ ๊ถ์ฅ
104+ ๊ตฌ์ฑ:
93105
106+ - ` ๐ model ` โ ๋ฐ์ดํฐ ์ํ, ๋๋ฉ์ธ ๋ก์ง, ๊ฒ์ฆ ์คํค๋ง
107+ - ` ๐ api ` โ ํด๋น Entity์ ๊ด๋ จ๋ API ์์ฒญ
108+ - ` ๐ ui ` โ Entity์ ์๊ฐ์ ํํ
109+ - ์์ฑ๋ ํฐ UI ๋ธ๋ก์ด ์๋์ด๋ ๋ฉ๋๋ค.
110+ - ์ฌ๋ฌ ํ์ด์ง์์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํํ๋ก ์ค๊ณํฉ๋๋ค.
111+ - ๋น์ฆ๋์ค ๋ก์ง์ ๊ฐ๋ฅํ๋ฉด props/slot์ผ๋ก ์ธ๋ถ์์ ์ฃผ์
ํ๋ ๋ฐฉ์์ ๊ถ์ฅํฉ๋๋ค.
94112
95113#### Entity ๊ฐ ๊ด๊ณ
96114
97- ์์น์ ์ผ๋ก Slice๋ผ๋ฆฌ๋ ์๋ก ๋ชจ๋ฅด๋ฉด ์ข์ต๋๋ค.
98- ํ์ง๋ง ํ์ค์ ์ผ๋ก ** ๋ค๋ฅธ Entity๋ฅผ ํฌํจ** ํ๊ฑฐ๋ ** ์ํธ์์ฉ** ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
99- ์ด๋๋ ๋ก์ง์ ** ์์ Layer(Feature/Page)** ๋ก ์ฌ๋ ค ์ฒ๋ฆฌํ์ธ์.
115+ ์์น์ ์ผ๋ก๋ Entity Slice๋ผ๋ฆฌ๋ ์๋ก ** ์๋ก๋ฅผ ๋ชจ๋ฅด๋ ์ํ** ๊ฐ ์ด์์ ์
๋๋ค.
116+ ํ์ง๋ง ์ค์ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ํ Entity๊ฐ ๋ค๋ฅธ Entity๋ฅผ ** ํฌํจํ๊ฑฐ๋**
117+ ์ฌ๋ฌ Entity๊ฐ ์๋ก ** ์ํธ์์ฉ** ํ๋ ์ผ์ด ์์ฃผ ๋ฐ์ํฉ๋๋ค.
118+
119+ ์ด๋ฐ ๊ฒฝ์ฐ, ๋ Entity ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ํธ์์ฉ ๋ก์ง์
120+ ** ์์ Layer(Feature ๋๋ Page)** ๋ก ์ฌ๋ ค์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
100121
101- ๋ง์ฝ ํ Entity ๋ฐ์ดํฐ์ ๋ค๋ฅธ Entity๊ฐ ํฌํจ๋๋ค๋ฉด ,
102- ` @x ` ํ๊ธฐ๋ฅผ ์ฌ์ฉํด ** ๊ต์ฐจ Public API** ๋ก ์ฐ๊ฒฐ์ ๋ช
์์ ์ผ๋ก ๋๋ฌ๋ด์ธ์ .
122+ ๋ง์ฝ ํ Entity์ ๋ฐ์ดํฐ ์์ ๋ค๋ฅธ Entity๊ฐ ํฌํจ๋์ด์ผ ํ๋ค๋ฉด ,
123+ ` @x ` ํ๊ธฐ๋ฒ์ ์ฌ์ฉํด ** ๊ต์ฐจ Public API** ๋ฅผ ํตํด ์ฐ๊ฒฐ๋์์์ ๋ช
์ํด ์ฃผ์ธ์ .
103124
104125``` ts title="entities/artist/model/artist.ts"
105126import type { Song } from " entities/song/@x/artist" ;
106127
107128export interface Artist {
108- name: string ;
109- songs: Array <Song >;
129+ name: string ;
130+ songs: Array <Song >;
110131}
111132```
112133
113- ์์ธํ ๋ด์ฉ์ [ Cross-Import๋ฅผ ์ํ Public API] [ public-api-for-cross-imports ] ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
134+ ์์ธํ ๋ด์ฉ์ [ Cross-Import๋ฅผ ์ํ Public API] [ public-api-for-cross-imports ] ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
114135
115136### Feature
116137
117- ์ฌ์ฉ์๊ฐ ์ฑ์์ ์ํํ๋ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ด์ต๋๋ค.
118- ๋ณดํต ํน์ Entity์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
138+ Features Layer์๋ ** ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ํํ๋ ์ฃผ์ ๊ธฐ๋ฅ** ์ด ๋ค์ด๊ฐ๋๋ค.
139+ ๋ณดํต ํ๋ ์ด์์ Entity์ ์ฐ๊ด๋์ด ๋์ํฉ๋๋ค.
140+
141+ - ๋ชจ๋ ๋์์ ๋ฌด์กฐ๊ฑด Feature๋ก ๋ง๋ค ํ์๋ ์์ต๋๋ค.
142+ - ** ์ฌ๋ฌ ํ์ด์ง์์ ์ฌ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ** ์ผ ๋ Feature๋ก ์ถ์ถํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
143+ - ์: ์ฌ๋ฌ ์ข
๋ฅ์ ์๋ํฐ์์ ๋์ผํ ๋๊ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค๋ฉด, ` comments ` ๋ฅผ Feature๋ก ๋ง๋ค ์ ์์ต๋๋ค.
144+ - Feature๊ฐ ๋๋ฌด ๋ง์์ง๋ฉด, ์ค์ํ ๊ธฐ๋ฅ์ด ์ด๋ ์๋์ง ์ฐพ๊ธฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
119145
120- - ๋ชจ๋ ๊ธฐ๋ฅ์ Feature๋ก ๋ง๋ค ํ์๋ ์์ต๋๋ค. ์ฌ๋ฌ ํ์ด์ง์์ ์ฌ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์๋ง ๊ณ ๋ คํ์ธ์.
121- - ์: ์ฌ๋ฌ ์๋ํฐ์์ ๊ฐ์ ๋๊ธ ๊ธฐ๋ฅ์ ์ด๋ค๋ฉด, comments๋ฅผ Feature๋ก ๋ง๋ญ๋๋ค.
122- - Feature๊ฐ ๋๋ฌด ๋ง์ผ๋ฉด ์ค์ํ ๊ธฐ๋ฅ์ ์ฐพ๊ธฐ ์ด๋ ค์์ง๋๋ค.
146+ ๊ตฌ์ฑ:
123147
124- ๊ตฌ์ฑ
125- - ๐ ui โ ์ํธ์์ฉ UI(์: ํผ)
126- - ๐ api โ ๊ธฐ๋ฅ ๊ด๋ จ API ์์ฒญ
127- - ๐ model โ ๊ฒ์ฆ, ๋ด๋ถ ์ํ
128- - ๐ config โ Feature Flag
148+ - ` ๐ ui ` โ ์ํธ์์ฉ UI (์: ํผ, ๊ฒ์ ๋ฐ ๋ฑ)
149+ - ` ๐ api ` โ ํด๋น ๊ธฐ๋ฅ๊ณผ ์ง์ ๊ด๋ จ๋ API ์์ฒญ
150+ - ` ๐ model ` โ ๊ฒ์ฆ ๋ก์ง, ๋ด๋ถ ์ํ ๊ด๋ฆฌ
151+ - ` ๐ config ` โ Feature Flag ๋ฑ ๊ธฐ๋ฅ๋ณ ์ค์
129152
130- > ์๋ก์ด ํ์์ด ๋ค์ด์์ ๋ Page์ Feature๋ง ๋ด๋ ์ฑ ๊ธฐ๋ฅ ๊ตฌ์กฐ๋ฅผ ํ์
ํ ์ ์๋๋ก ๊ตฌ์ฑํ์ธ์.
153+ > ์๋ก์ด ํ์์ด ํ๋ก์ ํธ์ ํฉ๋ฅํ์ ๋,
154+ > Page์ Feature๋ง ํ์ด๋ด๋ ** ์ด ์ฑ์ด ์ด๋ค ๊ธฐ๋ฅ์ ์ ๊ณตํ๋์ง** ๋ฅผ ๋๋ต ์ดํดํ ์ ์๋๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ๋ชฉํ์
๋๋ค.
131155
132156### Widget
133157
134- ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ๋ ํฐ UI ๋ธ๋ก์
๋๋ค .
135- ์ฌ๋ฌ ํ์ด์ง์์ ์ฌ์ฌ์ฉ๋๊ฑฐ๋, ํ ํ์ด์ง์ ํฐ ๋ธ๋ก์ด ์ฌ๋ฟ ์์ ๋ ์ ์ฉํฉ๋๋ค.
158+ Widgets Layer๋ ** ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ๋ ๋น๊ต์ ํฐ UI ๋ธ๋ก ** ์ ๋๋ ๊ณณ์
๋๋ค .
159+ ์ฌ๋ฌ ํ์ด์ง์์ ์ฌ์ฌ์ฉ๋๊ฑฐ๋, ํ ํ์ด์ง์์ ** ํฐ ์น์
๋จ์๋ก ๋๋์ด์ง๋ UI ๋ธ๋ก ** ์ด ์์ ๋ ์ ์ฉํฉ๋๋ค.
136160
137161:::tip
138162
139- - ์ฌ์ฌ์ฉ๋์ง ์๊ณ ํน์ ํ์ด์ง์ ํต์ฌ ์ฝํ
์ธ ๋ผ๋ฉด Widget์ผ๋ก ๋ถ๋ฆฌํ์ง ๋ง๊ณ Page ์์ ๋์ธ์.
140- - Nested Routing(์: [ Remix] [ ext-remix ] ) ํ๊ฒฝ์์๋ Widget์ด ** Page์ ์ ์ฌํ ๋ฐฉ์ ** ์ผ๋ก ๋์ํฉ๋๋ค .
141- ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ ๋ก๋ฉ, ๋ก๋ฉ ์ํ ํ์, ์๋ฌ ์ฒ๋ฆฌ ๋ฑ์ ํฌํจํด ** ํ๋์ ๋ผ์ฐํฐ ๋จ์ ๋ธ๋ก** ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
163+ ์ฌ์ฌ์ฉ๋์ง ์๊ณ ํน์ ํ์ด์ง์ ํต์ฌ ์ฝํ
์ธ ์๋ง ์ฐ์ธ๋ค๋ฉด, ๊ตณ์ด Widget์ผ๋ก ๋ถ๋ฆฌํ์ง ๋ง๊ณ Page ๋ด๋ถ์ ๋๋ ๊ฒ์ด ์ข์ต๋๋ค.
164+ Nested Routing(์: [ Remix] [ ext-remix ] ) ํ๊ฒฝ์์๋ Widget์ด ** Page์ ๋น์ทํ ์ญํ ** ์ ํ ์ ์์ต๋๋ค .
165+ ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ ๋ก๋ฉ, ๋ก๋ฉ ์ํ ํ์, ์๋ฌ ์ฒ๋ฆฌ ๋ฑ์ ๋ชจ๋ ํฌํจํ๋ ** ํ๋์ ๋ผ์ฐํฐ ๋จ์ UI ๋ธ๋ก** ์ผ๋ก ๋์ํ ์ ์์ต๋๋ค.
142166
143167:::
144168
145169### Page
146170
147- ์น/์ฑ์ ** ํ๋ฉด(screen) ๋๋ ์กํฐ๋นํฐ(activity)** ์ ํด๋นํฉ๋๋ค.
148- ๋๋ถ๋ถ ํ์ด์ง 1๊ฐ = Slice 1๊ฐ์ด์ง๋ง, ์ ์ฌํ ํ์ด์ง๋ ํ๋์ Slice๋ก ๋ฌถ์ ์ ์์ต๋๋ค.
171+ Pages Layer๋ ์น/์ฑ์์ ๋ณด์ด๋ ** ํ๋ฉด(screen) ๋๋ ์กํฐ๋นํฐ(activity)** ์ ํด๋นํฉ๋๋ค.
172+ ์ผ๋ฐ์ ์ผ๋ก โํ์ด์ง 1๊ฐ = Slice 1๊ฐโ ๊ตฌ์กฐ๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง๋ง,
173+ ๊ตฌ์กฐ๊ฐ ์ ์ฌํ ํ์ด์ง๋ค์ ํ๋์ Slice๋ก ๋ฌถ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
149174
150- - ์ฝ๋ ์ฐพ๊ธฐ๋ง ์ฝ๋ค๋ฉด Page Slice ํฌ๊ธฐ ์ ํ์ ์์ต๋๋ค.
151- - ์ฌ์ฌ์ฉ๋์ง ์๋ UI๋ Page ์์ ๋ก๋๋ค.
152- - ๋ณดํต ์ ์ฉ ๋ชจ๋ธ์ ์๊ณ , ๊ฐ๋จํ ์ํ๋ง ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๊ด๋ฆฌํฉ๋๋ค.
175+ ์ฝ๋๋ฅผ ์ฐพ๊ธฐ๋ง ์ฝ๋ค๋ฉด, Page Slice์ ํฌ๊ธฐ์ ํน๋ณํ ์ ํ์ ์์ต๋๋ค.
176+ ์ฌ์ฌ์ฉ๋์ง ์๋ UI๋ ๊ทธ๋๋ก Page ๋ด๋ถ์ ๋๋ฉด ๋ฉ๋๋ค.
177+ Page Layer์๋ ๋ณดํต ์ ์ฉ model์ด ์์ผ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ ๊ฐ๋จํ ์ํ๋ง ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๊ด๋ฆฌํฉ๋๋ค.
153178
154- ๊ตฌ์ฑ ์
155- - ๐ ui โ UI, ๋ก๋ฉ ์ํ, ์๋ฌ ์ฒ๋ฆฌ
156- - ๐ api โ ๋ฐ์ดํฐ ํจ์นญ/๋ณ๊ฒฝ ์์ฒญ
179+ ๊ตฌ์ฑ ์:
180+
181+ - ` ๐ ui ` โ ํ์ด์ง UI, ๋ก๋ฉ ์ํ, ์๋ฌ ์ํ ์ฒ๋ฆฌ
182+ - ` ๐ api ` โ ํ์ด์ง์์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ํจ์นญ/๋ณ๊ฒฝ ์์ฒญ
157183
158184### Process
159185
160186:::caution
161187
162- Deprecated โ ๊ธฐ์กด ์ฝ๋๋ feature๋ app์ผ๋ก ์ฎ๊ธฐ์ธ์ .
188+ ** Deprecated** โ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ์ฝ๋๋ ๊ฐ๋ฅํ๋ฉด Feature๋ App Layer๋ก ์ด๋ํ์ธ์ .
163189
164190:::
165191
166- ๊ณผ๊ฑฐ์๋ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๋๋๋๋ ๊ธฐ๋ฅ์ ์ํ ํ์ถ๊ตฌ ์ญํ ์ด์์ง๋ง,
167- ์ ์๊ฐ ๋ชจํธํด ๋๋ถ๋ถ์ ์ฑ์์๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
168- ๋ผ์ฐํฐ, ์๋ฒ ๋ ๋ฒจ ๋ก์ง์ App Layer์ ๋๊ณ , App์ด ๋๋ฌด ์ปค์ง ๋๋ง ์ ํ์ ์ผ๋ก ๊ณ ๋ คํ์ธ์.
192+ ๊ณผ๊ฑฐ์๋ ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๋๋๋๋ ๋ณต์กํ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ** ํ์ถ๊ตฌ ๊ฐ์ Layer** ๋ก ์ฌ์ฉ๋์์ต๋๋ค.
193+ ํ์ง๋ง ์ญํ ์ด ๋ชจํธํ๊ณ , ๋๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ๊ตณ์ด ์ฌ์ฉํ์ง ์์๋ ์ถฉ๋ถํ ์ค๊ณ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
194+
195+ ๋ผ์ฐํฐ, ์๋ฒ ์ฐ๋ ๊ฐ์ ์ ์ญ์ ์ธ ๋ก์ง์ ๋ณดํต App Layer์ ๋ก๋๋ค.
196+ App Layer๊ฐ ๋๋ฌด ๋ณต์กํด์ง ๋ ์ ๋ง ํ์ํ ๊ฒฝ์ฐ์๋ง ์ ํ์ ์ผ๋ก ๊ณ ๋ คํ ์ ์์ต๋๋ค.
169197
170198### App
171199
172- ์ฑ ์ ์ญ์์ ๋์ํ๋ ** ํ๊ฒฝ ์ค์ ** ๊ณผ ** ๊ณต์ฉ ๋ก์ง** ์ ๊ด๋ฆฌํ๋ Layer์
๋๋ค.
173- ์๋ฅผ ๋ค์ด, ๋ผ์ฐํฐ ์ค์ , ์ ์ญ ์ํ ๊ด๋ฆฌ, ๊ธ๋ก๋ฒ ์คํ์ผ, ์ง์
์ ์ค์ ๋ฑ ** ์ฑ ์ ์ฒด์ ์ํฅ์ ์ฃผ๋ ์ฝ๋** ๋ฅผ ๋ก๋๋ค.
200+ App Layer๋ ์ฑ ์ ์ญ์์ ๋์ํ๋ ** ํ๊ฒฝ ์ค์ ** ๊ณผ ** ๊ณต์ฉ ๋ก์ง** ์ ๊ด๋ฆฌํ๋ ๊ณณ์
๋๋ค.
201+ ์๋ฅผ ๋ค์ด ๋ผ์ฐํฐ ์ค์ , ์ ์ญ ์ํ ๊ด๋ฆฌ(Store ์ค์ ), ๊ธ๋ก๋ฒ ์คํ์ผ ์ฑ ์ง์
์ (Entry Point) ์ค์ ๋ฑ๊ณผ ๊ฐ์ด
202+ ** ์ฑ ์ ์ฒด์ ์ํฅ์ ์ฃผ๋ ์ฝ๋** ๊ฐ ์์นํฉ๋๋ค.
203+ ` shared ` ์ ๋ง์ฐฌ๊ฐ์ง๋ก Slice ์์ด ** Segment๋ง์ผ๋ก ๊ตฌ์ฑ** ํฉ๋๋ค.
204+
205+ ๋ํ์ ์ธ Segment ์:
174206
175- - shared์ฒ๋ผ Slice ์์ด Segment๋ก ๊ตฌ์ฑํฉ๋๋ค.
176- - ๋ํ Segment:
177- - ` ๐ routes ` โ Router ์ค์
178- - ` ๐ store ` โ Global State Store ์ค์
179- - ` ๐ styles ` โ Global Style
180- - ` ๐ entrypoint ` โ Application Entry Point์ Framework ์ค์
207+ - ` ๐ routes ` โ Router ์ค์
208+ - ` ๐ store ` โ Global State Store ์ค์
209+ - ` ๐ styles ` โ Global Style
210+ - ` ๐ entrypoint ` โ Application Entry Point์ Framework ์ค์
181211
182212[ public-api-for-cross-imports ] : /docs/reference/public-api#public-api-for-cross-imports
183213[ ext-remix ] : https://remix.run
0 commit comments