최근 화제가 된 글. 당신은 Next.js가 필요하지 않다에 관한 내용에 대해 정리해 보았다
일하다 보면 이게 굳이 필요한 일인가 싶기도 하고 만들 수야 있다만 생산성과 개발 비용과 기간대비 아웃풋에 큰 차이가 없다고 생각해서 개인적으로도 그냥 React로 돌아가는 경우가 많았는데
여기서는 Next.js를 운영하면서 어려웠던 점이나 한계에 대해 직면하고 돌아가는 과정을 보여준다
예전 제이쿼리가 대세일 때 이슈가 되었던 You might not need jquery 가 생각나는 글
기술이라는 게 적시적소에 잘 쓰면 좋지만 만능론으로 넣어야 하는지 말아야 하는지를 판단하는 기준이 되어야 한다
You don't need Next.js
We migrated the ComfyDeploy dashboard from Next.js to just React
www.comfydeploy.com
1. 서버 자원의 한계 vs. 독립 서버의 필요성
1) Vercel 서버리스 함수 한계
- Next.js에서 서버 액션(서버리스 함수)으로 API를 구성하면, Vercel의 무료/유료 플랜 제약에 쉽게 부딪힐 수 있음
- GPU가 필요한 연산(예: 머신러닝 모델 추론)이나 대규모 요청이 잦은 서비스라면 서버리스 함수로는 처리 어려움
- 실제 사례: ComfyDeploy가 고부하 API 요청을 받았을 때, 예기치 못한 2,000달러 이상의 Vercel 청구서 발생
2) 독립 서버(오토스케일링) 도입
- GPU 기반 연산이 필요한 경우, 자체 서버(혹은 GCP/AWS 등 클라우드 VM)에서 원하는 만큼 자유롭게 확장 가능
- 컨테이너 기반(예: Docker + Kubernetes, Cloud Run 등)으로 효율적 오토스케일링 구현 가능
결론: GPU 자원이 필요하거나 높은 부하의 API가 있는 경우, Next.js의 서버리스 함수보다는 독립 서버가 낫다.
2. 빌드 및 로컬 개발 환경의 비효율성
1) 장시간 빌드 문제
- 프로젝트 규모가 커지면 Next.js 빌드 시간이 기하급수적으로 늘어날 수 있음
- 예: 라이브러리가 많아지자 빌드가 3분, 심지어 7분 이상 걸린 사례 발생
2) 느린 로컬 개발 & SSR 리로드
- 변경 사항이 있을 때마다 SSR(서버사이드 렌더링) 과정을 다시 거치면, 브라우저가 새로고침되어 피드백이 느려짐
- 대시보드처럼 클라이언트 로직이 많은 경우, SSR 자체가 크게 필요 없을 수 있음
- 순수 React(CSR) 방식이면 훨씬 빠른 핫 리로드가 가능
결론: 대규모·복잡한 Next.js 프로젝트는 느린 빌드와 로컬 개발 환경이 생산성을 크게 떨어뜨릴 수 있다.
3. 대시보드 등 “SSR 불필요”한 UI
1) SSR/SSG 필요성이 낮음
- 대시보드는 로그인 사용자 전용 화면이고, SEO도 큰 의미가 없는 경우가 많음
- 실시간 업데이트나 잦은 API 호출이 필요하면, 초기 프리렌더보다 클라이언트 상태 관리가 더 중요
2) Next.js 최적화 로직 = 오버헤드
- SSR/SSG, Server Actions, 라우팅 최적화 등은 대부분 SEO, 초기 페이지 로드 속도를 위한 기능
- 대시보드 같은 “로그인 후 사용하는 내부 UI”에서는 오히려 복잡도와 빌드 시간이 늘어나는 원인
결론: 브라우저 측에서 전부 처리해도 충분한 UI(로그인 기반 대시보드 등)에는 Next.js가 필수적이지 않을 수 있다.
4. API 테스트 및 아키텍처 분산의 이점
1) 서버 액션 + API 라우트 혼합 시 테스트 복잡
- Next.js 내부에서 서버 액션과 API 라우트가 뒤섞여 있으면, 테스트 범위와 방식이 혼란스러워짐
- 서버 액션이 “마법처럼” 편해 보여도, 대규모 서비스에서 API 테스트·유지보수 난이도가 상승
2) 명시적 API 계층
- Frontend는 React, Backend는 FastAPI/Express 등 독립 서버로 분리하면 경계가 명확
- API 문서화, 버저닝, 로드 밸런싱, 확장성 측면에서 더 유연
결론: “서버 액션”으로 모든 것을 처리하기보다는, 명확히 분리된 API 서버 구조가 대규모·장기적 관점에서 더 나을 수 있다.
5. “프레임워크 마법”에 덜 의존할 때의 장점
1) 진짜 필요한 곳에만 최적화
- Next.js의 내장 캐싱, 서버 컴포넌트 등은 매우 편리하지만, 모든 프로젝트가 모든 기능을 필요한 것은 아님
- 필요한 기능만 직접 선택·설계하면 성능 최적화와 유지보수 측면에서 오히려 강점
2) 데이터 흐름 & 상태관리 명확성
- Next.js SSR/SSG + 클라이언트 사이드 로직이 섞이면 데이터 흐름 파악이 어려워짐
- 오히려 클라이언트 렌더링(CSR)으로 일관되게 처리하면, React/TanStack Query 등에서 상태관리를 일관성 있게 적용 가능
결론: 프레임워크가 제공하는 다양한 기능(SSR, SSG, 서버 액션 등)은 편리하지만, 남용하면 구조가 복잡해짐.
필요한 부분만 직접 설계·구현하면 오히려 더 단순하고 효율적인 구조를 만들 수 있다.
6. 트레이드오프: “잃는 것”과 “얻는 것”
잃는 것
- 프론트·백엔드 동시 관리
- Next.js에서는 하나의 폴더 안에서 Front/Back을 함께 다룰 수 있지만, 분리 시 확실한 경계와 구조 이점 생김
- 자동 SSR/SSG
- SEO가 중요한 페이지에는 편리하지만, SEO 필요도가 낮은 내부 대시보드엔 무의미
- 서버 컴포넌트와 서버 액션
- 초기엔 코드량이 줄어들어 편해 보이나, 장기적으로 명시적 API 설계가 더 나은 경우 많음
얻는 것
- 빠른 빌드와 로컬 개발
- CSR만 쓰는 React 앱은 빌드·리로드 속도가 훨씬 빠름
- 간결한 아키텍처
- 프론트, 백엔드 모두 자신에게 맞는 기술 스택을 독립적으로 사용
- 확장성
- GPU 사용이나 대규모 트래픽에 유연하게 대응 가능
- 유지보수 편의
- 테스트, 배포, 모니터링 등을 분산 처리해 더 명확한 구조
결론
- “Next.js를 꼭 안 써도 되는 경우”
- 로그인 전용 대시보드 중심 서비스 (SEO 무관)
- 서버에서 GPU 활용 등 대규모 연산이 필요해 독립 서버가 필수일 때
- 빌드 속도, 로컬 개발 속도가 매우 중요한 상황
- 아키텍처를 명시적으로 분리해 유지보수·테스트를 간소화하고 싶은 경우
- “하지만 Next.js도 훌륭함”
- SEO가 중요한 마케팅·랜딩 페이지나 소규모 프로젝트라면 Next.js가 탁월
- ComfyDeploy 사례처럼, “대시보드는 React & 독립 서버” + “Landing, SEO는 Next.js”라는 혼합 전략도 가능
결국 중요한 것은 ‘프로젝트 요구사항에 맞는 적절한 도구 선택’.
Next.js가 전가의 보도는 아니며, 필요 이상의 복잡성을 유발할 수도 있다.
React + 별도 백엔드를 통한 CSR 구조가 더 빠르고, 관리하기 쉽고, 유연한 방법이 될 수 있다는 점을 고려해 보자.
'일 > 공부' 카테고리의 다른 글
더이상 개발자가 블로그를 하는 것이 의미가 있을까? (0) | 2025.01.17 |
---|---|
DAISYUI 소개 | 스타일링 프레임워크 (0) | 2025.01.13 |
고령 개발자를 위한 조언 (0) | 2025.01.12 |
HTMX의 미래 (1) | 2025.01.11 |
사이드 프로젝트로 수익 내는 개발자들 | 2024년 (1) | 2025.01.07 |