Next.js๋ React์ SSR(Server Side Rendering)์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ฒ ๋์์ฃผ๋ ๊ฐ๋จํ ํ๋ ์์ํฌ์ด๋ค.
์ง์ React๋ฅผ ์ด์ฉํด์ SSR์ ๊ตฌํํ๊ธฐ์ ๊ฐ๋ฅ์ ํ์ง๋ง, ์๊ฐ๋ณด๋ค ์ด๋ ต๊ณ ๋ณต์กํ ๋ถ๋ถ์ด ๋ง๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ฒ์ด ๋ฐ๋ก Nextjs๋ผ๋ ํ๋ ์์ํฌ!
์ต๊ทผ release๋ Next.js์ version 12์ ๋ช๊ฐ์ง ์ฃผ๋ชฉํ ๋งํ feature์ ๋ํด์ ์์๋ณด์!
์ด ๊ธ์ ๊ฐ๋จํ ์์ฝํ ๋ด์ฉ์ด๊ณ , ๋์ฑ๋ ์์ธํ ์ค๋ช
์ ๊ณต์๋ธ๋ก๊ทธ ์ฐธ์กฐ
Rust Compiler
compiler๊ฐ Rust๋ก ๋ณ๊ฒฝ๋๋ฉด์ ํ๋ก์ ํธ ๋น๋ ์๋๊ฐ 3๋ฐฐ, ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์๋ก๊ณ ์นจ ์๋๋ 5๋ฐฐ ์ฆ๊ฐ. SWC๋ผ๋ ์คํ ํ๋ซํผ์ ์ฌ์ฉํ๋ค.
์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ next.config.js์ ํด๋น ์ต์
์ ์ถ๊ฐํ๋ฉด ๋๋ค.
module.exports = {
swcMinify: true
}Middleware
์ฝ๋๋ ๋ฒจ์ด ์๋ ๋ค์ํ middleware๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ๋ฅ์ ์ ๊ณต
React 18 support
์ง๋ 6์ facebook์์ ๋ฐํํ๋ React18์ด ์ด๋ฒ์ ์ ์ฉ๋๋ฉด์ Suspense, startTransition, lazy์ ๊ฐ์ ์๋ก์ด api๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ค๋น๋ฅผ ํ๊ณ ์๋ค๊ณ ํ๋ค.
React Server Component
Nextjs์์ ์ ๊ณตํ๋ SSR ์ฒ๋ฆฌ ๋ฐฉ์์ธ getServersideProps, getStaticProps ๋ฑ์ ํจํด์ด ์์ด React Server Component๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฒ๋จ ๋ก์ง์ ์ฒ๋ฆฌํ ์ ์๋ค.
์ด์ ๋ณ๋ค๋ฅธ ์ฒ๋ฆฌ ์์ด .server.js์ด๋ผ๊ณ ํ์ผ๋ช
์ ๋ณ๊ฒฝํ๋ฉด SSR์ด ๋๋ค.
์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ next.config.js์ ํด๋น ์ต์
์ ์ถ๊ฐํ๋ฉด ๋๋ค.
module.exports = {
experimental: {
concurrentFeatures: true,
serverComponents: true
}
}Image tag์ AVIF format support
๋ค์ํ image format์ค ๊ฐ์ฅ ์์ถ๋ฅ ์ด ๋์ AVIF๋ฅผ Image ํ๊ทธ์ ์ต์
์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค.
module.exports = {
images: {
formats: ['image/avif', 'image/webp']
}
}URL Import
npm ๋๋ yarn์ ๋ช
๋ น์ด ์์ด, URL์ ์ด์ฉํด ์ธ๋ถ module์ importํ ์ ์๋ ๊ธฐ๋ฅ์ด๊ณ ์์ง ์คํ๋จ๊ณ๋ผ๊ณ ํ๋ค.
// 1๋ฒ ๋ฐฉ๋ฒ.
module.exports = {
experimental: {
urlImports: ['https://cdn.skypack.dev']
}
}
// 2๋ฒ ๋ฐฉ๋ฒ.
import confetti from 'https://cdn.skypack.dev/canvas-confetti'
}์ด์์ผ๋ก ๊ฐ๋ตํ๊ฒ ์ต์ Nextjs์ ๋ฒ์ 12 ์
๋ฐ์ดํธ์ ๋ํด์ ์ดํด๋ณด์๋ค. ์ฌ๋ฌ ์ฃผ๋ชฉํ ๋งํ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์๊ณ , React์๋ ๋์ํ๊ณ ์๋ ๋ชจ์ต์ด ๋ณด์ธ๋ค.
ํนํ SSR์ ๋ํ ์๋ก์ด component๊ฐ ๋ฑ์ฅํ๋ฉด์ Nextjs๋ฅผ ๋ํํ๋ feature์๋ getServersideProps, getStaticProps ๋ฑ์ด ์ ์ ์ฌ๋ผ์ง๊ฒ ๋ ์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค.
์ด๋ฏธ์ง ์ถ์ฒ: https://nextjs.org/blog/next-12