Next.js 13 (App Router) ์์ ๋ฉด์ ์ง๋ฌธ (1)
๐ ๋ผ์ฐํ ๋ฐ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
1. Q: Next.js 13์์ pages/์ app/ ๋๋ ํ ๋ฆฌ์ ์ฃผ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
A: pages/๋ Pages Router๋ก ํ์ผ ๊ธฐ๋ฐ ๋ผ์ฐํ
๊ณผ getStaticProps, getServerSideProps๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ฉด app/์ App Router๋ก React Server Components(RSC)๋ฅผ ์ง์ํ๊ณ , layout.tsx ๋ฑ์ ํ์ผ๋ก ๋ ์ ์ฐํ ์ํคํ
์ฒ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๐ก ์ค๋ช
:
- App Router๋ ์ค์ฒฉ ๋ ์ด์์, ์๋ฒ ์ปดํฌ๋ํธ, ์คํธ๋ฆฌ๋ฐ ๋ฑ์ ์ง์ํฉ๋๋ค.
- Pages Router๋ ๊ธฐ์กด ๋ฐฉ์์ด๋ฉฐ ์ ์ฐจ App Router๋ก ์ ํ๋๊ณ ์์ต๋๋ค.
- ๋ ๋ผ์ฐํ ์์คํ ์ ์๋ก ํธํ๋์ง ์์ผ๋ฏ๋ก ํ๋ก์ ํธ ๊ตฌ์กฐ ์ ํ์ด ์ค์ํฉ๋๋ค.
2. Q: app/๋๋ ํ ๋ฆฌ ๋ด์ page.tsx, layout.tsx, loading.tsx์ ์ญํ ์ ๋ฌด์์ธ๊ฐ์?
A: page.tsx๋ ํน์ ๊ฒฝ๋ก์ ์ค์ ์ฝํ
์ธ ํ์ด์ง์ด๊ณ , layout.tsx๋ ํด๋น ๊ฒฝ๋ก์ ๊ณตํต UI๋ฅผ ์ ์ํฉ๋๋ค. loading.tsx๋ ๋ฐ์ดํฐ ํจ์นญ ์ค ๋ณด์ฌ์ค ๋ก๋ฉ ํ๋ฉด์ ์ ์ํฉ๋๋ค.
๐ก ์ค๋ช
:
- layout.tsx๋ ์ค์ฒฉ ๊ฐ๋ฅํ๋ฉฐ ํ์ ๋ชจ๋ ํ์ด์ง์ ์ ์ฉ๋ฉ๋๋ค.
- loading.tsx๋ ํด๋น ๋๋ ํ ๋ฆฌ์ ๊ทธ ํ์ ๋๋ ํ ๋ฆฌ์๋ง ์ ์ฉ๋ฉ๋๋ค.
- ์ด ๊ตฌ์กฐ๋ ์ฌ์ฉ์ ๊ฒฝํ ํฅ์๊ณผ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ ๊ธฐ์ฌํฉ๋๋ค.
3. Q: layout.tsx์ _app.tsx์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์?
A: layout.tsx๋ App Router์์ ๊ฒฝ๋ก ๋จ์๋ก ์ค์ฒฉ ๊ฐ๋ฅํ ๋ ์ด์์์ ์ ์ํฉ๋๋ค. ๋ฐ๋ฉด _app.tsx๋ Pages Router์์ ๋ชจ๋ ํ์ด์ง์ ๊ณตํต์ผ๋ก ์ ์ฉ๋๋ ๊ธ๋ก๋ฒ ์ปดํฌ๋ํธ์
๋๋ค.
๐ก ์ค๋ช
:
- layout.tsx๋ ์ค์ฒฉ์ด ๊ฐ๋ฅํ๊ณ route ๋ถ๊ธฐ๋ณ๋ก ๋ค๋ฅด๊ฒ ์ค์ ํ ์ ์์ต๋๋ค.
- _app.tsx๋ ํ๋๋ง ์กด์ฌํ๋ฉฐ ๋ชจ๋ ํ์ด์ง์ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค.
- App Router์์๋ _app.tsx๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
4. Q: error.tsx๋ ์ธ์ , ์ด๋ป๊ฒ ๋์ํ๋์?
A: ํน์ route๋ ํด๋น ํ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ error.tsx๊ฐ ์๋์ผ๋ก ๋ ๋๋ง๋ฉ๋๋ค. ์ด ํ์ผ์ ํด๋น ๋๋ ํ ๋ฆฌ ๋จ์์์๋ง ์ ์ฉ๋ฉ๋๋ค.
๐ก ์ค๋ช
:
- ์๋ฒ ์ปดํฌ๋ํธ/ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ ๋ชจ๋์์ ์๋ฌ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- try/catch์ ํจ๊ป ์ฌ์ฉํ ์๋ ์์
- ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ธฐ ์ํ ์ปค์คํ ์๋ฌ ํ์ด์ง ์ ์ ๊ฐ๋ฅ
5. Q: ๋์ ๋ผ์ฐํ
์ App Router์์ ์ด๋ป๊ฒ ๊ตฌํํ๋์?
A: ํด๋๋ช
์ [slug]์ ๊ฐ์ด ๋๊ดํธ๋ก ๊ฐ์ธ์ ์์ฑํ๋ฉด ํด๋น ๋ถ๋ถ์ด ๋์ ํ๋ผ๋ฏธํฐ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. params ๊ฐ์ฒด๋ฅผ ํตํด ํด๋น ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ก ์ค๋ช
:
- [id]/page.tsx ํํ๋ก ๊ตฌํ
- params.id๋ฅผ ํตํด URL ํ๋ผ๋ฏธํฐ ์ ๊ทผ ๊ฐ๋ฅ
- generateStaticParams()์ ํจ๊ป ์ฌ์ฉ ์ ์ ์ ๋น๋ ๊ฐ๋ฅ
๐ ์๋ฒ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ ํจ์นญ
6. Q: React Server Components(RSC)๋ ๋ฌด์์ธ๊ฐ์?
A: RSC๋ ์๋ฒ์์ ๋ ๋๋ง๋๊ณ ํด๋ผ์ด์ธํธ์ HTML๋ก ์ ๋ฌ๋๋ ์ปดํฌ๋ํธ์
๋๋ค. ํด๋ผ์ด์ธํธ์์ JavaScript๋ฅผ ์ต์ํํ์ฌ ์ด๊ธฐ ๋ก๋ฉ ์ฑ๋ฅ์ ๋์ผ ์ ์์ต๋๋ค.
๐ก ์ค๋ช
:
- ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ฝ๊ณ ๋ ๋๋ง ๊ฐ๋ฅ
- ํด๋ผ์ด์ธํธ์ ์ ์ก๋๋ JS ํฌ๊ธฐ ๊ฐ์
- ์๋ฒ ์ ์ฉ API ํค๋ ๋ณด์ ์ ๋ณด๋ฅผ ์์ ํ๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ
7. Q: ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์ fetch๋ฅผ ์ฐ๋ฉด ์ ๋๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
A: ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ฏ๋ก, ์๋ฒ ์ ์ฉ API ํค๋ ๋น๊ณต๊ฐ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฒ ์ปดํฌ๋ํธ์์ ๋ฐ์ดํฐ๋ฅผ ํจ์นญํ๊ณ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํ๋ ๊ฒ์ด ์์ ํฉ๋๋ค.
๐ก ์ค๋ช
:
- ํด๋ผ์ด์ธํธ fetch๋ API ํค ๋ ธ์ถ ์ํ์ด ์์
- ์๋ฒ fetch๋ ๋ณด์๊ณผ ์ฑ๋ฅ ์ธก๋ฉด์์ ์ ๋ฆฌํจ
- ๋ฐ์ดํฐ ์บ์ฑ, revalidation ๋ฑ์ ๊ธฐ๋ฅ๋ ์๋ฒ ์ปดํฌ๋ํธ์์ ํ์ฉ ๊ฐ๋ฅ
8. Q: getStaticProps, getServerSideProps๋ App Router์์ ์ด๋ป๊ฒ ๋์ฒด๋๋์?
A: App Router์์๋ ์ด ํจ์๋ค์ ์ฌ์ฉํ์ง ์๊ณ , ์๋ฒ ์ปดํฌ๋ํธ ๋ด์์ ์ง์ fetch()๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์บ์ฑ๊ณผ revalidation์ fetch ์ต์
์ผ๋ก ์ ์ดํฉ๋๋ค.
๐ก ์ค๋ช
:
- fetch()์ cache, next.revalidate ์ต์ ์ฌ์ฉ
- ๋ ์ ์ธ์ ์ด๊ณ ๊ฐ๊ฒฐํ ๋ฐฉ์
- ์๋ฒ ์ปดํฌ๋ํธ๊ฐ ํ์ด์ง ๋ฐ์ดํฐ ํจ์นญ์ ์ค์ฌ ์ญํ ์ํ
9. Q: fetch()์ cache: 'no-store'๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ํจ๊ณผ๊ฐ ์๋์?
A: ์ด ์ค์ ์ ์์ฒญ๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ์๋ก ๊ฐ์ ธ์ค๋ SSR(Server Side Rendering) ๋ฐฉ์์ผ๋ก ๋์ํ๊ฒ ํฉ๋๋ค. ํญ์ ์ต์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
๐ก ์ค๋ช
:
- ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ฐ๋๋ ๋์๋ณด๋ ๋ฑ์ ์ ํฉ
- cache: 'force-cache'๋ ๋น๋ ์ ์บ์, revalidate๋ ISR
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ ์๋ฒ ์ธก์์๋ง ์๋ํ๋ ์ค์
10. Q: generateStaticParams()๋ ์ธ์ ์ฌ์ฉ๋๋ฉฐ, ์ด๋ค ์ญํ ์ ํ๋์?
A: ๋์ ๋ผ์ฐํ
ํ์ด์ง์์ ๋น๋ ํ์์ ํ์ํ ๊ฒฝ๋ก ๋ชฉ๋ก์ ๋ฐํํ์ฌ SSG(static generation)๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. params ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ์ ์ธ HTML ํ์ผ์ ์์ฑํฉ๋๋ค.
๐ก ์ค๋ช
:
- App Router์์ getStaticPaths์ ๋์ฒด ๊ธฐ๋ฅ
- ๋์ ๊ฒฝ๋ก๋ฅผ ์ ์ ์ผ๋ก ํ๋ฆฌ๋ ๋๋งํ ์ ์์
- ๋์ URL๊ณผ SSG๋ฅผ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ์ ์ฉํ ๋ฉ์ปค๋์ฆ