티스토리 뷰

오늘은 Node.js 기반의 프레임워크인 NestJS에 대해 알아보겠습니다. 백엔드 개발을 하다 보면 구조화된 코드와 확장 가능한 아키텍처가 얼마나 중요한지 느끼게 되는데요, NestJS는 이런 고민을 덜어주는 도구입니다. 이 글에서는 NestJS가 무엇인지, 어떤 특징이 있는지 간단한 예제를 통해 알아보겠습니다.


1. NestJS 란?

NestJS는 Node.js로 서버 사이드 애플리케이션을 구축하기 위한 프레임워크입니다. TypeScript를 기본으로 지원하며, Express나 Fasify 같은 HTTP 서버 프레임워크 위에서 동작합니다. NestJS는 객체 지향 프로그래밍(OOP), 함수형 프로그래맹(FP), 그리고 반응형 프로그래밍(RP)의 강점을 결합해 생산성과 유지보수성을 높이는 것을 목표로 합니다. 쉽게 말해, NestJS는 Angular에서 영감을 받아 모듈화와 의존성 주입(DI)을 강조한 프레임워크라고 할 수 있습니다.


2. 특징(장/단점)

장점:

  • TypeScript 기본 지원: 타입 안전성과 코드 가독성을 높여줍니다.
  • 모듈화: 프로젝트를 기능 단위로 나눠 관리하기 쉽습니다.
  • 의존성 주입(DI): 테스트와 유지보수를 용이하게 만듭니다.
  • CLI제공: nest new 같은 명령어로 빠르게 프로젝트를 시작할 수 있습니다.
  • 확장성: REST API, GraphQL, WebSocker 등 다양한 요구사항을 지원합니다.

단점:

  • 러닝 커브: 초보자에게는 DI나 데코레이터 개념을 학습하는데 시간이 필요합니다.
  • 설정 복잡성: 작은 프로젝트에서는 오버헤드가 느껴질 수 있습니다.
  • 커뮤니티 크기: Express에 비하면 상대적으로 자료가 적을 수 있습니다.

3. 설치

NestJS를 시작하려면 Node.js 가 설치되어 있어야 합니다. Node.js 가 설치되어 있다고 가정하고 진행하겠습니다.

3.1. Nest CLI 설치

npm i -g @nestjs/cli
  • CLI를 전역으로 설치하면 편리한 명령어를 사용할 수 있습니다.

 

3.2. 새 프로젝트 생성

nest new my-nest-app
  • 원하는 디렉터리로 이동하고 명령어를 실행 후, 패키지 매니저(npm, yarn 등)를 선택하면 프로젝트가 생성됩니다.

 

3.3. 프로젝트 실행

cd my-nest-app
npm run start
  • 브라우저에서 "http://localhost:3000"에 접속하면 "Hello World!" 메시지를 확인할 수 있습니다.

4. 예제

간단한 To-Do API를 만들어 보겠습니다. 할 일 목록을 추가하고 조회하는 기능을 구현해 볼게요.

4.1. 모듈 생성

nest generate module todos

 

4.2. 서비스 생성

nest generate service todos
  • todos.service.ts 에 로직을 추가합니다.
import { Injectable } from '@nestjs/common';

@Injectable()
export class TodosService {
  private todos = [];

  create(todo: string) {
    this.todos.push(todo);
    return { message: 'Todo added', todo };
  }

  findAll() {
    return this.todos;
  }
}

 

4.3. 컨트롤러 생성

nest generate controller todos
  • todos.controller.ts를 수정합니다.
import { Controller, Get, Post, Body } from '@nestjs/common';
import { TodosService } from './todos.service';

@Controller('todos')
export class TodosController {
  constructor(private readonly todosService: TodosService) {}

  @Post()
  create(@Body('todo') todo: string) {
    return this.todosService.create(todo);
  }

  @Get()
  findAll() {
    return this.todosService.findAll();
  }
}

 

4.4. 실행 및 테스트

npm run start:dev
  • Post 요청: curl -X POST http://localhost:3000/todos -H "Content-Type: application/json" -d "{\"todo\": \"Learn NestJS\"}"

  • Get 요청: http://localhost:3000/todos

 

5. 마무리

NestJS를 통해 간단한 API를 만들어 봤는데요, 모듈, 서비스, 컨트롤러로 나눠진 구조 덕분에 코드가 깔끔하고 확장하기 쉽습니다. NestJS는 작은 프로젝트부터 대규모 애플리케이션까지 유연하게 사용할 수 있는 프레임워크입니다. 앞으로 더 많은 기능을 탐구해보고 싶다면 공식 문서(nestjs.com)를 참고해보세요.
 
감사합니다.
최근에 올라온 글
Total
Today
Yesterday