내일배움캠프 TIL

nest.js 에 대하여 본캠프 TIL 01/21

parkcw0325 2025. 1. 21. 20:40

Nest.js는 Node.js를 기반으로 한 서버 애플리케이션 개발 프레임워크로, 내부적으로 Express 프레임워크를 기본으로 사용합니다. 필요에 따라 Fastify 프레임워크를 사용할 수도 있으며, 이 두 프레임워크의 API를 직접 활용할 수 있는 구조를 제공합니다. 따라서 개발자는 자신에게 익숙한 방식을 선택하여 서버 애플리케이션을 개발할 수 있습니다.

Nest.js의 가장 큰 특징정형화된 아키텍처를 가지고 있다는 점입니다. 이는 기존의 Express와 달리, 스프링 프레임워크와 유사한 구조를 제공합니다. Controller, Service와 같은 개념이 존재하며, Decorator(스프링의 Annotation과 유사)가 많이 사용됩니다. 따라서 스프링 프레임워크에 익숙한 개발자라면 Nest.js를 빠르게 이해할 수 있습니다.

 

기본 설치 및 프로젝트 생성

Nest.js는 CLI(Command Line Interface)를 제공하여 개발 편의성을 높입니다. CLI를 설치하고 새로운 프로젝트를 생성하는 방법은 다음과 같습니다.

 

$ npm i -g @nestjs/cli  # Nest.js CLI 전역 설치
$ nest new project-name # 새로운 프로젝트 생성

프로젝트 생성 후 디렉토리 구조는 다음과 같습니다

 

src/
  ├── app.controller.ts
  ├── app.controller.spec.ts
  ├── app.module.ts
  ├── app.service.ts
  └── main.ts

 

주요 파일 설명

1. app.controller.ts

컨트롤러는 요청(Request)을 처리하고 응답(Response)을 반환하는 역할을 합니다. 다음은 기본 컨트롤러의 예시입니다.

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller() // 기본 라우트 설정
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get() // HTTP GET 요청 핸들링
  getHello(): string {
    return this.appService.getHello();
  }
}

2. app.service.ts

서비스는 비즈니스 로직을 처리하는 파일입니다. 위의 컨트롤러에서 사용된 getHello 메서드는 다음과 같이 정의됩니다.

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello, World!';
  }
}

 

3. app.module.ts

Nest.js는 모듈(Module) 기반으로 동작합니다. AppModule은 애플리케이션의 루트 모듈로, 컨트롤러와 서비스를 등록합니다.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [], // 다른 모듈을 가져올 때 사용
  controllers: [AppController], // 등록할 컨트롤러
  providers: [AppService], // 등록할 서비스
})
export class AppModule {}

 

4. main.ts

Nest.js 애플리케이션의 진입점으로, 서버를 실행하는 역할을 합니다.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000); // 서버를 3000번 포트에서 실행
  console.log('Application is running on http://localhost:3000');
}
bootstrap();

실행 방법

Nest.js 프로젝트를 실행하려면 다음 명령어를 사용합니다.

$ npm run start       # 프로덕션 환경 실행
$ npm run start:dev   # 개발 환경 실행 (파일 변경 시 자동 재시작)

특징 및 장점

  1. 테스트 지원
    Nest.js는 Jest를 기본 테스트 환경으로 제공합니다. 파일 생성 시 테스트용 .spec.ts 파일도 자동으로 생성됩니다.
  2. 확장성과 유지보수성
    정형화된 구조 덕분에 팀 단위 개발에 적합하며, 대규모 프로젝트에서도 효율적입니다.
  3. 유연성
    Express와 Fastify를 선택적으로 사용할 수 있어 다양한 요구 사항을 충족합니다.