Skip to content

Commit fb19087

Browse files
authored
docs: with-nextjs page translated into Korean (feature-sliced#745)
1 parent dd7be18 commit fb19087

File tree

1 file changed

+117
-0
lines changed

1 file changed

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

0 commit comments

Comments
ย (0)