NestJS로 프로젝트 생성 및 서버 개발하기
BE/NestJS2023. 11. 17. 22:16NestJS란?
node.js 를 사용하여 쉽게 서버 개발을 할 수 있도록 도와주는 Back-end 프레임워크입니다. Javascript
뿐만 아니라 Typescript
로도 완벽하게 지원합니다. (프로젝트를 생성하면 기본적으로 Typescript 기반으로 생성됨)
또한 OOP(Object Oriented Programming), FP(Functional Programming), FRP(Funtional Reactive Programming) 를 같이 사용할 수 있습니다.
- OOP: 객체지향 프로그래밍
- FP: 함수형 프로그래밍
- FRP: 함수형 반응형 프로그래밍
프로젝트 생성
사전준비 - node 설치
nestjs는 node 기반의 서버 프레임워크이므로, node 설치가 필요합니다. node 설치는 아래 글 참고하시면 됩니다.
Nestjs CLI를 사용하여 시작하기
Nestjs를 빠르게 시작할 수 있도록 도와주는 nestjs cli
를 설치해봅시다.
npm install --global @nestjs/cli
제대로 설치가 됐는지 nest -v
또는 nest --version
명령어로 확인해볼 수 있습니다.
$ nest -v
10.2.1
이제 nestjs cli로 쉽게 프로젝트를 생성할 수 있습니다. nest new <프로젝트명>
nest new my-app
이후 아래와 같이 nestjs 프로젝트 설정을 위해 패키지 매니저의 종류를 물어봅니다. 원하는 패키지 매니저를 선택합니다.
생성된 프로젝트를 자신이 사용하는 IDEA 툴로 열어보면, 서버 개발을 위한 기본적인 틀이 작성된 파일들이 생성되어 있는 것을 확인할 수 있습니다.
Nestjs 프로젝트 구조 파악
nestjs 프로젝트를 생성하면, 개발 규칙을 정의하는 eslint, 코드를 예쁘게 정렬해주는 prettier, typescript 등 이 기본적으로 설정됩니다. 그리고, nestjs 프로젝트 설정을 할때는 nest-cli.json에 정의합니다.
main.ts는 프로젝트의 entrypoint로 가장 처음으로 실행되는 파일입니다. 코드를 보면 알 수 있듯이 AppModule이라는 root 모듈로 app을 생성하고, 3000포트로 실행하는 것을 확인할 수 있습니다.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
프로젝트 실행하기
이제 프로젝트를 실행해봅시다. node를 사용한 프로젝트들은 package.json의 script 부분을 보면 app을 실행하기 위해, 어떤 명령어를 사용하면 될지 대략적으로 알 수 있습니다.
방금 만든 nestjs 프로젝트를 실행하기 위해 아래 명령어를 사용하여 서버를 띄어봅시다.
yarn start:dev
그리고, nestjs가 정상적으로 실행되고나서 localhost:3000으로 들어가보면 "Hello World!"라는 문구를 볼 수 있습니다.
서버 요청/응답 플로우 파악하기
어떤 로직으로 위와 같이 루트(/)로 들어갔을때 "Hello World!"가 나왔는지 분석해봅시다.
main.ts에 AppModule이 정의된 app.module.ts를 보면, AppController와 AppService가 정의되어 있습니다.
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
AppController가 정의된 app.controller.ts
를 봅시다. AppController라는 class가 정의되어 있고, (Java Spring Framework와 같이) @Controller
데코레이터가 붙어있습니다.
그리고, 멤버 함수로 getHello()가 있고 @Get() 데코레이터가 붙어있습니다. (nestjs에서는 이 멤버함수를 Handler라고 함)
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();
}
}
Spring 또는 Django 등 서버 개발을 어느정도 해본 사람은 바로 어떤 역할을 하는 데코레이터인지 감이 올거 같습니다. 간단하게 설명하면 @Get()
데코레이터는 HTTP의 GET method를 이용한 API를 정의할 때 사용합니다.
getHello()의 return으로 appService가 있는데, AppService가 정의된 app.service.ts
를 봅시다. 문자열 Hello World!를 출력하는 메소드입니다.
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
정리하면, 아래와 같은 흐름으로 동작한다고 볼 수 있습니다.
- 사용자가 /로 접근
- AppController의 getHello()를 수행
- AppService의 getHello()를 AppController에 return
- AppController는 사용자에게 결과값을 return
Reference
'BE > NestJS' 카테고리의 다른 글
NestJS + postgres + typeorm 연동하기 (서버 DB 연결) (0) | 2023.11.21 |
---|---|
NestJS Pipe를 이용하여 데이터 변환 및 검증 (1) | 2023.11.20 |
NestJS에서 서비스(Service) 개념 및 서비스 생성하기 (0) | 2023.11.19 |
NestJS 컨트롤러(Controller) 개념 및 정의하기 (0) | 2023.11.17 |
NestJS의 모듈(module) 개념 및 module 정의하기 (0) | 2023.11.17 |
IT 기술에 대한 글을 주로 작성하고, 일상 내용, 맛집/숙박/제품 리뷰 등 여러가지 주제를작성하는 블로그입니다. 티스토리 커스텀 스킨도 개발하고 있으니 관심있으신분은 Berry Skin을 검색바랍니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!