Next.js 16.2: 모든 플랫폼을 지원하기 위한 어댑터 API의 도입
Next.js 16.2에서 안정적인 어댑터 API를 공개했습니다. OpenNext, Netlify, Cloudflare, AWS Amplify, Google Cloud와의 협업을 통해 만들어진 이 API는 모든 배포 플랫폼에서 Next.js가 잘 작동하도록 보장하는 데 목표를 두고 있습니다.
핵심 내용을 먼저 정리하면 다음과 같습니다:
- 어댑터 API (안정화): 타입이 정의되고 버전이 관리되는 애플리케이션 명세로, 모든 플랫폼이 이를 바탕으로 구현할 수 있습니다.
- 테스트 스위트: Vercel을 포함한 모든 어댑터가 통과해야 하는 공통 검증 테스트입니다.
- 검증된 어댑터: Next.js 조직 하에서 관리하는 오픈소스 어댑터들입니다.
- 생태계 워킹그룹: 여러 제공자 간의 변경사항을 조율하기 위한 정기적인 포럼입니다.
이 과정까지 어떻게 왔을까요?
대부분의 Next.js 애플리케이션은 next start로 실행하는 단일 Node.js 서버로 배포됩니다. 현재 수백만 개의 팀이 다양한 플랫폼에서 이렇게 운영하고 있죠.
그런데 앱을 키우다 보면 여러 개의 서버 인스턴스를 실행하게 됩니다. 이때부터는 기본적으로 잘 작동해야 하는 것들이 생깁니다. 캐시된 콘텐츠가 인스턴스 간에 동기화되어야 하고, 온디맨드 재검증이 전파되어야 하며, 스트리밍이 안정적으로 작동해야 한다는 뜻입니다. 이건 선택적인 최적화가 아니라 필수 기능입니다.
거기에 성능 최적화까지 더하면 복잡도가 한층 올라갑니다. 전 세계 CDN에서 캐시된 콘텐츠를 제공한다거나, 엣지에서 컴퓨팅을 실행한다거나, 서버리스 함수로 콜드 스타트를 줄이는 같은 선택지들이 생기니까요.
플랫폼과 아키텍처에 따라 지원해야 하는 기능들이 쌓입니다. 스트리밍, Server Components, Partial Prerendering, 미들웨어, Cache Components, 온디맨드 재검증 등등. 각 기능이 서로 어떻게 상호작용하는지가 제대로 문서화된 적이 없었습니다.
플랫폼 제공자 입장에서는 여러 테넌트 환경에서 계속 변하는 Next.js 릴리스를 완벽하게 지원해야 했으니, 이런 문제들이 눈덩이처럼 불어났습니다.
> Next.js 팀이 Netlify의 어려움에 대해 얘기해보자고 제안했을 때, 우리는 구체적인 문제점들을 길게 나열하려고 했습니다. 그런데 정리하다 보니 이 중 90% 정도가 같은 근본 원인이었어요. 빌드 결과물을 설정하고 읽을 수 있는 공식적이고 안정적인 메커니즘이 없다는 것이었죠. 결국 그게 가장 필요한 것이었고, Jimmy에게 그렇게 말했습니다. 잘한 결정이었어요.
>
> — Netlify 엔지니어, Philippe Serhal
결국 필요했던 건 간단했습니다. 플랫폼 제공자들이 구축할 수 있는 공식적이고 안정적인 인터페이스가 필요했습니다.
OpenNext가 다리를 놓다
OpenNext가 이 공백을 채웠습니다. Next.js 빌드 결과물을 플랫폼이 소비할 수 있는 형태로 변환했거든요. 각 플랫폼의 고유한 방식에 맞게 프레임워크의 의미를 매핑해주는 것이죠. 처음엔 호환성 레이어였지만, 특히 AWS에서 프로덕션 환경에서도 쓸 수 있는 수준의 어댑터가 되었습니다. Cloudflare와 Netlify도 나중에 이 노력에 합류했습니다.
OpenNext는 중요한 깨달음을 줬습니다. Next.js 빌드 결과물 자체가 어댑터들이 직접 구현할 수 있는 안정적이고 정의된 인터페이스가 될 수 있다는 것이었습니다.
이 인사이트가 Next.js 팀과 OpenNext 유지보수자, 그리고 Netlify, Cloudflare, AWS Amplify, Google Cloud의 엔지니어들을 한데 모으게 했습니다. 2025년 4월에 Build Adapters RFC를 공개했고, 워킹그룹을 조직한 뒤, 이 모든 파트너와 함께 API를 설계하고 테스트하고 검증해왔습니다.
어댑터 API
Next.js 16.2에는 공식적이고 안정적인 어댑터 API가 포함되어 있습니다.
빌드할 때 Next.js는 이제 타입이 정의되고 버전이 관리되는 애플리케이션 명세를 만듭니다. 여기엔 라우트, 사전 렌더링, 정적 자산, 런타임 대상, 의존성, 캐싱 규칙, 라우팅 결정 등이 담깁니다. 어댑터가 이 결과물을 받아서 플랫폼의 인프라에 맞게 변환하는 방식입니다.
어댑터는 두 가지 훅을 구현합니다:
modifyConfig: 설정이 로드될 때onBuildComplete: 빌드가 완료되었을 때
Next.js의 메이저 버전이 올라갈 때만 breaking changes가 생깁니다.
Vercel의 어댑터도 이 공개 API를 그대로 사용합니다. 특별한 private 훅이나 특수한 통합 경로는 없습니다. 그리고 오픈소스입니다.
워킹그룹의 피드백을 반영해서, 플랫폼 통합 부분에 대한 문서도 대대적으로 정비했습니다. 이제 렌더링 철학, 플랫폼별 배포 기능 매트릭스, PPR 플랫폼 가이드, 재검증 작동 방식, CDN 캐싱 등을 다루는 새로운 가이드들이 있습니다.
테스트 스위트
Next.js 테스트 스위트를 어댑터 개발자들이 사용할 수 있게 공개했습니다. 스트리밍 동작, 캐싱 상호작용, 클라이언트 네비게이션, 그리고 실제 상황의 엣지 케이스들을 다룹니다. 새로운 기능이 출시될 때마다 그 동작이 이 테스트들에 인코딩됩니다.
더 자세한 내용은 어댑터 테스팅 문서에서 확인할 수 있습니다.
어댑터 개발자는 어떤 어댑터로든 이 스위트를 실행할 수 있고, 각 기능에 대해 통과/실패 결과를 얻습니다. 이건 Vercel이 자신의 어댑터를 검증할 때 사용하는 것과 동일한 테스트 스위트입니다. 즉, 모든 제공자가 동일한 기준을 적용하는 것이죠.
검증된 어댑터
Next.js GitHub 조직 아래에 호스팅되고 "플랫폼별 배포" 문서에 등록되려면 두 가지 조건을 만족해야 합니다. 오픈소스여야 하고, 전체 테스트 스위트를 통과해야 합니다. 어댑터를 오픈소스로 공개함으로써 커뮤니티가 기여하고 유지보수할 수 있게 하는 거죠.