두 프레임워크는 이름은 비슷하지만 다른 역할을 수행하는 프레임워크입니다.
이 글에서는 Next.js와 Nest.js의 차이점을 정리해보겠습니다.
| Next.js | Nest.js | |
|---|---|---|
| 설명 | React 기반의 프론트엔드 웹 프레임워크 | Node.js 기반의 백엔드 웹 프레임워크 |
| 주요 용도 | SSR 등 다양한 렌더링 지원 | REST API, WebSocket 등 서버 구축 |
| 기본 역할 | 클라이언트 측 렌더링 + 서버 사이드 렌더링 | 백엔드 API 서버 및 웹 애플리케이션 서버(WAS) 구축 |
| 프레임워크 기반 | React | Node.js (Express 또는 Fastify 기반) |
| 언어 | JavaScript, *TypeScript | JavaScript, *TypeScript |
Next.js: SSR(Server-Side Rendering) 등 다양한 렌더링 방식을 지원하여 SEO(검색 엔진 최적화) 가능함.
Nest.js: HTTP 요청을 처리하는 API 서버를 구축하는 백엔드 프레임워크로, 비즈니스 로직을 처리하고 데이터베이스와 연동하는 역할을 수행함.
📌 한줄 정리: Next.js는 화면(UI)을 만드는 프레임워크, Nest.js는 서버 로직을 담당하는 프레임워크
SSR(Server-Side Rendering) 이란?
클라이언트(브라우저)가 웹 페이지를 요청할 때, 서버에서 HTML을 미리 생성하여 전달하는 방식
| Next.js | Nest.js | |
|---|---|---|
| 라우팅 방식 | 파일 기반 라우팅 (pages/, app/) | 데코레이터 기반 라우팅 (@Controller, @Get, @Post) |
| 예제 | pages/index.js → / | @Get('/users') → /users |
| 서버에서 직접 API 제공 가능 여부 | ⭕ (app/api 폴더 활용) | ⭕ (REST API 지원) |
📌 예제 코드 비교
// pages/index.js
export default function Home() {
return <h1>Next.js Home</h1>;
}
import { Controller, Get } from '@nestjs/common';
@Controller('users')
export class UserController {
@Get()
getAllUsers() {
return "유저 리스트";
}
}
데코레이터(Decorator) 란?
@ 기호로 시작하며, 함수처럼 동작해서 클래스나 메서드 등에 추가적인 기능을 부여하는 문법.@Controller(), @Get(), @Post()❗Nest.js에서 라우팅, 요청 처리, 의존성 주입 등에 사용된다.
📌 Next.js는 파일을 기반으로 라우팅, Nest.js는 데코레이터(@Get, @Post) 기반으로 라우팅을 설정합니다.
| Next.js | Nest.js | |
|---|---|---|
| 데이터베이스 연동 | 직접적인 DB 연동 없음 (API 호출 필요) | TypeORM, Prisma, Mongoose 등 다양한 ORM 지원 |
| 백엔드 API 호출 | fetch(), Axios 등으로 외부 API 호출 | 직접 API 서버 제공 (REST API 등) |
Nest.js는 Next.js의 백엔드로 사용할 수 있다!
Next.js는 프론트엔드 프레임워크이기 때문에, 백엔드 API가 필요!
➡︎ Nest.js를 Next.js의 백엔드 서버로 활용 가능!
📌 예제 구조: Next.js (프론트엔드) → Nest.js (백엔드 API 서버) → 데이터베이스
Next.js + Nest.js를 함께 사용하면 좋은 점
즉, Next.js와 Nest.js는 다른 역할을 하지만, 서로 조합하면 풀스택 애플리케이션 구축이 가능하다.