2024๋ 10์ 21์ผ Next15 ๋ฒ์ ์ด ๊ณต์ ๋ธ๋ก๊ทธ์ ์ ๋ฐ์ดํธ๋์๋ค.
๊ณต์์ ์ผ๋ก ์์ ํ๋์ด ํ๋ก๋์ ์์ ์ฌ์ฉํ ์ค๋น๊ฐ ์๋ฃ๋์๋ค๊ณ ํ๋ค.
์ด๋ฒ ๋ฆด๋ฆฌ์ฆ๋ RC1๊ณผ RC2์ ์ ๋ฐ์ดํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ์์ ์ฑ์ ์ค์ ์ ๋๋ฉด์๋ ํฅ๋ฏธ๋ก์ด ์ ๋ฐ์ดํธ๋ฅผ ์ถ๊ฐํ์๋ค๊ณ ํ๋ค.
10์ 24์ผ์ ์ด๋ฆฐ Next.js Conf๊ฐ ์์๋๋ฐ, ์ฌ์ ์ ์ฒญํ๊ณ ๋ชป ๋ค์ด์ ๋ นํ๋ณธ์ ๋ณด๊ณ ๋ค์์ ๊ทธ ๋ด์ฉ์ ๋ํ ํฌ์คํ ๋ ํ ์์ ์ด๋ค.
Next15์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
# ์๋ก์ด ์๋ ์
๊ทธ๋ ์ด๋ CLI ์ฌ์ฉ
npx @next/codemod@canary upgrade latest
# ...๋๋ ์๋์ผ๋ก ์
๊ทธ๋ ์ด๋
npm install next@latest react@rc react-dom@rc
Next.js 15์ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ฐ๋ตํ๊ฒ ์๊ฐํ์๋ฉด, ๋ค์๊ณผ ๊ฐ๋ค.
- @next/codemod CLI : ์ต์ Next.js ๋ฐ React ๋ฒ์ ์ผ๋ก ์ฝ๊ฒ ์ ๊ทธ๋ ์ด๋ํ ์ ์๋ ๋๊ตฌ.
- Async Request APIs (Breaking) : ๋ ๋๋ง ๋ฐ ์บ์ฑ ๋ชจ๋ธ์ ๋จ์ํํ๊ธฐ ์ํ ์ ์ง์ ๋จ๊ณ๋ก, ์์ฒญ ๋ฐ์ดํฐ๊ฐ ํ์ํ API๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๋ณ๊ฒฝํ์์. (ํธํ์ฑ ๊นจ์ง)
- Caching Semantics (Breaking) : fetch์์ฒญ, GET๋ผ์ฐํธ ํธ๋ค๋ฌ, ํด๋ผ์ด์ธํธ ๋ค๋น๊ฒ์ด์ ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์บ์ฑ๋์ง ์๋๋ก ๋ณ๊ฒฝ (ํธํ์ฑ ๊นจ์ง)
- React 19 Support : React 19, React Compiler(์คํ์ ), ํ์ด๋๋ ์ด์ ์ค๋ฅ ๊ฐ์ ์ ์ง์.
- Turbopack Dev (Stable) : ์ฑ๋ฅ ๋ฐ ์์ ์ฑ์ด ํฅ์๋์์.(์์ ํ)
- Static Indicator : ๊ฐ๋ฐ ์ค ์ ์ ๋ผ์ฐํธ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ์ํ๋ ์๋ก์ด ์ธ๋์ผ์ดํฐ ์ถ๊ฐ.
- unstable_after API (Experimental) : ์๋ต ์คํธ๋ฆฌ๋ฐ์ด ์๋ฃ๋ ํ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ API. (์คํ์ )
- instrumentation.js API (Stable) : ์๋ฒ ๋ผ์ดํ์ฌ์ดํด ๊ด์ฐฐ์ ์ํ ์๋ก์ด API. (์์ ํ)
- Enhanced Forms (next/form) : HTML ํผ์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ค๋น๊ฒ์ด์ ๊ณผ ํจ๊ป ํฅ์ํจ.
- next.config: next.config.ts์ ๋ํ TypeScript ์ง์์ ์ถ๊ฐ.
- Self-hosting Improvements : Cache-Control ํค๋์ ๋ํ ์ ์ด๋ฅผ ๊ฐํ.
- Server Actions Security: ์ถ์ธกํ ์ ์๋ ์๋ํฌ์ธํธ์ ์ฌ์ฉ๋์ง ์๋ ์ก์ ์ ๊ฑฐ๋ฅผ ํตํด ๋ณด์์ ๊ฐํ.
- Bundling External Packages (Stable): App ๋ฐ Pages ๋ผ์ฐํฐ์ ๋ํ ์๋ก์ด ๊ตฌ์ฑ ์ต์ ์ ์ถ๊ฐ. (์์ ํ)
- ESLint 9 Support: ESLint 9์ ์ง์.
- Development and Build Performance: ๋น๋ ์๊ฐ ๊ฐ์ ๋ฐ ๋น ๋ฅธ ์๋ก ๊ณ ์นจ ์๋๊ฐ ํฅ์.
@next/codemod CLI๋ฅผ ํตํ ์ํํ ์ ๊ทธ๋ ์ด๋
๋ชจ๋ ์ฃผ์ Next.js ๋ฆด๋ฆฌ์ฆ์๋ ํธํ์ฑ ๊นจ์ง ๋ณ๊ฒฝ ์ฌํญ์ ์๋์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ์ ์๋๋ก codemod(์๋ ์ฝ๋ ๋ณํ)๋ฅผ ํฌํจํ๊ณ ์๋ค. ์ ๊ทธ๋ ์ด๋๋ฅผ ๋์ฑ ์ํํ๊ฒ ํ๊ธฐ ์ํด ํฅ์๋ codemod CLI๋ฅผ ์ถ์ํ์๋ค.
npx @next/codemod@canary upgrade latest
Async Request APIs (Breaking) ๋น๋๊ธฐ API ์์ฒญ (ํธํ์ฑ ๊นจ์ง)
์ ํต์ ์ธ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์์๋ ์๋ฒ๊ฐ ์์ฒญ์ ๊ธฐ๋ค๋ฆฐ ํ ์ฝํ ์ธ ๋ฅผ ๋ ๋๋ง ํ๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ์์ฒญ๋ณ ๋ฐ์ดํฐ์ ์์กดํ๋ ๊ฒ์ ์๋๋ฏ๋ก, ์์ฒญ์ ๊ธฐ๋ค๋ฆด ํ์ ์์ด ๋ ๋๋ง ํ ์ ์๋ค. ์ด๋ฐ ์ต์ ํ๋ฅผ ์ํด ์์ฒญ๋ณ ๋ฐ์ดํฐ์ ์์กดํ๋ API(headers, cookies, params, searchParams ๋ฑ)๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ ํํ๊ณ ์๋ค.
import { cookies } from 'next/headers';
export async function AdminPanel() {
const cookieStore = await cookies();
const token = cookieStore.get('token');
// ...
}
์ด ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์ API์ ์ํฅ์ ๋ฏธ์น๋ค :
- cookies
- headers
- draftMode
- params in layout.js, page.js, route.js, default.js, generateMetadata, and generateViewport
- searchParams in page.js
๋ ์ฌ์ด ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํด, ์ด๋ฌํ API๋ ์ผ์์ ์ผ๋ก ๋๊ธฐ์ ์ผ๋ก ์ ๊ทผํ ์ ์์ง๋ง ๋ค์ ์ฃผ์ ๋ฒ์ ๊น์ง ๊ฐ๋ฐ ๋ฐ ํ๋ก๋์ ์์ ๊ฒฝ๊ณ ๋ฅผ ํ์ํ๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์ ์๋ํํ๊ธฐ ์ํ codemod๊ฐ ์ ๊ณต๋๋ค.
Caching Semantics (Breaking) ์บ์ฑ ๋ฐฉ์ (ํธํ์ฑ ๊นจ์ง)
Next.js 15์์๋ GET๊ฒฝ๋ก ํธ๋ค๋ฌ์ ํด๋ผ์ด์ธํธ ๋ผ์ฐํฐ์ ๊ธฐ๋ณธ ์บ์ฑ ๋์์ด ์ ๋ฐ์ดํธ๋์๋ค.
GET Router ํธ๋ค๋ฌ
Next.js 13์์๋ GET์์ฒญ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์บ์ ๋์๋ค. ์ฆ, ๋์ผํ ์์ฒญ์ด ์ด๋ฃจ์ด์ง ๋ Next.js๊ฐ ์ด์ ์๋ต์ ์ ์ฅํ๊ณ ์ฌ์ฌ์ฉํ์ฌ ๋ถํ์ํ ๋คํธ์ํฌ ํธ์ถ์ ๋ฐฉ์งํ์๋ค. ํ์ง๋ง Next.js 15์์๋ ๋ ์ด์ ๊ธฐ๋ณธ์ ์ผ๋ก GET ์์ฒญ์ ์บ์ ํ์ง ์๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ ์ ์์ฒญ๋ง๋ค ์ต์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋๋ก ์ค๊ณ๋์๋ค.
๋ง์ฝ ์บ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ export const dynamic = 'force-static' ์ ์ฌ์ฉํ์ฌ GET์์ฒญ์ ๋ํด ๊ฐ์ ์ ์ผ๋ก ์ ์ ์บ์๋ฅผ ํ์ฑํํ ์ ์๋ค. ์ด๋ฅผ ํตํด ํน์ GET ๊ฒฝ๋ก๊ฐ ์ ์ ์ผ๋ก ์บ์ ๋๋๋ก ๋ณด์ฅํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ฒ ์ค์ ๋ ๊ฒฝ๋ก๋ ์ผ์ ์๊ฐ ๋์ ๊ณ ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค.
ํด๋ผ์ด์ธํธ ๋ผ์ฐํฐ
Next.js 15์์๋ ํด๋ผ์ด์ธํธ ๋ผ์ฐํฐ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ด์ง ์ปดํฌ๋ํธ๋ฅผ ์บ์ ํ์ง ์๋๋ค.
์ด์ ๋ฒ์ ์์๋ ํ์ด์ง๊ฐ ์บ์๋์ด ํ์ด์ง ์ ํ ์ ๋ ๋น ๋ฅด๊ฒ ๋ก๋๋์์ง๋ง, ์ด์ ๋ ํ์ด์ง๊ฐ ํญ์ ์ต์ ์ํ๋ก ์ ์ง๋๋ค. ์ฆ, ํ์ด์ง ์ปดํฌ๋ํธ๊ฐ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ๋ฐ์ํ์ฌ ๋ ๋๋ง ๋๋ค.
๊ธฐ์กด์ ์บ์ฑ ๋์์ ์ ์งํ๊ณ ์ถ๋ค๋ฉด staleTimes ์ค์ ์ ์ฌ์ฉํ์ฌ ํ์ด์ง ์บ์ฑ์ ํ์ฑํํ ์ ์๋ค.
staleTimes๋ฅผ ์ ์ ํ ์ค์ ํ๋ฉด ํ์ด์ง๊ฐ ์ผ์ ์๊ฐ ๋์ ์บ์๋ ์ํ๋ก ์ ์ง๋๋ฉฐ ์ฌ์ฉ์๊ฐ ํด๋น ํ์ด์ง๋ก ๋์์์ ๋ ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์๋ค.
const nextConfig = {
experimental: {
staleTimes: {
dynamic: 30,
},
},
};
export default nextConfig;
React 19
Next.js 15๋ฆด๋ฆฌ์ฆ์ ์ผํ์ผ๋ก ๋ค๊ฐ์ค๋ React 19 ๋ฆด๋ฆฌ์ฆ์ ๋ง์ถ๊ธฐ๋ก ๊ฒฐ์ ํ์๋ค๊ณ ํ๋ค. 15์์๋ App Router๊ฐ React 19 RC๋ฅผ ์ฌ์ฉํ๋ฉฐ, Pages Router์ ๋ํด์๋ ์ปค๋ฎค๋ํฐ ํผ๋๋ฐฑ์ ๊ธฐ๋ฐ์ผ๋ก React 18๊ณผ์ ํ์ ํธํ์ฑ์ ๋์ ํ๋ค. Pages Router๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ค๋น๊ฐ ๋์์ ๋ React 19๋ก ์ ๊ทธ๋ ์ด๋ํ ์ ์๋ค.
React 19๋ ์์ง RC(Release Candidate) ๋จ๊ณ์ ์์ง๋ง, ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๊ด๋ฒ์ํ ํ ์คํธ์ React ํ๊ณผ์ ๊ธด๋ฐํ ํ์ ์ ํตํด ๊ทธ ์์ ์ฑ์ ๋ํ ํ์ ์ ์ป์๋ค๊ณ ํ๋ค. ํต์ฌ์ ์ธ ๋ณ๊ฒฝ ์ฌํญ๋ค์ ์ถฉ๋ถํ ํ ์คํธ๋์๊ณ ๊ธฐ์กด App Router ์ฌ์ฉ์๋ค์๊ฒ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค๊ณ ํ๋ค. ํ๋ก์ ํธ๊ฐ React 19 GA(General Availability)์ ์์ ํ ์ค๋น๋ ์ ์๋๋ก Next.js 15๋ฅผ ์ง๊ธ ์์ ๋ฒ์ ์ผ๋ก ์ถ์ํ๊ธฐ๋ก ๊ฒฐ์ ํ์๋ค๊ณ ํ๋ค.
์ ํ์ ์ํํ๊ฒ ํ ์ ์๋๋ก codemod์ ์๋ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํ์ฌ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ์ ์ ์ง์ํ๋ค.
๋ช ๊ฐ์ง ์ฃผ์ ์ฌํญ๋ค์ ์์๋ณด์๋ค. ๋งค๋ฒ ๋๋ผ๋ ๊ฑฐ์ง๋ง, ํ๋ก ํธ์๋ ์ํ๊ณ๋ ํญ์ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๊ฒ ๊ฐ๋ค.
Next.js 13 ๋ฒ์ ์ด 2022๋ 10์ 25์ผ์ ์ถ์๋์๊ณ , 14 ๋ฒ์ ์ด 2023๋ 10์ 26์ผ, 15 ๋ฒ์ ์ด 2024๋ 10์ 21์ผ๋ก ์ฝ 1๋ ๊ฐ๊ฒฉ์ผ๋ก ์ถ์๋๊ณ ์๋ค.
React.js ๋ 16 ๋ฒ์ ์ด 2017๋ 9์ 26์ผ, 17 ๋ฒ์ ์ด 2020๋ 10์ 20์ผ, 18 ๋ฒ์ ์ด 2022๋ 3์ 29์ผ, 19 ๋ฒ์ ์ด 2024๋ 4์ 25์ผ(RC)์ด๋ค.
ํ๋ฅญํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก ์ฑ์ฅํ๊ธฐ ์ํด ์์ฃผํ์ง ์๊ณ , ๋์์์ด ๋ ธ๋ ฅํ๊ณ ์ฑ์ฅํ๋ ์ฌ๋์ด ๋์ด์ผ๊ฒ ๋ค.
๐ธ ์ถ์ฒ ๐ธ
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ React 18+ ] RSC(React Server Componen) ํํค์น๊ธฐ. (0) | 2024.11.17 |
---|---|
React 18 ๋ณ๊ฒฝ์ ์ ๋ฆฌ (0) | 2024.11.03 |
[ React ] React 19 RC์ ๋ํด์ ์์๋ณด์ (0) | 2024.09.23 |
[ React ] React์ export์ export default ์ฐจ์ด์ ์์๋ณด๊ธฐ (0) | 2024.08.18 |
[ React ] Chart UI ๊ตฌํ์ ์ํ React ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ฆฌ (0) | 2024.06.23 |