Next 15
Layout
Route Group
์ด๋ฆ์ด ์๊ดํธ๋ก ๊ฐ์ธ์ง ํด๋
๊ฒฝ๋ก์์ ์๋ฌด๋ฐ ์ํฅ์ ๋ผ์น์ง ์์
๋์์ ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋ ํ์ด์ง ํ์ผ๋ค์ ํ๋์ ํด๋๋ก ๋ฌถ์ ์ ์๋ ๊ธฐ๋ฅ
๊ฒฝ๋ก๊ฐ ๋ค๋ฅธ ํน์ ํ์ด์ง๋ค์ ๋์ผํ ๋ ์ด์์์ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ฌ์ฉ๋จ
์๋ฒ ์ปดํฌ๋ํธ
์๋ฒ ์ธก ์ฌ์ ๋ ๋๋ง์์ ๋ฑ ํ๋ฒ ์คํ๋๋ ์ปดํฌ๋ํธ
์ฃผ์์ฌํญ
์๋ฒ ์ปดํฌ๋ํธ๋ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋ ์ฝ๋๊ฐ ํฌํจ๋๋ฉด ์๋๋ค.
๋ฆฌ์ํธ ํ , ์ด๋ฒคํธ ํธ๋ค๋ฌ, ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ๊ธฐ๋ฅ์ ๋ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Link ์ปดํฌ๋ํธ๋ ์๋ฒ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ ๊ฐ๋ฅ (์๋ฒ์์๋ ์ ์ ์ธ
<a>
ํ๊ทธ๋ก ๋ ๋๋ง๋๊ณ ์ด๋ ์์ฒด๋ ์์๊ฐ ๊ฐ์ง ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ)
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ํด๋ผ์ด์ธํธ์์๋ง ์คํ๋์ง ์๋๋ค.
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ import ํ ์ ์๋ค.
ํ์ด๋๋ ์ด์ ์งํ ์ค์ ์๋ฒ์ปดํฌ๋ํธ๋ ํฌํจ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋ฐ์
์ด ๊ฒฝ์ฐ next.js๋ ์๋์ผ๋ก ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ๋ณ๊ฒฝ (์ผ๋งํ๋ฉด ํผํ๊ธฐ)
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์ children props๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ์์์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ OK
์๋ฒ ์ปดํฌ๋ํธ์์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์๊ฒ ์ง๋ ฌํ๋์ง ์๋ props๋ ์ ๋ฌํ ์ ์๋ค.
JSON์ผ๋ก ์ง๋ ฌํํ ์ ์๋ ๋ฐ์ดํฐ ->
ํจ์
,ํด๋์ค
,Map/Set
,๊ทธ ์ธ ์ง๋ ฌํ ๊ฐ๋ฅํ ๋ฐ์ดํฐ
string
,number
,boolean
,null
,undefined
array
,object
RSC Payload
React Server Component์ ์์ ๋ฐ์ดํฐ(๊ฒฐ๊ณผ๋ฌผ)
React Server Component๋ฅผ ์ง๋ ฌํํ ๊ฒฐ๊ณผ
์ฌ์ ๋ ๋๋ง ๊ณผ์ ์ค์๋ ์๋ฒ ์ปดํฌ๋ํธ๋ค๋ง ๋ฐ๋ก ๋จผ์ ์คํํ์ฌ RSC Payload ํํ๋ก ์ง๋ ฌํ๋๋ ๊ณผ์ ์กด์ฌ
์๋ฒ ์ปดํฌ๋ํธ๋ค๋ง ๋ฐ๋ก ์คํ์ํค๊ฒ ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ก HTML ํ๊ทธ๊ฐ ๋ฐ๋ก ์คํ๋๋๊ฒ ์๋
RSC Payload
๋ผ๋ JSON๊ณผ ๋น์ทํ ๋ฌธ์์ด์ด ์์ฑ๋จRSC Payload๋ ์๋ฒ ์ปดํฌ๋ํธ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋จ
๋ ๋๋ง ๊ฒฐ๊ณผ
์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ ์์น
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์๊ฒ ์ ๋ฌํ๋ props ๊ฐ
๋ค๋น๊ฒ์ดํ
Page Routing๊ณผ ๋์ผํ๊ฒ ํ์ด์ง ์ด๋์ Client Side Rendering ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ ๋จ, ์๋ฒ ์ปดํฌ๋ํธ ๊ฐ๋ ์ด ์ถ๊ฐ๋์ด ๋ฐฉ์์ด ์กฐ๊ธ ๋ณ๊ฒฝ๋จ
ํ์ด์ง ์ด๋ ์์ฒญ ํ JS ๋ฒ๋ค๊ณผ ๊ฐ์ด ์๋ฒ ์ปดํฌ๋ํธ ๊ฒฐ๊ณผ๋ฌผ์ธ
RSC Payload
๋ ํจ๊ป ์ ๋ฌํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ํ์ด์ง ์ด๋์
useRouter (next/navigation)
์ฌ์ฉ *ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์๋ง
Prefetching
ํ์ฌ ํ์ด์ง์์ ๋งํฌ๋ค์ด ์กด์ฌํ์ฌ ์ฐ๊ฒฐ๋ ํ์ด์ง์ ๋ฐ์ดํฐ๋ค์ ๋ฏธ๋ฆฌ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฒ
์ฐ๊ฒฐ๋ ํ์ด์ง๊ฐ ์ ์ ํ์ด์ง(SSG)์ธ ๊ฒฝ์ฐ RSC Payload + JS Bunlde ํ๋ฆฌํจ์นญํ์ง๋ง ๋์ ํ์ด์ง(SSR)์ธ ๊ฒฝ์ฐ RSC Payload๋ง ๊ฐ์ ธ์ด
๊ธฐ๋ณธ์ ์ผ๋ก SSG (๋ฐ์ดํฐ๊ฐ ํฅํ ์ ๋ฐ์ดํธ ๋์ง ์์๊ฒ์ด๋ฏ๋ก JS Bundle ๊น์ง ํ๋ฆฌํจ์นญ)
๋น๋ ํ์์์ ๊ฐ์ ธ์ค๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ(์: ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ ๋ฑ)์ ๋ชจ๋ ๋์ ํ์ด์ง๋ก ๋ถ๋ฅ
๋ฐ์ดํฐ ํจ์นญ
์๋ฒ ์ปดํฌ๋ํธ๋
async
๋ฅผ ๋ถ์ฌ์ ๋ฐ์ดํฐ ํจ์นญ ๊ฐ๋ฅ๊ธฐ์กด
getStaticProps
,getServerSideProps
๋ฅผ ๋์ฒด๋์ด์ ํ์ด์ง ์ปดํฌ๋ํธ๋ก๋ถํฐ ์๋ฒ์์ ํจ์นญํ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ ๋ฐ์ง ์์๋๋จ
"Fetching data where it's needed"
๋ฐ์ดํฐ ์บ์
fetch ๋ฉ์๋๋ฅผ ํตํด ๋ถ๋ฌ์จ ๋ฐ์ดํฐ๋ฅผ Next ์๋ฒ์ ๋ณด๊ดํ๋ ๊ธฐ๋ฅ
์๊ตฌ์ ์ผ๋ก ๋ณด๊ดํ๊ฑฐ๋, ํน์ ์๊ฐ ์ฃผ๊ธฐ๋ก ๊ฐฑ์ ๊ฐ๋ฅ
๋ถํ์ํ ๋ฐ์ดํฐ ์์ฒญ ์๋ฅผ ์ค์ฌ์ ์ฑ๋ฅ ๊ฐ์
fetch
์ ์ฉfetch('endpoint', { cache: 'force-cache' })
์ผ๋ฐ fetch๊ฐ ์๋ next ์ ์ฉ ๋ฉ์๋์
force-cache: ์์ฒญ ๊ฒฐ๊ณผ๋ฅผ ๋ฌด์กฐ๊ฑด ์บ์ฑ, ํ๋ฒ ํธ์ถ๋ ํ ๋ค์ ํธ์ถ๋์ง ์์
(default) no-store: ์์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ์ง ์์, ์บ์๋ฅผ ์ ๋ํ๋ฉด ์๋๋ ๋ฆฌ์์ค์ ์ฌ์ฉ
next15์์ ๋ณ๊ฒฝ๋จ 14์์๋ ๊ธฐ๋ณธ์ผ๋ก ์บ์ฑ
revalidate: ํน์ ์ฃผ๊ธฐ๋ง๋ค ์บ์๋ฅผ ๊ฐฑ์ (sec)
ํ์ด์ง ๋ผ์ฐํ ๋ฐฉ์์ ISR๊ณผ ์ ์ฌ
๋ง๋ฃ ๋ ํ์ ์ฒซ ์์ฒญ์ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ๊ฐฑ์ , ๋ค์ ์์ฒญ ๋ถํฐ ๊ฐฑ์ ๋ ๋ฐ์ดํฐ ๋ฐํ
tags: ํน์ ํ๊ทธ ๊ธฐ๋ฐ์ผ๋ก ์บ์๋ฅผ ๋ฌดํจํํ ์ ์๋๋ก ์ค์
์จ๋๋ฉ๋ ๋ฆฌ๋ฒจ๋ฆฌ๋ฐ์ดํธ
์์ฒญ์ด ๋ค์ด์์ ๋ ์ต์ ๋ฐ์ดํฐ ๊ฐฑ์
๋ฆฌํ์คํธ ๋ฉ๋ชจ์ด์ ์ด์
์ฌ๋ฌ ์๋ฒ ์ปดํฌ๋ํธ์์ ์ค๋ณต๋ ์์ฒญ๋ค์ ์บ์ฑํด์ ํ ๋ฒ๋ง ์์ฒญํ๋๋ก ์ต์ ํ
๋ฐ์ดํฐ ์บ์์๋ ๋ค๋ฆ
ํ๋์ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ๋์ ์ค๋ณต๋ ์์ฒญ๋ค์ ํํด์ ์บ์ฑํ๊ธฐ ์ํด ์ฌ์ฉ
๋ ๋๋ง์ด ์ข ๋ฃ๋๋ฉด ์บ์ ์๋ฉธ
ํ ๋ผ์ฐํธ ์บ์
Next ์๋ฒ์ธก์์ ๋น๋ ํ์์ ํน์ ํ์ด์ง์ ๋ ๋๋ง ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ๋ ๊ธฐ๋ฅ
SSG์ ์ ์ฌํ ๋ฐฉ์
๋ค์ด๋๋ฏน ํ์ด์ง๋ก ์์ฑ๋๋ ํ์ด์ง ์ธ ๋ชจ๋ ์ ์ ํ์ด์ง๋ก ์์ฑ๋จ (Default)
๋์ ํจ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ์ดํฐ ์บ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
๋ค์ด๋๋ฏน ํ์ด์ง๋ก ์ค์ ๋๋ ๊ธฐ์ค
์๋ฒ ์ปดํฌ๋ํธ๋ง ํด๋น, ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ํ์ด์ง ์ ํ์ ์ํฅ์ ๋ฏธ์น์ง ์์
ํน์ ํ์ด์ง๊ฐ ์ ์ ์์ฒญ์ ๋ฐ์ ๋ ๋ง๋ค๋งค๋ฒ ๋ณํ๊ฐ ์๊ธฐ๊ฑฐ๋, ๋ฐ์ดํฐ๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ
์บ์๋์ง ์๋ Data Fetching์ ์ฌ์ฉํ ๊ฒฝ์ฐ
ํด๋น ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ค์ ์๋์ผ๋ก ๋ค์ด๋๋ฏน ํ์ด์ง๋ก ์ค์ ๋๋ค.
๋์ ํจ์ (์ฟ ํค, ํค๋, ์ฟผ๋ฆฌ์คํธ๋ง) ์ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๊ฐ ์์ ๋
์์ฒญ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๋ ๊ฐ๋ค
Revalidate
ํ์ด์ง ๋ผ์ฐํธ์ ISR ๋ฐฉ์๊ณผ ์ ์ฌ
ํ ๋ผ์ฐํธ ์บ์๋ก ๋์ํ๋ ํ์ด์ง ๋ด๋ถ์์
revalidate
์ต์ ์ด ์ ์ฉ๋ ๋ฐ์ดํฐ ํจ์นญ์ด ์กด์ฌํ๋ค๋ฉดtanstack-query์ ๋น์ท, reavlidate time์ด ๊ฒฝ๊ณผํ๋ค๋ฉด ์ฐ์ ํ๋ผ์ฐํธ ์บ์ฑ๋ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ๋ฐ์ดํฐ ์บ์๋ฅผ ์ ๋ฐ์ดํธ ํ ํ ๋ผ์ฐํธ ์บ์ ์ ๋ฐ์ดํธ, ์ดํ ์์ฒญ์ ์ ๋ฐ์ดํธ ๋ ํ์ด์ง ๋ฐํ
Suspense
useSearchParams
ํ ์ ํ์ฌ ์์ฒญ๋ฐ์ ํ์ด์ง์ ์ฟผ๋ฆฌ์คํธ๋ง์ ์กฐํํ๋ ์ญํ์ฟผ๋ฆฌ์คํธ๋ง์ ๋น๋ํ์์ ์กด์ฌํ ์ ์์
๋น๋ํ์์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ์คํํ ๋ ๋น๋ ํ์์ ์ ์ ์๋ ์ฟผ๋ฆฌ์คํธ๋ง ๊ฐ์ ๊ฐ์ ์ฌ์ฉํ๋ ํ ์ ๋ง๋๋ฉด ์๋ฌ๋ฅผ ๋ฐ์
ํด๋ผ์ด์ธํธ์ธก์์๋ง ์คํ๋๋๋ก, ์ฆ ์ฌ์ ๋ ๋๋ง์ ๋ฐฐ์ ๋๋๋ก ์ค์ ํด์ผํจ
ํด๋น ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ
<Suspense>
๋ก ๊ฐ์ธ๋ฉด ๋จ๋ฅ์คํธ ์๋ฒ๋ ์ฌ์ ๋ ๋๋งํ ๋
<Suspense>๋ฅผ
๋ง๋๋ฉด ๊ณง๋ฐ๋ก ๋ ๋๋งํ์ง ์๊ณ Fallback ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํจ
์ฟผ๋ฆฌ์คํธ๋ง์ ๋ถ๋ฌ์ค๋ useSearcmParams ๋ ๋น๋๊ธฐ๋ก ๋์ํจ
์ฟผ๋ฆฌ์คํธ๋ง์ ๋ถ๋ฌ์์ผ ๋น๋๊ธฐ๊ฐ ์ข ๋ฃ๋จ
generateStaticParams
๋์ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋ ํ์ด์ง๋ฅผ ์ ์ ํ์ด์ง๋ก์ ๋น๋ ํ์์ ์์ฑ๋๋๋ก ํ๋ ๋ฐฉ๋ฒ
๋น๋ํ์์ ๋ฅ์คํธ์๋ฒ๊ฐ ํ์ด์ง์ ์ด๋ค ๊ฒฝ๋ก(ํ๋ผ๋ฏธํฐ)๊ฐ ์กด์ฌํ ์ ์๋์ง ์ ์ํ์ฌ ๋ฆฌํด
๋ฏธ๋ฆฌ ์ ์ํ์ง ์์ (ํ๋ผ๋ฏธํฐ)ํ์ด์ง์ ๋ํด์๋ ๋์ผํ๊ฒ ๋ชจ๋ ์ ์ ํ์ด์ง๋ก ์ค์ ๋จ (๋ค๋ง ๋์์ด ์กฐ๊ธ ๋ค๋ฆ)
๋ฏธ๋ฆฌ ์ ์ํ์ง ์์ ํ๋ผ๋ฏธํฐ์ ๊ฒฝ์ฐ๋ ์๋ฒ์ ์์ฒญ์ด ๋ค์ด์์ ๋ ์ค์๊ฐ์ผ๋ก ๋ฅ์คํธ ์๋ฒ์ ์์ฑ๋์ด ์ดํ ์์ฒญ์ ํ ๋ผ์ฐํธ ์บ์ฑ์ด ์ ์ฉ๋จ
๋ฅ์คํธ์์๋ ๋์ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋ ํ์ด์ง์ ํํด ์์ธ์ ์ผ๋ก
generateStaticParams
ํจ์๊ฐ ์กด์ฌํ๋ค๋ฉด, ๋ฌด์กฐ๊ฑด ์ ์ ํ์ด์ง๋ก ์ค์ ํ๊ฒ๋จ
ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ฌธ์์ด๋ก๋ง ์์ฑ
generateStaticParams
๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํ์ด์ง ๋ด๋ถ์ ๋ฐ์ดํฐ ์บ์ฑ์ด ์ ์ฉ๋์ง ์์ ๋ฐ์ดํฐ ํจ์นญ์ด ์๋๋ผ๋ ๋ฌด์กฐ๊ฑด ํด๋น ํ์ด์ง๋ ๊ฐ์ ๋ก ์ ์ ํ์ด์ง๋ก ์์ฑ๋จํ์ด์ง ๋ผ์ฐํฐ์
getStaticPaths
์ ๋์ผ
generateStaticParams
๋ก ๋ฏธ๋ฆฌ ์ ์ํ ํ๋ ์ธ ๋ค๋ฅธ๊ฐ์ผ๋ก ๋ค์ด์จ ํ์ด์ง ์์ฒญ๊ฑด ๋ชจ๋ 404๋ก ๋ณด๋ด๋ฒ๋ฆฌ๊ณ ์ถ์ ๊ฒฝ์ฐ
๋ผ์ฐํธ ์ธ๊ทธ๋จผํธ ์ต์
ํ์ด์ง ๋ด๋ถ์์ ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ๋ค์ ๋ฐ์ดํฐ ํจ์นญ ์บ์ฑ, ๋ฆฌ๋ฒจ๋ฆฌ๋ฐ์ดํธ ํ์์ ๊ฐ์ ๋ก ์ค์
์ฆ, ํน์ ํ์ด์ง๋ฅผ ๊ฐ์ ๋ก ์ ์ ํ์ด์ง ๋๋ ๋์ ํ์ด์ง๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ
dynamicParams
์ ๊ฐ์ด ์ฝ์๋ ๋ณ์๋ฅผ ์ ์ธ ํ ๊ฐ์ ์ค์ ํ์ฌ ๋ฐํํ๋ ํ์ด์ง ์ค์ ์ ๋ผ์ฐํธ ์ธ๊ทธ๋จผํธ ์ต์ ์ด๋ผํจ
dynamic
ํน์ ํ์ด์ง์ ์ ํ์ ๊ฐ์ ๋ก static, dynamic ํ์ด์ง๋ก ์ค์
auto [default]: ์๋ฌด๊ฒ๋ ๊ฐ์ ํ์ง ์์
force-dyanmic: ํ์ด์ง๋ฅผ ๊ฐ์ ๋ก ๋์ ํ์ด์ง๋ก ์ค์
force-static: ํ์ด์ง๋ฅผ ๊ฐ์ ๋ก ์ ์ ํ์ด์ง๋ก ์ค์
๋์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ํ์ด์ง์์ ๋ฌธ์ ๋ฐ์, ๋น๊ฐ์ผ๋ก ๋ค์ด์ด
error: ํ์ด์ง๋ฅผ ๊ฐ์ ๋ก ์ ์ ํ์ด์ง๋ก ์ค์
์ ์ ํ์ด์ง๋ก ์ค์ ํ๋ฉด ์๋๋ ์ด์ (๋์ ํจ์, ๋ฐ์ดํฐ ํจ์นญ ์บ์ ๋ฑ)์ ๋น๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํด
์ ๋ง ํน๋ณํ ์ํฉ์ด ์๋๋ฉด ๊ถ์ฅํ์ง ์์
ํด๋ผ์ด์ธํธ ๋ผ์ฐํธ ์บ์
๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ ์บ์
ํ์ด์ง ์ด๋์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด RSC Payload์์ ์ถ์ถํ ํ์ด์ง ์ผ๋ถ ๋ฐ์ดํฐ(๋ ์ด์์)๋ฅผ ๋ณด๊ดํจ
์ฌ๋ฌ ํ์ด์ง๊ฐ ๊ณตํต๋ ๋ ์ด์์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ํด์ ์ ๋ฌ๋ฐ๊ฒ ๋๋ ๋ฌธ์ ๋ฐ์
์ด๋ฐ ๋นํจ์จ์ ์ค์ด๊ธฐ ์ํด ๋ฅ์คํธ๋
ํด๋ผ์ด์ธํธ ๋ผ์ฐํฐ ์บ์
๋ผ๋ ์๋ก์ด ์บ์ ๊ณต๊ฐ์ ๋ง๋ จํด์ ํด๋น ๋ฐ์ดํฐ๋ค์ ์๋ ๋ณด๊ด๊ธฐ๋ณธ์ ์ผ๋ก ์๋ก๊ณ ์นจ์ ๋ชจ๋ ๋น์์ง๊ฒ๋จ
์คํธ๋ฆฌ๋ฐ์ด๋
*์คํธ๋ฆผ[(์ก์ฒดยท๊ธฐ์ฒด๊ฐ) ์ค์ค[๊ณ์] ํ๋ฅด๋ค[ํ๋ฌ๋์ค๋ค] )], ์๊ฒ ์ชผ๊ฐ์ง ๋ฐ์ดํฐ๋ค์ ์ฐ์์ ์ผ๋ก ๋ณด๋ด์ฃผ๋ ๊ธฐ์
ํด๋ผ์ด์ธํธ ์ ์ฅ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์ง ์์ ์ํ์์๋ ํ์ฌ๊น์ง ๋ฐ์ ๋ฐ์ดํฐ ์ผ๋ถ์ ์ ๊ทผ ๊ฐ๋ฅ
ํ๋ฉด ๋ ๋๋ง ์, ๋ธ๋กํน ์์ด ์ฆ์ ๋ณด์ฌ์ค ์ ์๋ ๋ถ๋ถ์ ๋จผ์ ๋น ๋ฅด๊ฒ ๋ ๋๋งํ๊ณ , ๋ฐ์ดํฐ ํจ์นญ์ด ํ์ํ ์์ญ์ ์ฐ์ ํด๋ฐฑ UI๋ฅผ ๋ณด์ฌ์ค ๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์ง์ ์ผ๋ก ๋ฐ์์ ์ ์ฒด ํ๋ฉด์ด ๋งํ์์ด ์์ฐ์ค๋ฝ๊ฒ ๊ทธ๋ ค์ง๋๋ก ํ๋ ๋ฐฉ์
Next.js
Dynamic Page
์์ ์์ฃผ ์ฌ์ฉ๋จ
loading.tsx
๋น๋๊ธฐ ํ์ด์ง ์ปดํฌ๋ํธ์ ์คํธ๋ฆฌ๋ฐ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ
loading.tsx
๋ฅผ ํ์ฉํ๋ฉด, ํ์ด์ง๊ฐ ๋ฐ์ดํฐ ํจ์นญ์ผ๋ก ์ธํด ์ง์ฐ๋๋ ์ํฉ์์๋ ํด๋ฐฑ UI๋ฅผ ๋จผ์ ๋ณด์ฌ์ค ์ ์์async
๊ฐ ๋ถ์ ๋น๋๊ธฐ ํ์ด์ง ์ปดํฌ๋ํธ๋ฅผ ์คํธ๋ฆฌ๋ฐ ํ๋๋ก ์ค์ ๋์ผ ๊ฒฝ๋ก์ ํ์ด์ง ์ปดํฌ๋ํธ๋ง ์คํธ๋ฆฌ๋ฐ๋๋ ๊ฒ์ด ์๋๋ผ, ๋ ์ด์์ ์ปดํฌ๋ํธ์ฒ๋ผ ํด๋น ๊ฒฝ๋ก ๋ด๋ถ์ ํฌํจ๋ ๋ชจ๋ ๋น๋๊ธฐ ํ์ด์ง ์ปดํฌ๋ํธ๋ค๊น์ง ์คํธ๋ฆฌ๋ฐ๋๋๋ก ์ค์ ๋จ
์ฟผ๋ฆฌ์คํธ๋ง์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ๋ ํธ๋ฆฌ๊ฑฐ๋์ง ์์
์ด ๊ฒฝ์ฐ์๋ ์คํธ๋ฆฌ๋ฐ์ ์ ์ฉ์ํค๊ณ ์ถ๋ค๋ฉด
Suspense
์ฌ์ฉ
Suspense
์ปดํฌ๋ํธ๋ณ๋ก ์ธ๋ฐํ๊ฒ ์คํธ๋ฆฌ๋ฐ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ
Suspense(๋ฏธ์์ฑ), ์คํธ๋ฆฌ๋ฐํ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ธ ํด๋น ์ปดํฌ๋ํธ๊ฐ ์์ ํ ์ค๋น๋ ๋๊น์ง ํด๋ฐฑ UI๋ฅผ ๋จผ์ ๋ ๋๋งํด์ฃผ๋ ์ญํ
์ฟผ๋ฆฌ์คํธ๋ง์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ๊ธฐ๋ณธ์ ์ผ๋ก๋
Suspense
๊ฐ ๋ค์ ํธ๋ฆฌ๊ฑฐ๋์ง ์์ง๋ง,key
props๋ฅผ ํ์ฉํ๋ฉด ํน์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ก๋ฉ ์ํ๋ก ๋ค์ ๋์๊ฐ๋๋ก ์ค์ ๊ฐ๋ฅ๋ณ๋ ฌ๋ก ํ๋์ ํ์ด์ง์ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ค์ ์๋ฃ๋๋ ์์๋๋ก ๊ฐ๊ฐ ๋ ๋๋ง ๊ฐ๋ฅ
์ค์ผ๋ ํค UI
๋ผ๋ ์ญํ ์ ํ๋ UI
๋ก๋ฉ ์๊ฐ์ ๋๋ต ์ด๋ป๊ฒ ์๊ธด ์ปจํ ์ธ ๊ฐ ๋์ฌ์ง ๋ฏธ๋ฆฌ ์์ธก ๊ฐ๋ฅ
๋ ์ด์์ ์ฌํํธ ๋ฐฉ์ง
error.tsx
์๋ฌํธ๋ค๋ง
use client
ํค์๋๋ก ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ์ค์ ์๋ฌ๋ ์๋ฒ/ํด๋ผ์ด์ธํธ ๋ง๋ก ํ๊ณ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋ ๋ ๋๋ง๋๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ์์ฑ
error.tsx
๋ ํ์ฌ ์์ ์ ๊ฒฝ๋ก์ ํด๋นํ๋ layout๊น์ง๋ง ๋ ๋๋ง๊ฐ์ ๊ฒฝ๋ก ๋๋ ํ์ ๊ฒฝ๋ก์ ์๋ฌ๊ฐ ๋ฐ์ํ์๋ ํ์ด์ง ์ปดํฌ๋ํธ ๋์ ํด๋น ์๋ฌ ์ปดํฌ๋ํธ ๋ ๋๋ง
์๋ฌ ์ปดํฌ๋ํธ๋ ์๋ฌ ์ ๋ณด๋ฅผ ํฌํจํ๋ error ๋ฐ์ดํฐ, error๋ฅผ ๋ฆฌ์ ์์ผ์ฃผ๋ ํจ์๋ฅผ props๋ก ์ ๊ณตํ๋ค.
error
: ์๋ฐ์คํฌ๋ฆฝํธ ์๋ฌ ๊ฐ์ฒด๋ก, ์ด๋ค ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์reset
: ์๋ฌ ์ํ๋ฅผ ์ด๊ธฐํํ๊ณ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋ง์ํค๋ ํจ์reset
์ ํด๋ผ์ด์ธํธ ์ธก์์๋ง ๋์ํ๋ฉฐ, ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ์คํํ๊ฑฐ๋ ์๋ฒ ๋ฐ์ดํฐ๋ฅผ refetch ํ์ง๋ ์์. ์ฆ, ํด๋ผ์ด์ธํธ์์ ๋ฐ์ํ ์ค๋ฅ๋ง ๋ฆฌ์ ๊ฐ๋ฅํจNext.js์์ ์ ๊ณตํ๋
useRouter
์refresh
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ์คํํ ์ ์์. ์ดrefresh
ํจ์๋ ํ์ฌ ํ์ด์ง์์ ํ์ํ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ Next ์๋ฒ ์ธก์ ์ฌ์์ฒญํ๋๋ก ํธ๋ฆฌ๊ฑฐํจ -> refersh๋ก ์๋ฒ ํด๋ผ์ด์ธํธ๋ฅผ ๋ค์ ๋ฐ์ ํ์ reset์ด ์งํ๋์ด์ผํจ
ํ์ง๋ง refresh
ํจ์์ ๋ฐํ๊ฐ์ void
์ด๊ธฐ ๋๋ฌธ์ async/await
์ผ๋ก ๊ธฐ๋ค๋ฆด ์๋ ์์.
์ด๋ฐ ๊ฒฝ์ฐ์๋ React์ startTransition
์ ์ฌ์ฉํ๋ฉด ํด๊ฒฐ ๊ฐ๋ฅ
startTransition
๋น๋๊ธฐ UI ์
๋ฐ์ดํธ ์์
์ ์ผ๊ด๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ์ฝ๋ฐฑ์ ๊ฐ์ธ์ ์คํํดํ๋ฉด,
์๋ฒ ๋ฐ์ดํฐ๋ฅผ ์๋ก ๋ฐ์์ค๊ณ ์ดํ reset
์ ํธ์ถํ๋ ํ๋ฆ์ ์์ฐ์ค๋ฝ๊ฒ ๊ตฌ์ฑ
startTransition
๋ ์์
์ ์ฐ์ ์์๊ฐ ๋ฎ์ transition(๋ณํ) ๋จ์๋ก ๋ฌถ์ด์ค,
transition ๋จ์๋ก ๋ฌถ์ธ ์์
๋ค์ ์ผ๊ด์ ์ผ๋ก ์
๋ฐ์ดํธ
์ฆ, refersh(์๋ฒ๋ฐ์ดํฐ ์
๋ฐ์ดํธ)์ reset(์๋ฌ ์ด๊ธฐํ & ๋ฆฌ๋ ๋๋ง)๋ฅผ ํ๋์ transition์ผ๋ก ๋ฌถ์ด์ฃผ๋ฉด ๋ ํจ์ ๊ฒฐ๊ณผ๊ฐ ํ๋ฉด์ ๋ฐ์๋จ
์๋ฒ ์ก์
๋ธ๋ผ์ฐ์ ์์ ํธ์ถํ ์ ์๋ ์๋ฒ์์ ์คํ๋๋ ๋น๋๊ธฐ ํจ์
use server
-> ๋ฅ์คํธ ์๋ฒ์์๋ง ์คํ๋๋ ์๋ฒ ์ก์ ์ง์์์๋ฒ์์๋ง ์คํ๋๋ ํจ์๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ํธ์ถ, ๋ฐ์ดํฐ๋ฅผ FormData ํ์์ผ๋ก ์ ๋ฌ
๊ธฐ์กด์ api๋ก ์๋ฒ์ ํต์ ํด์ผํ๋ค๋ฉด ์ด์ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์ ํ๋๋ง์ผ๋ก ์๋ฒ์ ํต์ ๊ฐ๋ฅํด์ง
๊ฐ๋จํ ์๋ฒ ํจ์ ํ๋๋ก api ์ญํ ์ ๋์ฒด ๊ฐ๋ฅ
Last updated