프로그래밍/Nest.js

첫 번째 Nest.js 애플리케이션 만들기: 기본 컨트롤러 및 서비스 생성

shimdh 2025. 3. 18. 10:12
728x90

Nest.js는 현대적인 웹 애플리케이션을 구축하기 위한 강력한 프레임워크로, TypeScript를 기반으로 하여 개발자에게 높은 생산성과 유지보수성을 제공합니다. 이번 포스트에서는 Nest.js를 사용하여 첫 번째 애플리케이션을 만드는 과정을 단계별로 살펴보겠습니다. 특히 기본 컨트롤러와 서비스를 생성하는 방법에 대해 자세히 알아보겠습니다.

1. 프로젝트 생성

Nest.js 애플리케이션을 시작하기 위해서는 먼저 새로운 프로젝트를 생성해야 합니다. 이를 위해 Nest CLI(Command Line Interface)를 사용합니다. Nest CLI는 애플리케이션을 쉽게 생성하고 관리할 수 있도록 도와주는 도구입니다. 다음 명령어를 입력하여 새 프로젝트를 생성합니다:

nest new my-nest-app

이 명령어는 my-nest-app이라는 이름의 새 디렉토리를 만들고, 그 안에 기본적인 파일 구조와 설정을 포함한 Nest.js 애플리케이션 템플릿을 설치합니다. 프로젝트가 생성되면 해당 디렉토리로 이동하여 애플리케이션을 실행할 준비를 할 수 있습니다.

2. 기본 컨트롤러 생성

컨트롤러는 클라이언트의 요청을 처리하고 응답을 반환하는 역할을 합니다. 새로운 컨트롤러를 추가하기 위해 다음 명령어를 사용합니다:

nest generate controller cats

위 명령어는 cats라는 이름의 새로운 컨트롤러 파일을 생성합니다. 이 파일 내에서 간단한 GET 요청 핸들러를 작성할 수 있습니다:

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

@Controller('cats')
export class CatsController {
  @Get()
  findAll(): string {
    return 'This action returns all cats';
  }
}

위 코드에서 @Controller('cats') 데코레이터는 /cats 경로에 대한 요청 처리를 담당하도록 지정하며, findAll() 메서드는 모든 고양이에 대한 정보를 반환합니다. 이 메서드는 클라이언트가 /cats 경로로 GET 요청을 보낼 때 호출되며, 고양이 목록을 반환하는 역할을 합니다.

3. 서비스 생성

서비스는 비즈니스 로직과 데이터 조작 기능을 담당합니다. 서비스를 추가하려면 다음과 같은 명령어를 입력하세요:

nest generate service cats

생성된 서비스 파일에서는 데이터를 관리하거나 특정 작업을 수행할 수 있는 메서드를 정의할 수 있습니다:

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

@Injectable()
export class CatsService {
  private readonly cats = [];

  create(cat: any) {
    this.cats.push(cat);
  }

  findAll() {
    return this.cats;
  }
}

여기서 CatsService 클래스에는 고양이를 추가하고 조회하는 기능이 포함되어 있습니다. create 메서드는 새로운 고양이 객체를 배열에 추가하는 역할을 하며, findAll 메서드는 현재 저장된 모든 고양이 객체를 반환합니다. 이러한 서비스는 애플리케이션의 비즈니스 로직을 분리하여 코드의 가독성과 유지보수성을 높이는 데 기여합니다.

4. 컨트롤러와 서비스 연결

컨트롤러가 서비스를 호출하여 비즈니스 로직에 접근하도록 연결해야 합니다. 이를 위해서는 먼저 서비스 클래스를 주입받아야 합니다:

import { Controller, Get } from '@nestjs/common';
import { CatsService } from './cats.service';

@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Get()
  findAll(): string[] {
    return this.catsService.findAll();
  }
}

이제 CatsController에서 CatsService의 메서드를 호출하여 실제 데이터를 제공받습니다. 이 연결을 통해 컨트롤러는 서비스의 기능을 활용하여 클라이언트의 요청에 대한 응답을 생성할 수 있습니다. 이러한 구조는 애플리케이션의 각 구성 요소가 어떻게 상호작용하는지를 명확히 보여줍니다.

결론

이렇게 해서 첫 번째 Nest.js 애플리케이션의 기본적인 구성 요소인 컨트롤러서비스를 성공적으로 만들어 보았습니다. 이러한 과정을 통해 웹 애플리케이션 개발 시 각 구성 요소가 어떻게 상호작용하며 전체 시스템이 작동하는지를 이해하게 됩니다. 이 경험은 향후 더 복잡한 애플리케이션을 개발하는 데 있어 매우 중요한 기초가 될 것입니다.

실제로 이러한 구조가 잘 설계되면 확장성과 유지보수성이 뛰어난 코드를 작성할 수 있으며, 향후 더 복잡한 기능이나 모듈도 쉽게 통합할 수 있게 됩니다. Nest.js의 강력한 기능을 활용하여 더 나아가 다양한 서비스와 데이터베이스와의 연동, 인증 및 권한 관리 등 복잡한 요구사항을 충족하는 애플리케이션을 개발할 수 있는 기반을 마련할 수 있습니다.

728x90