현 최신 버전을 기준으로 한다.

장점

서버 컴포넌트

  • 서버 컴포넌트는 상태가 필요없다.
  • 서버 컴포넌트는 비동기에서 서버로부터 데이터 가져오기가 용이하다.
  • 사실상 서버 컴포넌트는 React가 아닌 Vercel 을 위해 태어난 컴포넌트다(?)
  • 물론 제약사항 때문에 기존 React 개발자들의 접근성이 많이 떨어지지만, 하다보면 매력있는 컴포넌트다.

App Router

  • 폴더 기반 라우팅이기 때문에 특정 파일명이 아니면 일반 컴포넌트로 취급할 수 있다.
  • 마이크로아키텍쳐에 적합한 구조를 가질 수 있다.
  • 서버 컴포넌트 사용이 가능하지만, 'use client' 쓰면 클라이언트 컴포넌트 위주로도 문제 없이 쓸 수 있다.

업로드 및 다운로드 지원

  • SvelteKit와 함께 업로드 다운로드를 별도의 준비 없이 바로 가능하다는 점이 되겠다.
  • JS 풀스택 프레임워크 중에 이런 프레임워크가 의외로 흔치가 않다. 대체 왜일까...

after

  • 15 버전부터 탄생한 after 함수를 통해 서버 컴포넌트나 서버 함수, 라우터에 후처리 기능을 넣을 수 있다.
  • 즉, 게시물 상세 진입할 때, after 함수를 통해 게시물의 읽은 수 집계 업무 시간을 잡아먹을 필요가 없게 된 것이다.

Instruments

  • 이제 운영 단계에서 발생하는 여러 이벤트를 수집하기 용이해졌다.
  • 물론 기존에는 middleware 에서 가능하기는 했으나, 문제는 이벤트 수집 시간을 감수하고 웹 페이지를 띄워야 했다.
  • 하지만 instruments.js 파일을 사용하면 이벤트 수집 시간에 상관없이 페이지를 띄울 수 있다.

단점

Pages Router

  • 내가 말하는 단점이라면, 이제 Next.js 에서 점점 손을 떼고 있어서 단점으로 넣은 것이다.
  • 만약 신규 프로젝트에 Next.js 를 쓸 거라면 주저없이 App Router 사용을 권장한다.
  • 만약 Pages Router를 쓰고 싶다면, 당장 Next.js 를 접고 Remix 로 발을 옮기는 것을 권장한다.
    (OpenAI가 왜 옮겼는지 쓰다보면 이해가 될 것이다. 특히 React 기반 라이브러리 말이다.)
  • 아니면 때가쏘옥 Vite!

디버깅 및 테스트

  • 여전히 단위 테스트와 디버깅은 지옥이다. 개발환경과 테스트 도구 호환성이 그지같다.
  • React 한계로 인한 디버깅 및 테스트 물꼬는 트였지만 여전히 Next.js 에서는 아직도 멀었다.
  • Turbo 개발 서버는 여전히 메모리 누수가 심하다. 옛날 크롬을 넘어서는 램크루지 납셨다.

프레임워크의 한계와 반쪽(?) 오픈소스

  • 프레임워크의 단점이 가장 잘 돋보이는 프레임워크라 할 수 있겠다.
  • 스프링은 욕처먹어도 산업계에서 쓰는 이유가 유연한 확장성인데, Next.js 는 확장성이 부족하다.
  • 캐시 관리는 여전히 복잡하고 유연하지가 못하며, 서버 컴포넌트 간의 주입은 여전히 불가능하다.
    그래서 서버 컴포넌트에서 Prop drilling 이 불가능하고, Next.js 차원에서 해결 가능한 문제를 제공해주지 않는다.

Vercel

  • Vercel의, Vercel에 의해, Vercel을 위한 프레임워크라 해도 과장이 없다.
  • Vercel 클라우드에 올리면 최고의 프레임워크지만, 그 외 환경은 뭔가 나사빠진 모습을 보여준다.
  • 마치 JS 프레임워크의 애플을 보는 기분이 아닌가 싶다.

Hacker News 선정 최악의 프레임워크로 당당히 오른 Next.js의 장단점을 알아보았다.
Hacker News 에서는 Next.js 걷어낸 썰 올리면 자동 추천을 받을 정도로 존나 힙에서 벗어난 딱딱한 프레임워크,
즉, 스프링 프레임워크와 투톱으로 최악의 프레임워크로 이름이 난 상태다.

그래서 나는 안쓸거냐고? 일단은 쓰고 있다.
서버 컴포넌트를 지원하고, React 19가 준비된 대체제가 나올 때까지 말이지.
왜냐면 대체제가 나오면 Next.js 의 장점은 자동적으로 다 필요가 없어지거든.
React의 서버 컴포넌트와 서버 함수, 액션 기능들의 추상화가 Next.js 에서 선행 적용됐을 뿐이지,
경쟁자가 생겨버리면 바로 이주가 쌉가능해지는 킬링 컨텐츠가 될 거거든.
기대한다, Vite! 클라이언트와 서버 '환경'에서 실행 여부를 결정하는 데 도움을 주는 환경 API 기능에!

Turbopack vs Rolldown 가슴이 웅장해지는 경쟁이다.

끗.

profile
지옥에서 온 개발자

0개의 댓글

관련 채용 정보