2022.10.26(수)에 진행 된 Next Conf에서 Next.js 신버전인 Next.js 13버전이 출시되었습니다.
아직 알파, 베타기능들이 더 많지만 서버사이드 기능 강화로 Next.js의 역할이 더욱 강해지지 않을까 생각됩니다.
추가로, 기존에 쓰던 사용법이 많이 변경되었기에 앞으로를 위해 미리미리 13버전을 학습해봐야 할 듯 합니다.
- pages폴더 라우팅 : page 폴더 > post.tsx (or) post폴더 > index.tsx
https://localhost:3000/post
- app폴더 라우팅 : app 폴더 > post 폴더 > page.tsx 파일 (page 파일 필수)
https://localhost:3000/post
app 폴더에 예약된 파일 : page.js / layout.js / loading.js / error.js / template.js
// page.js (CSR)
// 파일 상단에 'use client' 사용 시, 클라이언트 사이드 렌더링
'use client';
export default function Page() {
return <div>클라이언트 사이드 렌더링</div>;
}
// page.js (SSR)
// 'use client' 미사용 시, 서버 사이드 렌더링
export default function Page() {
return <div>서버 사이드 렌더링</div>;
}
// app/blog/layout.js (공통으로 사용 가능한 파일)
export default function BlogLayout({ children }) {
return <section>{children}</section>;
}
Turbopack 은 JavaScript 및 TypeScript에 최적화된 증분 번들러로 Rust로 작성되고 Next.js 13에 내장되어 있습니다.
13버전부터 출시된 터보팩은 vite보다 10배, webpack보다 700배 빠르게 업데이트 되기에 안정화 되었을 때, 안정화되었을 때 기대가 되는 기능 중 하나입니다.
또한, Rust 기반의 SWC Minifier 역시 13버전부터 기본 활성화 되었기에 더욱 빠른 개발, 배포환경이 기대됩니다.
터보팩 테스트 해보기
npx create-next-app --example with-turbopack
또는
yarn create next-app --example with-turbopack
next dev --turbo
로 터보팩 실행
기본 브라우저의 지연로딩 (lazy loading)으로 더욱 빨라졌으며, layout shift현상(이미지가 늦게 로딩되면서 레이아웃이 밀리는 현상)이 해결 할 수 있는 문법을 제공함
사용자 글꼴을 최적화 할 수 있는 문법 추가
<Link>
태그 아래 <a>
를 감쌀 필요가 없어졌습니다.
import Link from 'next/link'
// Next.js 12: <a>를 감싸줘야함
<Link href="/about">
<a>About</a>
</Link>
// Next.js 13: <Link>가 항상 <a>로 렌더 됨
<Link href="/about">
About
</Link>
현재 <Link>
태그 안에 <a>
태그로 감싸진 형태를 가지고있는 프로젝트를 13버전으로 올리게 된다면
바로 에러가 나기 때문에 Next.js에서 자동으로 업데이트가 가능한 codemod를 제공합니다.
npx @next/codemod new-link ./pages
./pages
부분은 루트디렉토리에서부터 업데이트를 하고 싶은 폴더로 접근하여 업데이트 시킬 수 있습니다.
그외 OG이미지 생성
, 미들웨어 API 업데이트
등 많은 기능이 메이저 업데이트 되었으며,
최소 React 버전이 17.0.2에서 18.2.0으로 업데이트되었으며,
Node.js 버전이 12.x가 단종( PR ) 에 도달했기 때문에 최소버전이 12.22.0 -> 14.6.0으로 상향되었습니다.
기존 프로젝트에 적용 할 때 참고하여 적용이 필요 할 듯 하며, Next.js 13버전 만큼 그동안 미뤄왔던 리액트 18버전의 학습을 해야 할 듯 합니다...
Next.js 13업데이트 블로그 글과 vercel에서 제공하는 13버전 app-playground 레포지토리를 참고하여 해당 글을 작성하였으며, 잘못된 부분은 댓글에 남겨주시면 겸허히 받아들여 수정하도록 하겠습니다.
위의 요약을 토대로 더욱 깊은 학습을 해보려합니다.