์ผ๋ง์ release ๋ nextjs 13 version์์ ์ฃผ๋ชฉํ ๋งํ feature๋ค์ ์์๋ณด์.
app/ ๋๋ ํ ๋ฆฌ (beta)
app/ ๋๋ ํ ๋ฆฌ๋ฅผ ๋์
ํ์ฌ nextjs์ routing, layout ๊ฒฝํ์ ๊ฐ์ ํ์๋ค.
app/ ์ดํ ๋๋ ํ ๋ฆฌ๋ layout ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, ์ฌ๋ฌ ํ์ด์ง๊ฐ ๊ณตํต์ ์ธ ์ปดํฌ๋ํธ๋ฅผ ๊ณต์ ํด ๋ ๋๋ง์ ์ต์ ํ ์ํค๊ณ ์ปดํฌ๋ํธ๊ฐ ์ํธ์์ฉ์ ๊ตฌํํ ์ ์๋ค. app/ ๋๋ ํ ๋ฆฌ์์ routing์ ํ๋ ค๋ฉด page.js๋ผ๋ ํ์ผ์ด ํ์ํ๋ค.
// before
// pages/index.js
// index route (/)
export default function Page() {
return <h1>Next.js 13 version release!</h1>;
}
// after (`nextjs 13`)
// app/page.js
// index route (/)
export default function Page() {
return <h1>Next.js 13 version release!</h1>;
}๊ทธ๋ฐ ๋ค์ ํ์ผ๊ตฌ์กฐ๋ฅผ ํตํด layout์ ์ ์ํ ์ ์๋ค.
export default function RootLayout({ children }) {
return (
<html>
<head>
<title>Title of nextjs root layout</title>
</head>
<body>
<h2>This is the shared title component</h2>
{children}
</body>
</html>
);
}์ด๋ ๊ฒ ์ค์ ํด๋๋ฉด app/ ์ดํ์ ๋ชจ๋ route์ RootLayout์ด ๋
ธ์ถ๋๋ค
React server component
์ด์ ๋ฒ์ ์์๋ server side์์ ๋ฐ์ดํฐ๋ฅผ fetching ํ ๋, getServerSideProps๋ getStaticProps๋ฅผ ์ฌ์ฉํ์ง๋ง, nextjs 13๋ถํฐ๋ ์ด ๋ฌธ๋ฒ๋ค์ ์ฌ์ฉํ์ง ์๋๋ค. data fetch ํจ์๋ฅผ ์ ์ธํ ๋ค์ use() ์์ ๋ฃ์ด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
import { use } from 'react';
export default function Page() {
const data = use(getData());
return <div>{ data }</div>
}
export async function getData() {
const res = await fetch(`https://dummyapi.com`, {
cache: 'force-cache' // similar to getStaticProps
// cache: 'no-store' // similar to getServerSideProps
});
return await res.json();
}TurboPack
webpack์ ํ์์ ํ์ธ Turbopack์ด ๋ฐํ๋์๋ค. Turbopack์ ๊ฐ๋ฅํ ๊ฐ์ฅ ๋น ๋ฅธ ๊ฐ๋ฐ ๊ฒฝํ์ ์ํด ์๋ก์ด ์ฆ๋ถ ์ํคํ
์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์๋ค๊ณ ํ๋ค.
๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์
์์๋ Vite๋ณด๋ค 10๋ฐฐ, Webpack๋ณด๋ค 700๋ฐฐ ๋น ๋ฅธ ์
๋ฐ์ดํธ๋ฅผ ๋ณด์ฌ์ค๋ค. ๋ ํฐ ์์ฉ ํ๋ก๊ทธ๋จ์์๋ ์ฐจ์ด๊ฐ ๋ ํฌ๋ฉฐ Vite๋ณด๋ค 20๋ฐฐ ๋น ๋ฅธ ๊ฒฝ์ฐ๋ ์๋ค. 3,000๊ฐ์ ๋ชจ๋์ด ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์์ Turbopack์ ๋ถํ
ํ๋ ๋ฐ 1.8์ด๊ฐ ๊ฑธ๋ฆฌ๋ ๋ฐ๋ฉด Vite๋ 11.4์ด๊ฐ ๊ฑธ๋ฆฐ๋ค๊ณ ํ๋ค.
์์ธํ ๋ด์ฉ์ turbopack ๊ณต์ ํํ์ด์ง์์ ํ์ธํด๋ณผ ์ ์๋ค.
next/link ๊ฐ์
์ด์ next/link ์ฌ์ฉ์ <a> ํ๊ทธ๋ฅผ ํฌํจํ ํ์๊ฐ ์๋ค
@next/font (beta)
@next/font๋ฅผ ์ค์นํด์ ์ฌ์ฉํ๋ฉด ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก google font๋ฅผ ์ฌ์ฉํ ์ ์๋ค. CSS ๋ฐ font ํ์ผ์ build์ ๋ค์ด๋ก๋ ๋๋ฉฐ ๋๋จธ์ง static asset๊ณผ ํจ๊ป ํธ์คํ
๋๋ค. ๋ธ๋ผ์ฐ์ ์์ google๋ก ์์ฒญ์ ๋ณด๋ด์ง ์๋๊ฒ์ด๋ค. ๋ํ default ๊ฐ์ผ๋ก css size-adjust ์์ฑ์ ์ฌ์ฉํ์ฌ layout shift๋ฅผ ๋ฐฉ์งํด์ค๋ค.
Opengraph image generation
์ด๋ฒ ๋ฒ์ ์์ ๋์ social card๋ฅผ ์๋ก ์์ฑํด์ฃผ๋ library์ธ @vercel/og๋ฅผ ๊ณต๊ฐํ์๋ค. ์ด ๋ฐฉ์์ ๊ธฐ์กด์ ์๋ฃจ์
๋ณด๋ค 5๋ฐฐ๋ ๋น ๋ฅด๋ค๊ณ ํ๋ค.
๊ทธ์ธ์ ๋ ์์ธํ ๋ด์ฉ์ Next.JS ๊ณต์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ์กฐํ๊ธธ ๋ฐ๋๋ค.