프로그래밍/Nest.js

Nest.js 프로젝트 구조 이해하기

shimdh 2025. 3. 19. 16:52
728x90

Nest.js는 현대 웹 애플리케이션 개발을 위한 강력한 프레임워크로, 모듈화된 아키텍처를 통해 개발자들이 효율적이고 유지보수가 용이한 애플리케이션을 구축할 수 있도록 돕습니다. 이번 포스트에서는 Nest.js 프로젝트의 기본 구조와 구성 요소를 깊이 있게 이해하고, 이를 통해 개발자들이 더 나은 애플리케이션을 만들 수 있도록 돕고자 합니다.

Nest.js 프로젝트 구조 개요

Nest.js의 기본적인 프로젝트 구조는 여러 주요 디렉토리와 파일들로 구성되어 있으며, 각 요소는 애플리케이션의 기능과 동작을 정의하는 데 중요한 역할을 합니다. 주요 구성 요소는 다음과 같습니다:

  • src: 애플리케이션의 소스 코드가 위치하는 디렉토리로, 모든 비즈니스 로직과 기능이 이곳에 포함됩니다.
  • main.ts: 애플리케이션의 진입점으로, Nest 어플리케이션을 부트스트랩하고 시작하는 역할을 합니다.
  • app.module.ts: 루트 모듈로, 애플리케이션의 전체 구조를 정의하며, 다른 모듈들을 포함하여 애플리케이션의 구성을 설정합니다.
  • app.controller.ts: 클라이언트의 요청을 처리하고 적절한 응답을 반환하는 컨트롤러로, HTTP 요청을 관리하는 중요한 역할을 합니다.
  • app.service.ts: 비즈니스 로직을 담당하는 서비스로, 여러 컨트롤러에서 재사용될 수 있는 기능을 제공합니다.

주요 파일 및 디렉토리에 대한 설명

1. main.ts

이 파일은 Nest.js 앱이 실행되는 진입점으로, 애플리케이션의 부트스트랩 과정을 포함합니다. 이곳에서 NestFactory를 사용하여 애플리케이션 인스턴스를 생성하고, 지정된 포트에서 서버를 시작합니다.

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

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

2. app.module.ts

전체 애플리케이션에 필요한 모든 모듈들을 가져오고 연결하는 역할을 하며, 애플리케이션의 구조를 정의합니다. 이 파일은 다른 모듈과의 의존성을 관리하고, 애플리케이션의 기능을 확장하는 데 중요한 역할을 합니다.

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

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

3. app.controller.ts

HTTP 요청을 처리하고 적절한 응답을 제공하는 컨트롤러로, 클라이언트와의 상호작용을 관리합니다. 이 파일은 다양한 엔드포인트를 정의하여 클라이언트의 요청에 대한 응답을 처리합니다.

import { Controller, Get } from '@nestjs/common';

@Controller('hello')
export class AppController {
  @Get()
  getHello(): string {
    return '안녕하세요!';
  }
}

4. app.service.ts

비즈니스 로직이나 데이터 처리를 담당하며, 여러 컨트롤러에서 재사용될 수 있는 기능을 제공합니다. 이 파일은 애플리케이션의 핵심 로직을 구현하여, 컨트롤러와의 분리를 통해 코드의 가독성과 유지보수성을 높입니다.

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

@Injectable()
export class AppService {
  getHello(): string {
    return '안녕하세요! 서비스에서 왔습니다.';
  }
}

폴더 및 파일 추가하기

프로젝트가 커짐에 따라 기능별로 폴더를 나누어 관리하는 것이 좋습니다. 이를 통해 코드의 구조를 명확히 하고, 각 기능에 대한 책임을 분리할 수 있습니다. 예를 들어:

  • users: 사용자 관련 기능 (컨트롤러, 서비스)
  • products: 제품 관련 기능 (컨트롤러, 서비스)

예를 들어 users 폴더 안에는 다음과 같은 파일들이 있을 수 있습니다:

src/
└── users/
    ├── user.controller.ts
    ├── user.service.ts
    └── user.module.ts

각각의 파일은 해당 도메인에 맞는 컨트롤러와 서비스를 정의하게 되며, 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다.

결론

Nest.js의 프로젝트 구조를 이해하는 것은 개발자가 효율적으로 코드를 작성하고 유지보수할 수 있도록 하는 중요한 기초입니다. 각 컴포넌트를 명확히 분류함으로써 협업 시에도 코드 가독성을 높일 수 있으며, 새로운 기능 추가나 수정 작업도 손쉽게 진행할 수 있습니다. 이러한 구조적 접근 방식은 대규모 애플리케이션에서도 유용하며, 여러분이 더 복잡한 시스템으로 발전해 나갈 때 큰 도움이 될 것입니다. Nest.js의 모듈화된 아키텍처는 개발자에게 강력한 도구를 제공하여, 애플리케이션의 확장성과 유연성을 극대화할 수 있도록 합니다.

728x90