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 모듈에서 Controller와 Get 데코레이터를 가져온다. 데코레이터는 클래스나 메서드에 메타데이터를 추가하는 역할을 한다.
- 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(); }: AppService의 getHello() 메서드를 호출하여 반환된 문자열을 클라이언트에게 응답으로 보낸다.
그리고 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 파일에 AppController와 AppService가 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 웹사이트를 출력한 것이다.
'클라우드 컴퓨팅 & NoSQL > Vert.x & Node.js' 카테고리의 다른 글
Nest.js 살펴보기 #1 - 환경 구성 (0) | 2025.02.13 |
---|---|
쿠버네티스 리소스 (Resource)에 대해 (1) | 2018.06.24 |
빠르게 훝어 보는 node.js - 구글 앱앤진에 node.js 애플리케이션을 배포해보자. (1) | 2016.07.26 |
빠르게 훝어 보는 node.js - redis 사용하기 (ioredis 클라이언트 버전) (0) | 2016.03.30 |
빠르게 훝어 보는 node.js - redis 사용하기 (0) | 2016.03.29 |