[nest.js] 1. nest.js를 배워볼까?

적자생존·2024년 3월 17일

nest.js

목록 보기
1/6

nest.js를 배우는 이유는 사내 새로운 프로젝트를 시작하기에 앞서 우선 현재 사용하고 있는 기술들에서 레벨업을 해야할 필요가 있기 때문에 nest.js를 배우고자 한다.

현재
프론트엔드 : 바닐라자바스크립트 + jquery, 리액트
백엔드 : php, perl

목표
프론트엔드 : next.js
백엔드 : node.js + nest.js, python

우선 위 나열한 기술을 접목시켜서 한 단계 레벨업을 하기 위함에 첫단추로 nest.js를 배우면서 정리하고자한다.

유데미 https://www.udemy.com/course/nestjs-complete-developers-guide-korean/?couponCode=JUST4U02223 강의 기준으로 포스트를 작성한다.

1. 설치

일단 npm 기반으로 설치를 하고 nest.js를 cli로 설치하는 것이 아닌 백지상태에서 설치하여 구현한다.

npm install @nestjs/common@7.6.17 @nestjs/core@7.6.17 @nestjs/platform-express@7.6.17 reflect-metadata@0.1.13 typescript@4.3.2

일단 강의대로 냅다 설치를 시작한다.

각 패키지 설명

@nestjs/common@7.6.17

nest.js에서 사용하는 함수, 클래스 등을 포함하는 패키지들이다.

@nestjs/platform-express@7.6.17

nest.js에서는 따로 http 요청에 대해서 받아서 요청하지 않는다. http요청에 대해서 처리가 필요할 경우 nest.js에서 자체적으로 요청을 받는 것이 아닌 외부 모듈에 의존을 해야한다.

nest.js의 경우 이러한 요청을 받아들이기 위해서 필요한 모듈이 express, fastfy가 있는데 여기서는 express를 이용하여 구현을 할 예정이기에 express를 설치한다.

typescript@4.3.2

nest.js에서 타입스크립트는 필수는 아니지만 nest.js를 사용하면 보편적으로 많이 사용하게 되기 때문에 타입스크립트를 설치한다.

2. 타입스크립트 설정

1과정에서 설치가 완료되었으면 타입스크립트를 설정하러 간다.

root에 tsconfig.json을 만든다.

{
    "compilerOptions": {
        "module": "CommonJS",
        "target": "ES2017",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true
    }
}

해당 json을 입력한 뒤 저장해준다.

experimentalDecorators, emitDecoratorMetadata는 타입스크립트가 nest.js에서 실행이 되도록 하는 옵션이기에 반드시 설정을 해주어야 한다.

3. controller 만들기

모든 서버의 매커니즘은 비슷하게 돌아간다.

요청 - 처리 - 응답

기본적으로 api는 위의 방식대로 돌아간다고 생각한다.

물론 처리 단계에서 검증, 인증인가, 서비스, db 등이 있으며 nest.js에서는 node와 express에서 처리한 단계와 마찬가지로 module, controller가 필요하다.

가. 디렉토리 설정

모든 언어에서 국룰인 root에 src라는 폴더를 만든 뒤 main.ts를 만들어준다.
main.ts는 nest.js를 실행할 때 처음 실행되는 파일이다.

나. import

import { Module, Controller } from "@nestjs/common";

@nestjs/common 모듈에서 Module, Controller를 import 한다.

이는 nest.js에서 Module과 Controller를 생성하는데 도움을 주는 도구이다.

다. 데코레이터 생성하기

우선 get 요청을 처리하기 위한 controller를 만들 것이다.

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

@Controller()
class AppController {
  @Get()
  getRootRoute() {
    return "hi there";
  }
}

@가 앞에 붙은 것들을 nest.js에서 데코레이터라고 하며 이는 추후 설명하도록 하고 위와 같이 작성한다.

http 메소드로 get 요청이 들어올 경우 @Get()이 실행 후 getRootRoute에서 리턴된 "hi there"이 반환되어서 나오는 구조이다.

4. nest.js app 시작하기

3번 과정에서 controller를 만들었고 이를 실행하기 위해서 로컬에서 실행을 해봐고 싶다.

그러기 위해서는 module을 설정해준다.

@Module({
  controllers: [AppController],
})
class AppModule {}

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}

bootstrap();

위와 같이 코드를 작성해준다.

이 과정은 express에서 app.listen을 통해서 실행하는 과정과 동일하다.

이후 터미널에서

npx ts-node-dev src/main.ts

를 이용하여 실행한다.

Nest application이 성공적으로 시작되었다는 메시지를 볼 수 있고 브라우저에서
localhost:3000을 입력하게 되면

위와 같은 화면을 볼 수 있다.

profile
적는 자만이 생존한다.

0개의 댓글