Summary

이 글은 “You should know this before choosing Next.js”에 관한 리뷰이다. 원문은 Next.js 프레임워크와 Vercel 간의 관계, 오픈소스 프로젝트로서의 투명성과 상호운용성 이슈를 다루고 있다. 특히 Next.js가 Vercel에 최적화된 비공개 코드 경로를 가지고 있고, 다른 클라우드 제공업체에서 완전히 지원되지 않는 문제, 최근 보안 취약점 처리 방식의 문제점 등을 상세히 설명한다. 이 아티클은 기술 스택 선택 시 단순히 기능뿐 아니라 프레임워크의 거버넌스와 지속 가능성도 중요한 고려 사항임을 상기시킨다.

Info

아티클 내용

들어가며

이 아티클은 Netlify에서 근무하는 Eduardo Bouças가 작성한 글로, Next.js 프레임워크를 선택하기 전에 알아야 할 중요한 고려사항들을 다루고 있다. 글쓴이는 Netlify와 Vercel이 경쟁사 관계임을 먼저 밝히면서, 자신의 의견이 이해관계에 영향을 받을 수 있음을 투명하게 공개하고 있다.

아티클은 오픈소스 소프트웨어의 중요한 가치인 투명성, 상호운용성, 그리고 독립성의 관점에서 Next.js가 가진 문제점들을 세 가지 주요 사실로 설명한다:

  1. 어댑터 시스템 부재: 대부분의 현대 웹 프레임워크와 달리 Next.js는 다양한 호스팅 환경을 지원하는 어댑터 시스템이 없다.
  2. 서버리스 지원 부재: 공식적인 서버리스 배포 방법이 없고, Vercel 외의 환경에서 서버리스로 배포하기 위한 문서가 없다.
  3. Vercel 전용 코드 경로: Next.js 내부에는 오직 Vercel에서 배포된 사이트에서만 실행되는 코드 경로가 존재한다.

또한 최근 발생한 보안 취약점 처리 과정에서 Vercel이 보인 태도를 비판하며, 오픈소스 프로젝트로서 기대되는 책임감과 투명성이 부족했다고 지적한다.

인상 깊었던 한 줄

“It’s important to remember that it’s been almost three years since the launch of the Build Output API, and to this day the framework still isn’t portable. I’m cautiously optimistic about that actually changing this time.”

(Build Output API가 출시된 지 거의 3년이 지났지만 오늘날까지도 프레임워크는 이식 가능하지 않다는 점을 기억해야 합니다. 이번에 실제로 변화가 있을 것이라는 점에 대해 조심스럽게 낙관적입니다.)

이 문장이 특히 인상적이었던 이유는 오픈소스 프로젝트가 얼마나 진정으로 ‘오픈’한지를 평가할 때 중요한 지표인 이식성(portability)을 강조하고 있기 때문이다. Next.js가 인기 있는 오픈소스 프레임워크임에도 불구하고, 다른 환경으로 쉽게 이식할 수 없는 구조적 문제가 오랫동안 해결되지 않고 있다는 점은 깊은 생각을 하게 만든다. 저자는 변화에 대해 ‘조심스럽게 낙관적’이라는 표현을 써서, 과거의 약속이 지켜지지 않았던 경험에서 오는 신중함과 함께 개선 가능성에 대한 희망을 균형 있게 전달하고 있다.

Next.js의 구조적 문제점

아티클에서는 Next.js의 구조적 문제점을 세부적으로 설명하고 있다:

  1. 어댑터 시스템 부재:

    • Remix, Astro, SvelteKit 등 다른 프레임워크들은 어댑터를 통해 다양한 호스팅 환경 지원
    • Next.js는 어댑터 개념이 없으며, 빌드 결과물 형식이 비공개적이고 문서화되지 않음
    • Vercel에서 Build Output API를 발표했지만, 3년이 지난 지금도 Next.js 자체에는 적용되지 않음
  2. 공식 서버리스 지원 부재:

    • Next.js는 서버리스 컴퓨팅의 이점을 공식 문서에서 언급하지만, 구현 방법은 제공하지 않음
    • 과거에 존재했던 서버리스 모드가 2022년 10월에 설명 없이 제거됨
    • React 공식 문서는 Next.js가 “모든 서버리스 호스팅”에 배포될 수 있다고 언급하지만, 이에 대한 공식 문서가 없음
  3. Vercel 전용 코드 경로:

    • “minimal mode”라는 비공개 플래그가 존재하여 Vercel 배포 시에만 활성화됨
    • 이를 통해 Vercel은 미들웨어를 엣지에서 실행할 수 있지만, 다른 제공업체는 접근할 수 없음
    • Netlify는 Next.js의 모든 기능을 지원하기 위해 역공학(reverse-engineering)에 전담 팀을 투입해야 했음

보안 취약점 처리 문제

아티클의 또 다른 중요한 부분은 최근 발생한 심각한 보안 취약점(CVE)에 대한 Vercel의 대응 방식이다:

  1. 2월 27일: 취약점이 보고됨
  2. 3월 14일: Vercel 팀이 조사 시작
  3. 3월 14일-21일: Vercel이 문제를 해결하고 패치를 배포하지만, 다른 클라우드 제공업체에 알리지 않음
  4. 3월 21일: CVE 공개, Vercel은 자사 고객만을 보호했다고 블로그 게시물을 작성
  5. 3월 22일: 비판을 받은 후 Vercel이 Netlify에 연락하고 블로그 게시물을 수정

이 사례는 Next.js가 오픈소스 프로젝트임에도 불구하고, Vercel이 자사 고객 외의 사용자에 대한 책임감이 부족했음을 보여준다.

개인적인 공감 포인트

  1. 기술 선택의 장기적 영향: 아티클에서 강조한 것처럼, 기술 스택 선택은 단기적인 기능뿐 아니라 장기적인 지속 가능성과 유지보수성을 고려해야 한다는 점에 공감한다. 특히 엔터프라이즈 환경에서는 이러한 결정이 다년간의 영향을 미치게 된다.

  2. 오픈소스의 진정한 의미: 단순히 코드가 공개되어 있다고 해서 진정한 오픈소스라고 할 수 없다는 저자의 관점에 동의한다. 진정한 오픈소스는 투명성, 상호운용성, 커뮤니티 참여를 모두 포함해야 한다.

  3. 벤더 종속성의 위험: 특정 클라우드 제공업체에 종속되는 것은 리스크를 안고 있다. 미래에 가격 정책이 변경되거나, 서비스 품질이 떨어지거나, 필요한 기능을 제공하지 않게 될 경우 이동할 수 있는 자유가 제한된다.

Next.js 선택에 대한 실용적 고려사항

아티클을 읽으면서 Next.js를 선택할 때 고려해야 할 실용적인 측면들을 생각해보았다:

  1. 배포 환경의 다양성: 현재는 Vercel에 배포할 계획이지만, 미래에 다른 환경으로 이전할 가능성이 있다면 이러한 제약이 문제가 될 수 있다. AWS, Azure, GCP 등의 클라우드 환경이나 자체 인프라로 이전할 가능성을 고려해야 한다.

  2. 엣지 컴퓨팅의 중요성: 애플리케이션에서 미들웨어나 엣지 기능이 중요하다면, Vercel이 아닌 환경에서는 이러한 기능을 완전히 활용하기 어려울 수 있다는 점을 인지해야 한다.

  3. 오픈소스 거버넌스의 중요성: 기업이 후원하는 오픈소스 프로젝트에서는 프로젝트의 거버넌스 방식과 의사결정 과정이 중요하다. Next.js의 경우 Vercel이 대부분의 결정을 내리고 있어, 커뮤니티의 요구사항보다 회사의 이익이 우선시될 가능성이 있다.

핵심 요약

  • 오픈소스의 착시: Next.js는 오픈소스이지만 완전한 이식성과 상호운용성이 보장되지 않으며, Vercel 환경에서 최대한의 기능을 발휘하도록 설계되어 있다.

  • 미문서화된 API 의존성: 다른 호스팅 제공업체들은 비공개적이고 미문서화된 API에 의존해야 하며, 이는 마이너 버전이나 패치 버전에서도 예고 없이 변경될 수 있다.

  • 보안 거버넌스 문제: 최근 보안 취약점 처리 과정은 Next.js의 거버넌스 문제를 드러냈으며, Vercel 외 환경의 사용자들을 위험에 노출시켰다.

  • 개선 노력: OpenNext 움직임을 통해 다양한 클라우드 제공업체들이 협력하고 있으며, Vercel도 이에 참여하겠다고 약속했지만 구체적인 일정은 제시하지 않았다.

  • 실용적 접근: Next.js를 계속 사용하되, 이러한 제약사항과 리스크를 인식하고 적절한 대비책을 마련하는 것이 중요하다.

결론

“You should know this before choosing Next.js”는 인기 있는 웹 프레임워크의 선택에 있어 기능적 측면 외에도 거버넌스, 투명성, 상호운용성 같은 비기능적 요소의 중요성을 일깨우는 유익한 아티클이다. 글쓴이가 경쟁사의 직원임을 고려하더라도, 제시된 사례와 문제점들은 충분히 설득력 있고 검증 가능한 내용들이다.

Next.js는 여전히 강력한 기능과 개발자 경험을 제공하는 뛰어난 프레임워크이지만, 이 아티클은 웹 개발 프레임워크 선택 시 고려해야 할 더 넓은 관점을 제시한다. 특히 장기적인 프로젝트나 비즈니스에 중요한 애플리케이션을 개발할 때, 단순히 현재의 기능이나 개발 편의성뿐만 아니라 프레임워크의 지속 가능성, 거버넌스 방식, 호스팅 환경의 유연성 등을 종합적으로 고려해야 함을 상기시킨다.

개인적으로 Next.js를 사용하는 현재 프로젝트에서는 SSR, CSR, 하이브리드 렌더링 기능이 중요하기 때문에 여전히 좋은 선택이라고 생각한다. 그러나 장기적으로는 OpenNext와 같은 움직임을 주시하며, 필요하다면 더 오픈한 대안을 고려하는 것도 중요할 것이다. 또한 프로젝트의 아키텍처를 설계할 때 특정 프레임워크에 너무 종속되지 않도록 유의해야겠다는 생각이 든다.