Node.js는 JavaScript를 이용해 백엔드 서버를 구현할 수 있는 강력한 런타임 환경이다. 기본적으로 내장된 http 모듈만으로도 서버를 구축할 수 있지만, 현업에서는 Express나 NestJS 같은 프레임워크를 많이 사용한다. 이번 글에서는 바닐라(순수) Node.js, Express, NestJS를 비교하면서 각각의 특징과 장단점을 살펴보자.
바닐라 Node.js
Node.js는 http 모듈을 기본적으로 제공하며, 이를 이용해 간단한 서버를 구현할 수 있다. 다음은 기본적인 예제이다.
const http = require("http");
const PORT = 3000;
const server = http.createServer((request, response) => {
response.statusCode = 200;
response.setHeader('Content-Type', 'text/html');
response.end('Hello, Node.js Server!');
});
server.listen(PORT, () => {
console.log(`Node.js Server is running at http://localhost:${PORT}`);
});
특징
추가적인 라이브러리 없이 Node.js의 내장 기능만 사용하므로 가볍게 동작하며, Node.js의 기본 동작 원리를 이해하는 데 적합하다.
단점
모든 라우팅과 요청/응답 처리를 직접 작성해야 하므로 코드가 복잡해질 수 있고, 확장성을 증대시키거나 코드 관리가 어려워 대규모 프로젝트에는 적합하지 않다.
- 이 방법은 실무에서 거의 사용되지 않는다.
[Node.js] 실무에서는 사용하지 않는 바닐라(순수) Node.js 서버
[Node.js] 바닐라 Node.js, Express, NestJS 서버 및 코드 비교Node.js는 JavaScript를 이용해 백엔드 서버를 구현할 수 있는 강력한 런타임 환경이다. 기본적으로 내장된 http 모듈만으로도 서버를 구축할 수 있
lifewithcoding.tistory.com
Express
Express는 Node.js 환경에서 가장 널리 사용되는 웹 프레임워크로, 간결하고 직관적인 API를 제공한다.
const express = require("express");
const PORT = 3000;
const app = express();
app.get("/", (request, response) => {
response.set('Content-Type', 'text/html');
response.send("Hello, Express Server");
});
app.listen(PORT, () => {
console.log(`Express server is running at http://localhost:${PORT}`);
});
특징
- 라우팅, 미들웨어, 요청/응답 처리 등 서버 개발에 필요한 기능을 간단히 구현할 수 있다.
- 플러그인과 미들웨어를 사용해 쉽게 기능을 추가하거나 확장할 수 있다.
단점
미들웨어 체인을 관리해야 하므로 복잡한 애플리케이션에서 디버깅이 어려울 수 있고, 코드 구조 설계가 개발자에게 달려 있어 초보자가 복잡한 프로젝트를 설계하기에는 어려울 수 있다.
NestJS
NestJS는 TypeScript를 기본으로 사용하는 백엔드 프레임워크로, Angular에서 영감을 받은 구조를 가진다. 객체 지향 프로그래밍(OOP), 함수형 프로그래밍(FP), 반응형 프로그래밍(RP)의 장점을 결합한 강력한 프레임워크다.
Nest CLI 설치
npm i -g @nestjs/cli
nest new nest-server
app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
app.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello NestJS Server!';
}
}
특징
- 데코레이터(위 코드에서 @Controller(), @Get(), @Injectable()) 기반의 모듈 시스템과 명확한 코드 구조를 제공한다.
- 대규모 애플리케이션 개발에 적합하며, 모듈화된 설계로 유지보수가 용이하다.
- 정적 타입 검사를 통해 개발 안정성과 유지보수성을 높인다.
단점
초기 학습 곡선이 Express보다 가파르며, NestJS 생태계에 익숙하지 않은 개발자에게는 진입 장벽이 될 수 있다.
정리
Vanilla Node.js는 기본 동작 원리를 학습하고 간단한 서버를 구축하는 데 적합하다. 반면, Express는 가볍고 유연하며, 대부분의 백엔드 애플리케이션 개발에 적합한 프레임워크다. NestJS는 대규모 애플리케이션과 모듈화된 설계를 필요로 하는 프로젝트에서 강력한 도구가 된다.
프로젝트의 크기와 요구사항에 따라 적합한 도구를 선택하는 것이 중요하다. 현업에서는 생산성과 유지보수를 고려해 Express나 NestJS를 주로 사용하는 경우가 많다. 하지만 Node.js의 기본 동작 원리를 이해하기 위해 Vanilla Node.js로 서버를 만들어보는 것도 좋은 경험이 될 것이다.
'🕸웹 > 🟨JavaScript' 카테고리의 다른 글
[Node.js] 실무에서는 사용하지 않는 바닐라(순수) Node.js 서버 (0) | 2024.12.16 |
---|---|
[React] JSX 문법 한 번에 정리하기 (4) | 2024.12.02 |
npm 주요 명령어 정리 (0) | 2024.11.28 |
리액트 라우터 개념과 설정 방법 (1) | 2024.11.25 |
[Node.js] Node.js 생태계의 필수 도구 npm, npx, yarn 비교 (2) | 2024.11.17 |