왜 React가 아니라 Next.js까지 가게 되는가
React만 놓고 보면 이미 충분히 강력합니다.
- 컴포넌트 기반 UI를 만들 수 있고
- 상태를 다룰 수 있고
- 생태계도 넓고
Vite,React Router,TanStack Query같은 도구와 조합도 좋습니다
그래서 처음에는 "React면 됐지, 왜 굳이 Next.js까지 가야 하지?"라는 질문이 자연스럽습니다.
하지만 실무에서는 프로젝트가 조금만 커져도 질문이 달라집니다.
- 라우팅은 어디서 관리할 것인가
- 공개 페이지의 SEO는 어떻게 가져갈 것인가
- 서버 데이터는 어디서 받고 어떤 단위로 캐시할 것인가
- 메타데이터와 OG 태그는 어떤 문맥에서 관리할 것인가
- 마케팅 페이지와 로그인 후 앱 화면을 한 제품 안에서 같이 운영할 것인가
즉, React만으로는 충분해 보이던 문제가, 서비스 구조와 운영 문제로 넘어가는 순간부터는 다른 층위의 답이 필요해집니다. 많은 팀이 React에서 멈추지 않고 Next.js까지 가게 되는 이유도 여기에 있습니다.
한눈에 보면
짧게 정리하면 이렇습니다.
React는 UI를 만들기 위한 강력한 기반입니다Next.js는 그 React 위에 라우팅, 렌더링 전략, 데이터 패칭, 메타데이터, 배포 감각을 얹어줍니다- 그래서 단순 컴포넌트 개발 단계에서는 React만으로도 충분할 수 있지만
- 공개 웹, SEO, 서버 데이터, 운영 모델까지 함께 다뤄야 하는 순간
Next.js가 더 자연스럽게 느껴집니다
표로 보면 더 간단합니다.
| 질문 | React 중심 조합 | Next.js |
|---|---|---|
| 화면을 만들 수 있는가 | 가능 | 가능 |
| 라우팅을 정리해주는가 | 직접 선택 필요 | 기본 구조 제공 |
| SSR/SSG/ISR을 쉽게 섞는가 | 직접 설계 필요 | 프레임워크 수준 지원 |
| 서버 데이터와 캐시 정책을 함께 다루는가 | 직접 조합 필요 | 비교적 일관된 문맥 제공 |
| SEO와 메타데이터를 페이지 구조 안에서 다루는가 | 별도 설계 필요 | 자연스럽게 포함 가능 |
| 마케팅 페이지와 앱을 한 프로젝트로 운영하기 쉬운가 | 가능하지만 조립 비용 큼 | 비교적 자연스러움 |
React만으로도 충분한 경우는 언제일까?
먼저 오해를 줄이면, 모든 React 프로젝트가 Next.js로 가야 하는 것은 아닙니다.
예를 들어 아래 상황이라면 React만으로도 충분할 수 있습니다.
- 로그인 이후에만 쓰는 내부 어드민
- SEO가 크게 중요하지 않은 대시보드
- 브라우저에서만 동작하는 도구형 제품
- 서버 렌더링보다 빠른 개발과 자유로운 조합이 더 중요한 경우
이런 프로젝트에서는 Vite + React Router + TanStack Query 조합이 아주 효율적일 수 있습니다.
import { BrowserRouter, Route, Routes } from 'react-router-dom';
import { DashboardPage } from './pages/dashboard-page';
import { SettingsPage } from './pages/settings-page';
export function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<DashboardPage />} />
<Route path="/settings" element={<SettingsPage />} />
</Routes>
</BrowserRouter>
);
}이 조합의 장점은 명확합니다.
- 가볍고
- 자유롭고
- 프레임워크 규칙이 비교적 적고
- 팀이 원하는 방식으로 구조를 직접 설계할 수 있습니다
즉, 문제 범위가 클라이언트 앱 안에 머무른다면 React만으로도 꽤 멀리 갈 수 있습니다.
그런데 왜 결국 Next.js까지 가게 될까?
실무에서는 보통 제품이 커지면서 아래 요구사항이 같이 들어옵니다.
- 공개 페이지가 필요해진다
- SEO가 필요해진다
- 블로그나 문서가 붙는다
- 로그인 후 앱 화면도 같이 운영한다
- 서버 데이터 패칭과 캐시 전략을 통일해야 한다
이 시점부터는 단순히 React 컴포넌트를 잘 만드는 것보다, 서비스 전체 구조를 어떤 기준으로 운영할 것인가가 더 중요해집니다.
1. React는 UI 라이브러리이고, Next.js는 서비스 구조를 제안한다
React가 해결하는 문제는 분명합니다. 컴포넌트 기반 UI와 상태 변화에 따른 렌더링입니다.
반면 실무 서비스는 그 위에 더 많은 층이 있습니다.
- URL 구조
- 데이터 페칭 위치
- 서버와 클라이언트의 경계
- 페이지별 렌더링 전략
- 메타데이터
- 이미지 최적화
이걸 전부 직접 붙이면 가능은 합니다. 다만 팀이 커질수록 "우리 프로젝트의 표준이 무엇인가"를 계속 정해야 합니다.
Next.js는 이 지점에서 프레임워크 차원의 기준을 제공합니다.
// app/products/[id]/page.tsx
export default async function ProductPage({ params }: { params: { id: string } }) {
const product = await fetch(`https://api.example.com/products/${params.id}`, {
next: { revalidate: 300 },
}).then((res) => res.json());
return <h1>{product.name}</h1>;
}이 한 파일 안에:
- 라우팅
- 서버 데이터 패칭
- 캐시 재검증 정책
이 함께 들어옵니다.
즉, Next.js는 React 위에 서비스 구조를 얹어줍니다.
2. "페이지"가 아니라 "제품"을 운영하게 되면 Next.js가 유리해진다
처음에는 단일 앱만 있던 제품도 시간이 지나면 다음이 붙습니다.
- 랜딩 페이지
- 가격 안내 페이지
- 고객 사례 페이지
- 기술 블로그
- 로그인 후 대시보드
- 관리자 화면
이 모든 것을 각기 다른 방식으로 운영하면 기술 부채가 빠르게 커집니다.
예를 들어:
- 공개 페이지는 SEO가 중요하고
- 블로그는 정적 생성이 효율적이고
- 대시보드는 사용자 상태와 상호작용이 중요하며
- 일부 화면은 서버 데이터 최신성이 중요합니다
이 요구사항이 동시에 존재할 때 Next.js는 "한 제품 안에서 서로 다른 렌더링 전략을 같이 가져가는 구조"를 제공해줍니다.
그래서 React에서 Next.js로 가는 것은 기술 취향의 변화라기보다, 제품 구조가 복잡해졌기 때문에 운영 모델도 같이 정리하는 과정에 가깝습니다.
3. SEO와 콘텐츠 요구사항이 붙는 순간 선택 기준이 바뀐다
React SPA도 SEO를 전혀 못 하는 것은 아닙니다. 다만 실무에서는 다음 질문이 바로 따라옵니다.
- 메타 태그는 어디서 채울 것인가
- 오픈그래프 이미지는 어떻게 관리할 것인가
- 크롤러가 보는 HTML은 어떻게 보장할 것인가
- 마케팅 페이지 성능은 어떻게 가져갈 것인가
이때 Next.js는 페이지 구조 안에서 메타데이터와 렌더링 전략을 함께 다루기 편합니다.
// app/blog/[slug]/page.tsx
export async function generateMetadata({ params }: { params: { slug: string } }) {
const post = await getPost(params.slug);
return {
title: post.title,
description: post.description,
};
}즉, 공개 웹이 조금이라도 중요해지는 순간부터는 React 단독보다 Next.js 쪽이 설명하기 쉬워집니다.
4. 서버 데이터와 캐시 전략을 코드 가까이에서 다루고 싶어진다
클라이언트 전용 React 앱에서는 서버 상태 관리를 별도 도구로 해결하는 경우가 많습니다. 물론 이 조합은 여전히 훌륭합니다.
다만 서비스가 커지면 이런 요구가 생깁니다.
- 이 데이터는 서버에서 미리 받아오고 싶다
- 이 API는 5분 정도 캐시해도 된다
- 이 페이지는 정적으로 두고 싶다
- 이 화면은 요청마다 최신 데이터를 받아야 한다
이때 Next.js는 캐시와 렌더링 전략을 비교적 같은 문맥에서 다룹니다.
await fetch('https://api.example.com/articles', {
next: { revalidate: 600 },
});이 한 줄이 구현이자 운영 정책이 됩니다.
즉, "어디서 데이터를 받고 얼마나 신선해야 하는가"를 프레임워크 수준에서 설명하기 쉬워집니다.
5. 조직이 커질수록 "자유도"보다 "공통 기준"이 중요해진다
작은 팀에서는 자유로운 조합이 생산성을 높입니다. 하지만 팀이 커질수록 자유도는 종종 비용이 됩니다.
- 팀마다 라우팅 구조가 달라지고
- 데이터 패칭 방식이 달라지고
- SSR 필요 여부 판단 기준이 달라지고
- 메타데이터 처리 방식도 제각각이 되기 쉽습니다
Next.js는 이 차이를 완전히 없애지는 못해도, 공통된 기본 구조를 제공합니다.
app/기준 라우팅- 서버 컴포넌트와 클라이언트 컴포넌트 구분
- 레이아웃 계층 구조
- 메타데이터 API
즉, React에서 Next.js로 간다는 것은 기능을 더 얻는 것뿐 아니라, 조직 차원의 공통 언어를 선택하는 것이기도 합니다.
실무 예시로 보면 더 분명하다
예시 1. SaaS 제품이 성장하는 경우
초기에는 로그인 후 대시보드만 있었습니다. 이 단계에서는 React SPA만으로도 충분합니다.
그런데 제품이 커지면서 다음이 붙습니다.
- 공개 랜딩 페이지
- 도입 문의 페이지
- 블로그
- 가격 안내
- 고객사 케이스 스터디
이제는 앱 하나가 아니라 제품 전체를 다뤄야 합니다. 이때 많은 팀이 Next.js를 검토하게 됩니다.
예시 2. 커머스에서 검색 유입이 중요한 경우
상품 상세는 SEO가 중요하고, 가격과 재고는 최신성이 중요합니다.
이 상황에서는:
- 검색 엔진이 읽을 수 있어야 하고
- 메타데이터가 잘 나와야 하고
- 일부 데이터는 주기적으로 재검증되어야 합니다
이런 요구는 React만으로 못 하는 문제가 아니라, React 위에 어떤 운영 구조를 얹을 것인가의 문제입니다. 그리고 그 답으로 Next.js가 자주 선택됩니다.
예시 3. 조직이 React 경험자를 기준으로 확장하는 경우
실무에서는 채용, 온보딩, 팀 간 이동까지 고려해야 합니다.
- React 경험자는 상대적으로 많고
- Next.js 레퍼런스도 풍부하고
- 팀 간 공통 규칙을 만들기 쉽습니다
이때 React만 쓰는 것보다 Next.js까지 같이 표준으로 가져가면 신규 합류자도 제품 구조를 더 빨리 이해할 수 있습니다.
그렇다면 React와 Next.js는 경쟁 관계일까?
엄밀히 말하면 그렇지 않습니다.
React는 기반이고Next.js는 그 기반 위에서 서비스 구조를 잡는 선택지입니다
즉, 둘은 대체 관계라기보다 레이어가 다릅니다.
더 정확히 말하면 질문은 "React냐 Next.js냐"보다 아래에 가깝습니다.
- React만으로 충분한 문제인가
- 아니면 React 위에 프레임워크 차원의 구조가 필요한 문제인가
이 차이를 분명히 보면 기술 선택이 훨씬 쉬워집니다.
언제는 React에서 멈추는 편이 더 나을까?
Next.js가 좋은 선택지여도 항상 정답은 아닙니다.
아래 상황이라면 React 조합이 더 단순하고 효율적일 수 있습니다.
- SEO가 중요하지 않은 내부 도구
- 전부 로그인 이후에만 쓰는 앱
- 서버 렌더링보다 빠른 개발이 더 중요한 경우
- 팀이 이미
Vite + React Router + TanStack Query조합에 익숙한 경우 - 서버와 프론트를 명확히 분리해 운영하고 싶은 경우
즉, Next.js로 가는 기준은 "유명해서"가 아니라, 서비스 구조와 운영 요구사항이 React 단독 조합의 범위를 넘어섰는가입니다.
정리하면
왜 많은 팀이 React에서 멈추지 않고 Next.js까지 가게 되는가를 한 줄로 줄이면 이렇습니다.
React는 UI를 잘 만들게 해주고, Next.js는 그 UI를 제품과 서비스 구조 안에서 운영하기 쉽게 해주기 때문입니다.
실무 기준으로 다시 정리하면:
- 클라이언트 앱 문제만 풀면 된다면 React만으로도 충분할 수 있고
- 공개 웹, SEO, 서버 데이터, 캐시 전략, 제품 운영 구조까지 함께 다뤄야 한다면 Next.js가 더 자연스럽습니다
결국 React에서 Next.js로 가는 이유는 기능 몇 개가 더 필요해서가 아니라, 프로젝트가 화면 구현 단계에서 서비스 운영 단계로 넘어가기 때문입니다.
