
1. ๊ฐ์

Next.js 13 ๋ฒ์ app router ๋ฆด๋ฆฌ์ฆ ์ดํ ์ดํ ์ด์ page router๋ฅผ ์ผ์๋๋ณด๋ค ํธ์์ฌํญ๋ค์ด ๋ง์์ก๋ค.
๋ ์ด์ React Router๋ฅผ ์ฐ์ง ์์๋ ๋๊ณ , ๊ฐํธํ๊ฒ ๋ ์ด์์, ๋ก๋ฉ, ์๋ฌ ํ์ด์ง, 404 ํ์ด์ง ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
์ด์ธ์๋ ์๋ฒ ์ปดํฌ๋ํธ ๋ฑ์ฅ ์ดํ app ๋๋ ํ ๋ฆฌ ๋ด ํ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฒ ์ปดํฌ๋ํธ๋ก ๋์๋๋ค.
๋ฌผ๋ก ์ด๋๊น์ง๋ ํ๋ ์์ํฌ์ด๊ธฐ์ ์์ ๋๋ ์กฐ๊ธ ์ ํ๋์ง๋ง ํ๋ฒ ์จ๋ณด๋ฉด ๊ต์ฅํ ๋งค๋ ฅ์ ์ผ๋ก ๋ค๊ฐ์ฌ ๊ฒ์ด๋ค.
2. ๋ณ๊ฒฝ์ฌํญ
2.1. ๋ผ์ฐํ

๊ธฐ์กด page ๋ฐฉ์ ๋ผ์ฐํ ์ page ์ค์ฌ์ด์๋ค. ํ์ง๋ง app ๋ผ์ฐํ ์ ํ์ผ ์์คํ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ด๋ค.
- Next.js 12 ์ดํ: /pages/a/b.tsx Ehsms /pages/a/b/index.tsx๋ ๋ชจ๋ ๋์ผํ ์ฃผ์๋ก ๋ณํ๋๋ค. ํ์ผ๋ช ์ด index๋ผ๋ฉด ์ด ๋ด์ฉ์ ๋ฌด์๋๋ค.
- Next.js 13 app: /app/a/b๋ /a/b๋ก ๋ณํ๋๋ฉฐ, ํ์ผ๋ช ์ ๋ฌด์๋๋ค. ํด๋๋ช ๊น์ง๋ง ์ฃผ์๋ก ๋ณํ๋๋ค.
์ ์์ ์ธ /sign/sign-in ์ฃผ์์ ๋ค์ด๊ฐ๊ฒ ๋๋ฉด sign-in ํ์ด์ง๊ฐ ๋์ฌ๊ฒ์ด๋ค.
2.2. ๋ ์ด์์
Next.js 12 ๋ฒ์ ๊น์ง๋ ํ์ด์ง ๊ณตํต ๋ ์ด์์์ ์ ์งํ ์ ์๋ ๋ฐฉ๋ฒ์ _app์ด ์ ์ผํ๋ค.
๊ทผ๋ฐ ์ด ๋ฐฉ์์ _app์์๋ฐ์ ํ ์ ์์ด ์ ํ์ ์ด๊ณ , ๊ฐ ํ์ด์ง๋ณ๋ก ์๋ก ๋ค๋ฅธ ๋ ์ด์์์ ์ ์งํ๊ธฐ ํ๋ค๋ค.
Next.js 13๋ถํฐ๋ ํด๋ ๋ด์ layout.js(js, jsx, ts, tsx) ํ์ผ์ด ํฌํจ๋๋ค๋ฉด ๊ทธ ํ์ ํด๋ ๋ฐ ์ฃผ์์ ๋ชจ๋ ์ํฅ์ ๋ฏธ์น๋ค.
์ฆ, sign ํด๋์ layout.js๊ฐ ์๋ค๋ฉด ๊ทธ ํ์ ํด๋ ๋ชจ๋์๊ฒ ๋ ์ด์์์ด ์ผ๊ด ์ ์ฉ๋๋ค.
๋ง์ฝ ํ์ด์ง ํ์์์ ๋ ์ด์์์ด ๋ณ๊ฒฝ๋๋ค๋ฉด ๋์ผ ๋์ค์ layout.js๋ฅผ ๋ง๋ค์ด์ผํ๋ค. ๊ทธ๋ผ ๋ค์ ํ์ ํด๋ ๋ชจ๋์๊ฒ ์ผ๊ด ์ ์ฉ๋๋ค.

๋ฃจํธ์ ๊ฒฝ์ฐ ๋จ ํ๋์ ๋ ์ด์์์ ๋ง๋ค ์ ์๋ค. ์ด ๋ ์ด์์์ ๋ชจ๋ ํ์ด์ง์ ์ํฅ์ ๋ฏธ์น๋ ๊ณตํต ๋ ์ด์์์ด๋ค.
๋ฃจํธ ๋ ์ด์์ ๊ฐ์ ๊ฒฝ์ฐ ์ด๋ฐ์์ผ๋ก ๊ตฌ์ฑ์ด ๋๋ค.

2.3. ๋ก๋ฉ

๋ก๋ฉ์ ๊ฒฝ์ฐ๋ ๋ฆฌ์กํธ Suspense๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํด๋น ์ปดํฌ๋ํธ๊ฐ ๋ก๋ฉ์ค์ผ ๋ ์ฌ์ฉํ ์ ์๋ค.
2.4. 404
404 ํ์ด์ง ์ฒ๋ฆฌ ๋ํ ๊ต์ฅํ ํธํด์ก๋ค.
app ๋๋ ํ ๋ฆฌ ๋ด์ not-found.js๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด ๋ผ์ฐํ ์ฃผ์๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ 404 ํ์ด์ง๋ฅผ ๋ ๋๋ง ํด์ค๋ค.

2.5. ์๋ฒ ์ปดํฌ๋ํธ
๋ฆฌ์กํธ์์ ์๋ฒ ์ปดํฌ๋ํธ๊ฐ ๋ฑ์ฅํ ์ดํ Next.js 13 ๋ฒ์ ์์๋ ์๋ฒ ์ปดํฌ๋ํธ๊ฐ ๋์
๋๋ค.
์๋ฒ ์ปดํฌ๋ํธ ์๋ฒ์์ ํ ์ ์๋ ์ผ์ ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๊ฒ ๋๊ณ , ์๋ฒ๊ฐ ํ ์ ์๋ ๋๋จธ์ง ์์
์ ํด๋ผ์ด์ธํธ์ธ ๋ธ๋ผ์ฐ์ ์์ ์ํ๋๋ค.
์ฆ, ์ผ๋ถ ์ปดํฌ๋ํธ๋ ํด๋ผ์ด์ธํธ์์, ์ผ๋ถ ์ปดํฌ๋ํธ๋ ์๋ฒ์์ ๋ ๋๋ง ๋๋ค.
์๋ฒ ์ปดํฌ๋ํธ์ ํน์ง์ผ๋ก๋
- ์์ฒญ์ด ์ค๋ฉด ๊ทธ ์๊ฐ ์๋ฒ์์ ๋ฑ ํ ๋ฒ ์คํ๋จ์ผ๋ก ์ํ๋ฅผ ๊ฐ์ง ์ ์๋ค. ๊ทธ๋์ ๋ฆฌ์กํธ์์ ์ํ๋ฅผ ๊ฐ์ง ์ ์๋ useState, useReducer ๋ฑ์ ํ ์ ์ฌ์ฉํ ์ ์๋ค.
- ํ๋ฒ ๋ ๋๋ง ๋๋ฉด ๋์ด๊ธฐ์ ๋ ๋๋ง ์๋ช ์ฃผ๊ธฐ๋ ์ฌ์ฉํ ์ ์๋ค. ๋ฐ๋ผ์ useEffect, useLayoutEffect๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- ๋ธ๋ผ์ฐ์ ์์ ์คํ๋์ง ์๊ณ ์๋ฒ์์๋ง ์คํ๋๊ธฐ ๋๋ฌธ์ DOM API๋ฅผ ์ฐ๊ฑฐ๋ window, document ๋ฑ์ ์ ๊ทผํ ์ ์๋ค.
- ๋ค๋ฅธ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ฑฐ๋ div, span, p๊ฐ์ ์์๋ฅผ ๋ ๋๋งํ๊ฑฐ๋ ํน์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋ง ํ ์ ์๋ค.
๋ฆฌ์กํธ๋ ๋ชจ๋ ๊ฒ์ ๋ค ๊ณต์ฉ ์ปดํฌ๋ํธ๋ก ํ๋จํ์ฌ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ๋ค ์๋ฒ์์ ์คํ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๋ถ๋ฅํ๋ค.
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ผ๋ ๊ฒ์ ๋ช
์ํ๋ ค๋ฉด 'use client' ๊ตฌ๋ฌธ์ ํตํด ๊ฐ๋ฅํ๋ค.

2.6. ์๋ก์ด fetch ๋์ ๊ณผ getServerSideProps, getStaticProps, getInitialProps์ ์ญ์
๊ณผ๊ฑฐ Next.js ์์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง๊ณผ ์ ์ ํ์ด์ง ์ ๊ณต์ ์ํด ์ด์ฉ๋๋ getServerSideProps, getStaticProps, getInitialProps๊ฐ ์ญ์ ๋๋ค. ๋์ ๋ฐ์ดํฐ ์์ฒญ์ fetch
๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ค์ง๋ค.
์ด ๊ธ์ ๋ชจ๋ ๋ฆฌ์กํธ Deep Dive ์ฑ ์ผ๋ถ๋ฅผ ์ ์ฉํ ๋ด์ฉ์ ๋๋ค.
2.7. ๋์๊ตฌ๋งค๋งํฌ
'๐ฅ Front-End > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ชจ๋ ๋ฆฌ์กํธ Deep Dive ํ๊ธฐ (1) | 2023.11.22 |
---|---|
[React] Props, State, ๋ฆฌ๋ ๋๋ง ๋ฐ์ ์กฐ๊ฑด (0) | 2022.08.01 |