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