You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
NextJS 프로젝트에도 FSD 아키텍처를 적용할 수 있지만, 구조적 차이로 두 가지 충돌이 발생합니다.
9
+
FSD는 Next.js의 App Router와 Pages Router 양쪽에 적용할 수 있습니다.
10
+
다만 Next.js가 요구하는 `app`, `pages` 폴더는 FSD 구조와 분리해 두어야 합니다.
10
11
11
-
-**`pages` layer 라우팅 파일**
12
-
-**NextJS에서 `app` layer의 충돌 또는 미지원**
12
+
## App Router \{#app-router\}
13
13
14
-
##`pages` layer 충돌 \{#pages-conflict}
14
+
### `app` layer에서 FSD와 Next.js의 충돌 \{#conflict-between-fsd-and-nextjs-in-the-app-layer\}
15
15
16
-
NextJS는 파일 시스템 기반 라우팅을 위해 **`pages` 폴더**의 파일을 URL에 매핑합니다.
17
-
그러나 이 방식은 FSD에서 권장하는 **평탄(flat)한 slice 구조**와 맞지 않아 충돌이 발생합니다.
16
+
App Router에서는 `app` 폴더 구조가 곧 라우트 구조가 됩니다. 반면 FSD에서 `app`은 라우트 폴더가 아니라 애플리케이션 전역 구성을 위한 layer입니다. 두 구조가 같은 `app` 폴더를 서로 다른 용도로 사용하기 때문에 충돌이 발생합니다.
18
17
19
-
### NextJS `pages` 폴더를 Project Root로 이동 (권장)
20
-
21
-
`pages` 폴더를 **프로젝트 최상위**로 옮긴 뒤,<br/>
22
-
FSD `src/pages`의 각 페이지 컴포넌트를 `pages` 폴더에서 **re-export** 하면 NextJS 라우팅과 FSD 구조를 모두 유지할 수 있습니다.
18
+
이 충돌을 피하려면 Next.js의 `app` 폴더는 프로젝트 루트에 두고, 여기에는 라우트 파일만 둡니다. 실제 페이지 파일은 `src` 하위의 FSD 구조에 유지합니다. 루트 `app`의 각 라우트 파일은 `src/pages`의 페이지 파일을 가져와 연결합니다.
23
19
20
+
프로젝트 루트에는 빈 `pages` 폴더도 함께 두어야 합니다. App Router를 쓰더라도 Next.js는 `src/pages`를 Pages Router로 사용하려 하므로 빌드가 실패합니다. 루트의 빈 `pages` 폴더가 이 동작을 막습니다. 폴더 안에는 왜 비어 있어야 하는지 설명하는 `README.md`를 두는 것이 좋습니다.
24
21
25
22
<FileTree>
26
-
- pages/ NextJS 라우팅 폴더 (FSD pages를 재-export)
27
-
- index.tsx
28
-
- about.tsx
29
-
- src/
30
-
- app/
31
-
- entities/
23
+
- app App folder (Next.js)
24
+
- api
25
+
- get-example
26
+
- route.ts
27
+
- example
28
+
- page.tsx
29
+
- pages Empty pages folder (Next.js)
30
+
- README.md
31
+
- src
32
+
- app
33
+
- api-routes API routes
34
+
- pages
35
+
- example
36
+
- index.ts
37
+
- ui
38
+
- example.tsx
39
+
- widgets/
32
40
- features/
33
-
-pages/ FSD pages layer
41
+
-entities/
34
42
- shared/
35
-
- widgets/
36
43
</FileTree>
37
44
38
-
### FSD pages layer 이름 변경
45
+
루트 `app`의 라우트 파일에는 페이지 코드가 들어 있지 않습니다. `src/pages`의 페이지 파일을 가져와 연결합니다.
0 commit comments