본문 바로가기

Backend/NestJS

[NestJS Overview] NestJS 시작하기(NestJS 프로젝트 시작, 구성)

728x90
먼저 nest의 특징과 프로젝트를 생성했을 때 구성들에 대한 기록이다.

NestJS 특징

NestJS는 기본적으로 TypeScirpt를 사용한다.

 

Express 위에서 돌아가는 프레임워크로 비교적 자유도가 낮은 편이다.

이는 구조가 있다는 뜻이고, 실수할 가능성이 적고, 보다 체계화된 코드를 작성할 수 있다.

Installation

CLI

$npm install -g @nests/cli

nest는 명령어를 많이 사용한다.

따라서 nest cli를 설치한다.

 

위의 코드로 nest cli를 설치하면, nest 명령어를 사용할 수 있다.

nest를 입력했을 때 위와 같은 명령어들이 나온다면, 정상적으로 설치된 것이다.

 

프로젝트

$nest new [name]

위의 명령어로 프로젝트를 생성해준다.

 

초기 Nest 프로젝트는 위와 같은 폴더 구조를 가지고 있다.

구조

package.json

먼저 package.json의 scripts의 값을 보자.

프로젝트를 실행시켜줄 수 있는 명령어들이 있다.

 

개발 단계에서는 주로 아래와 같은 명령어를 사용한다.

$npm run start:dev

package.json 파일에서 보면 "nest start --watch"라고 되어있는데

이는 프로젝트를 실행시키고, 파일을 저장할 때마다 자동으로 변경사항을 반영한다는 것을 의미한다.

 

개발 단계에서 굉장히 유용한 기능이다.

 

main.ts

main.ts 파일은 프로젝트의 root 파일이라고 할 수 있다.

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

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();
  • NestFactory : create 메서드를 통해 Nest 응용 프로그램의 인스턴스를 생성한다. AppModule을 인자로 전달했는데 AppModule은 아래의 기록을 참고하자.
  • listen(3000) : 3000은 포트 번호를 말한다. 이대로 프로젝트를 실행하면, localhost:3000에서 실행될 것이다.

app.module.ts

Nest 프로젝트에서 모듈은 한 기능을 수행하는 부품 같은 역할을 한다.

ex) 채팅 모듈, 주문 모듈 등

 

그렇다면 이 부품을 조합할 모듈이 필요할 것이다.

바로 그 역할을 하는 것이 app module이다.

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

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
  • imports : 위에서 언급한 부품들을 가져올 곳이다. 부품 모듈들을 import 하는 역할을 한다.

출처: https://docs.nestjs.com/modules

공식 문서에서 가져온 모듈의 구조이다.

위와 같이 여러 부품 모듈을 Application Module에서 조합하는데

imports를 통해 조합하는 것이다.


출처

 

NestJS로 API 만들기 – 노마드 코더 Nomad Coders

Enterprise Server Side Applications

nomadcoders.co

마치며

초기 프로젝트의 controller.ts와 service.ts 파일에 대해서는

두 파일의 관계와 각각에 대한 설명이 필요해 기록이 길어질 것 같아 나누기로 했다.

 

잘못된 기록에 대한 피드백은 환영입니다.

감사합니다.

 

 

 

728x90