Skip to content

Commit 31c669c

Browse files
committed
fix: Update Korean translation for 'Usage with NextJS' document
1 parent 39ae10f commit 31c669c

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
---
2+
sidebar_position: 10
3+
---
4+
# NextJS์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ
5+
6+
NextJS์—์„œ๋„ FSD ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, NextJS์˜ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์™€ FSD ์›์น™ ๊ฐ„์— ๋ช‡ ๊ฐ€์ง€ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
7+
8+
#### ์ฃผ์š” ์ฐจ์ด์ 
9+
10+
- NextJS์˜ `pages` ํด๋”์™€ FSD์˜ `pages` layer ๊ฐ„์˜ ์ด๋ฆ„ ์ถฉ๋Œ
11+
- NextJS 13 ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” FSD์˜ `app` layer์— ํ•ด๋‹นํ•˜๋Š” ๋ช…ํ™•ํ•œ ํด๋” ๊ตฌ์กฐ๊ฐ€ ์—†์Œ
12+
13+
## FSD์™€ NextJS์˜ `pages` layer ์ถฉ๋Œ {#pages-conflict}
14+
15+
NextJS๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…์„ ์œ„ํ•ด `pages` ํด๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ•ด๋‹น ํด๋” ๋‚ด ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ๋ผ์šฐํŠธ์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.
16+
๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ์‹์€ FSD์˜ `pages layer ๊ฐœ๋…๊ณผ ์ถฉ๋Œ`ํ•˜๋ฉฐ, ํŠนํžˆ FSD์—์„œ ๊ถŒ์žฅํ•˜๋Š” ํ‰ํƒ„ํ•œ(flat) slice ๊ตฌ์กฐ๋ฅผ NextJS์˜ ์ค‘์ฒฉ ๋ผ์šฐํŒ… ๋ฐฉ์‹์—์„œ ์œ ์ง€ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
17+
18+
### NextJS์˜ `pages` ํด๋”๋ฅผ ๋ฃจํŠธ ํด๋”๋กœ ์ด๋™ (๊ถŒ์žฅ)
19+
20+
๊ฐ€์žฅ ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์€ NextJS์˜ `pages` ํด๋”๋ฅผ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ๋ฐฐ์น˜ํ•˜๊ณ , FSD ๊ตฌ์กฐ๋Š” `src` ํด๋” ๋‚ด์—์„œ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
21+
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด NextJS์˜ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ์„ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•˜๋ฉด์„œ๋„ FSD ์•„ํ‚คํ…์ฒ˜๋ฅผ ์˜จ์ „ํžˆ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
22+
23+
```sh
24+
โ”œโ”€โ”€ pages # NextJS์˜ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ์šฉ ํด๋”
25+
โ”œโ”€โ”€ src
26+
โ”‚ โ”œโ”€โ”€ app
27+
โ”‚ โ”œโ”€โ”€ entities
28+
โ”‚ โ”œโ”€โ”€ features
29+
โ”‚ โ”œโ”€โ”€ pages # FSD์˜ pages layer
30+
โ”‚ โ”œโ”€โ”€ shared
31+
โ”‚ โ”œโ”€โ”€ widgets
32+
```
33+
34+
### FSD ๊ตฌ์กฐ ๋‚ด `pages` ํด๋” ์ด๋ฆ„ ๋ณ€๊ฒฝํ•˜๊ธฐ
35+
36+
๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” FSD์˜ `pages` layer ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜์—ฌ NextJS์˜ `pages` ํด๋”์™€์˜ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
37+
์˜ˆ๋ฅผ ๋“ค์–ด, `pages`๋ฅผ `views`๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด NextJS์˜ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ๊ณผ FSD ๊ตฌ์กฐ๋ฅผ ๋™์‹œ์— ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
38+
39+
```sh
40+
โ”œโ”€โ”€ app
41+
โ”œโ”€โ”€ entities
42+
โ”œโ”€โ”€ features
43+
โ”œโ”€โ”€ pages # NextJS ๋ผ์šฐํŒ…์šฉ ํด๋”
44+
โ”œโ”€โ”€ views # ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋œ FSD pages layer
45+
โ”œโ”€โ”€ shared
46+
โ”œโ”€โ”€ widgets
47+
```
48+
49+
ํด๋” ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•œ ๊ฒฝ์šฐ, ํ”„๋กœ์ ํŠธ์˜ README๋‚˜ ๋‚ด๋ถ€ ๋ฌธ์„œ์— ์ด๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
50+
์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ["ํ”„๋กœ์ ํŠธ ์ง€์‹"][project-knowledge]์˜ ์ผ๋ถ€๋กœ ๋ฌธ์„œํ™”ํ•˜์—ฌ ํŒ€์›๋“ค์ด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
51+
52+
## NextJS์—์„œ FSD์˜ `app` layer ๊ตฌํ˜„ํ•˜๊ธฐ {#app-absence}
53+
54+
NextJS 13 ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” FSD์˜ `app` layer์— ํ•ด๋‹นํ•˜๋Š” ๋ช…ํ™•ํ•œ ํด๋” ๊ตฌ์กฐ๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
55+
๋Œ€์‹  `pages/_app.tsx` ํŒŒ์ผ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์  ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ „์—ญ ์ƒํƒœ ๋ฐ ๋ ˆ์ด์•„์›ƒ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
56+
57+
### `pages/_app.tsx`์— app layer ๊ธฐ๋Šฅ ํ†ตํ•ฉํ•˜๊ธฐ
58+
59+
FSD์˜ `app` layer ๊ฐœ๋…์„ NextJS์— ์ ์šฉํ•˜๋ ค๋ฉด, `app` ํด๋”์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ”„๋กœ๋ฐ”์ด๋”์™€ ๋ ˆ์ด์•„์›ƒ ๊ตฌ์„ฑ์„ ์ •์˜ํ•œ ํ›„, ์ด๋ฅผ `pages/_app.tsx`์—์„œ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
60+
61+
```tsx
62+
// app/providers/index.tsx
63+
64+
const App = ({ Component, pageProps }: AppProps) => {
65+
return (
66+
<Provider1>
67+
<Provider2>
68+
<BaseLayout>
69+
<Component {...pageProps} />
70+
</BaseLayout>
71+
</Provider2>
72+
</Provider1>
73+
);
74+
};
75+
76+
export default App;
77+
```
78+
79+
๊ทธ๋‹ค์Œ, `pages/_app.tsx`์—์„œ `App` ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€์ ธ์™€ NextJS์˜ ์ง„์ž…์ ์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ์ „์—ญ ์Šคํƒ€์ผ์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
80+
81+
```tsx
82+
// pages/_app.tsx
83+
84+
import 'app/styles/index.scss'
85+
86+
export { default } from 'app/providers';
87+
```
88+
89+
## App Router ์‚ฌ์šฉํ•˜๊ธฐ {#app-router}
90+
91+
NextJS 13.4 ๋ฒ„์ „๋ถ€ํ„ฐ ์ •์‹ ์ง€์›๋˜๋Š” App Router๋Š” `pages` ํด๋” ๋Œ€์‹  `app` ํด๋”๋ฅผ ํ†ตํ•ด ๋ผ์šฐํŒ…์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
92+
FSD ์•„ํ‚คํ…์ฒ˜๋ฅผ App Router์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ๋„ ์•ž์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
93+
94+
NextJS์˜ app ํด๋”๋ฅผ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ๋ฐฐ์น˜ํ•˜๊ณ , FSD์˜ app layer๋Š” `src` ํด๋” ๋‚ด์—์„œ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
95+
๋˜ํ•œ, App Router์™€ Pages Router๋Š” ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ•„์š”์— ๋”ฐ๋ผ ๋‘ ๋ผ์šฐํŒ… ์‹œ์Šคํ…œ์„ ๋ชจ๋‘ ํ™œ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
96+
97+
```
98+
โ”œโ”€โ”€ app # NextJS์˜ App Router์šฉ ํด๋”
99+
โ”œโ”€โ”€ pages # NextJS์˜ Pages Router์šฉ ํด๋” (์„ ํƒ์ )
100+
โ”‚ โ”œโ”€โ”€ README.md # ํด๋”์˜ ์šฉ๋„ ์„ค๋ช…
101+
โ”œโ”€โ”€ src
102+
โ”‚ โ”œโ”€โ”€ app # FSD์˜ app layer
103+
โ”‚ โ”œโ”€โ”€ entities
104+
โ”‚ โ”œโ”€โ”€ features
105+
โ”‚ โ”œโ”€โ”€ pages # FSD์˜ pages layer
106+
โ”‚ โ”œโ”€โ”€ shared
107+
โ”‚ โ”œโ”€โ”€ widgets
108+
```
109+
110+
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)][ext-app-router-stackblitz]
111+
112+
## ์ฐธ๊ณ  ์ž๋ฃŒ {#see-also}
113+
114+
- [(์Šค๋ ˆ๋“œ) NextJS์˜ pages ํด๋”์— ๋Œ€ํ•œ ํ† ๋ก ](https://t.me/feature_sliced/3623)
115+
116+
[project-knowledge]: /docs/about/understanding/knowledge-types
117+
[ext-app-router-stackblitz]: https://stackblitz.com/edit/stackblitz-starters-aiez55?file=README.md
118+
119+

0 commit comments

Comments
ย (0)