클라우드 컴퓨팅 & NoSQL/Vert.x & Node.js

Nest.JS 살펴보기 - 2. Hello World

Terry Cho 2025. 2. 13. 15:05

Nest.JS 살펴보기 - 2. Hello World

조대협 (http://bcho.tistory.com)

1. 프로젝트 생성:

터미널을 열고 다음 명령어를 실행하여 hello-world라는 이름의 Nest.js 프로젝트를 생성한다.

nest new hello-world

프로젝트 생성 과정에서 패키지 매니저를 선택하라는 메시지가 나타나면 npm을 선택한다. 프로젝트 생성이 완료되면 hello-world 디렉토리로 이동한다.

 cd hello-world

2. 주요 파일 설명:

생성된 프로젝트에는 다음과 같은 주요 파일들이 있다.

  • src/app.controller.ts: 애플리케이션의 컨트롤러를 정의하는 파일이다. 컨트롤러는 클라이언트로부터 들어오는 요청을 처리하고, 그에 대한 응답을 반환하는 역할을 수행한다. 라우팅 로직과 요청 처리를 담당한다.
  • src/app.service.ts: 애플리케이션의 비즈니스 로직을 담당하는 서비스 클래스를 정의하는 파일이다. 데이터베이스 연동, API 호출 등 실제 애플리케이션의 핵심 기능을 구현한다. 컨트롤러는 서비스를 호출하여 작업을 처리한다.
  • src/app.module.ts: 애플리케이션의 모듈을 정의하는 파일이다. 모듈은 관련된 컨트롤러, 서비스, 컴포넌트들을 하나의 논리적인 단위로 묶어 관리하는 역할을 한다. Nest.js 애플리케이션은 하나 이상의 모듈로 구성된다.
  • src/main.ts: 애플리케이션의 진입점 역할을 하는 파일이다. 이 파일에서 Nest.js 애플리케이션 인스턴스를 생성하고, 필요한 설정을 수행한 후 애플리케이션을 실행한다.

3. Hello World 출력:

기본적으로 생성된 app.controller.ts 파일에는 루트 경로 (/)로 들어오는 GET 요청을 처리하고 "Hello World!" 문자열을 반환하는 코드가 이미 작성되어 있다. 만약 코드가 없다면 아래 코드를 추가한다.

// src/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();
  }
}

 

코드 설명:

  • import { Controller, Get } from '@nestjs/common';: @nestjs/common 모듈에서 ControllerGet 데코레이터를 가져온다. 데코레이터는 클래스나 메서드에 메타데이터를 추가하는 역할을 한다.
  • import { AppService } from './app.service';: app.service.ts 파일에서 AppService 클래스를 가져온다.
  • @Controller(): AppController 클래스를 컨트롤러로 지정한다. 컨트롤러는 특정 경로에 대한 요청을 처리하는 역할을 한다.
  • constructor(private readonly appService: AppService) {}: AppService를 컨트롤러의 생성자를 통해 주입받는다. 이를 통해 컨트롤러에서 AppService의 메서드를 사용할 수 있다. private readonly는 TypeScript의 기능으로, 생성자에서 주입받은 appService를 클래스 내부에서만 읽기 전용으로 사용할 수 있도록 한다.
  • @Get(): getHello() 메서드가 GET 요청을 처리하는 핸들러임을 나타낸다. 괄호 안에 경로를 지정하지 않으면 루트 경로 (/)로 들어오는 GET 요청을 처리한다.
  • getHello(): string { return this.appService.getHello(); }: AppServicegetHello() 메서드를 호출하여 반환된 문자열을 클라이언트에게 응답으로 보낸다.

그리고 app.service.ts 파일에도 아래의 코드가 있는지 확인한다. 없다면 아래 코드를 추가한다.

// src/app.service.ts
import { Injectable } from '@nestjs/common';

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

코드 설명:

  • import { Injectable } from '@nestjs/common';: @nestjs/common 모듈에서 Injectable 데코레이터를 가져온다.
  • @Injectable(): AppService 클래스를 Injectable로 지정한다. Injectable은 Nest.js의 의존성 주입 시스템에 의해 관리되는 클래스를 의미한다. 컨트롤러나 다른 서비스에서 AppService를 주입받아 사용할 수 있게 된다.
  • getHello(): string { return 'Hello World!'; }: "Hello World!" 문자열을 반환하는 메서드이다.

마지막으로 app.module.ts 파일에 AppControllerAppService가 providers에 잘 등록되어 있는지 확인한다.

      // src/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 {}
    

 

4. 애플리케이션 실행:

터미널에서 다음 명령어를 실행하여 애플리케이션을 실행한다.

npm run start:dev

 

이 명령어는 개발 모드로 애플리케이션을 실행한다. 개발 모드로 실행하는 이유는 파일이 변경될 때마다 애플리케이션이 자동으로 재시작된다.

5. 웹 브라우저에서 확인:

웹 브라우저를 열고 http://localhost:3000에 접속한다. "Hello World!"라는 문구가 웹 페이지에 표시되면 성공적으로 Hello World 웹사이트를 출력한 것이다.