typescript로 백엔드 개발 Nest.js 튜토리얼을 시도했습니다.

소개



typescript로 백엔드를 만들고 싶었을 때, 이전에는 Express를 사용하여 Gulp로 빌드하는 방법밖에 없는 것이라고 생각하고 있었습니다. (그것이지 deno?) 최근에 nestjs라는 프레임 워크에 도착했기 때문에 기재합니다.

cli 설치


npm i -g @nestjs/cli

프로젝트 만들기



nestSample이라는 프로젝트 만들기
nest new nestSample

패키지 관리자를 npm 또는 yarn을 선택할 수있는 것 같습니다. (여기서 npm 선택
CREATE nest-sample/.eslintrc.js (631 bytes)
CREATE nest-sample/.prettierrc (51 bytes)
CREATE nest-sample/README.md (3339 bytes)
CREATE nest-sample/nest-cli.json (64 bytes)
CREATE nest-sample/package.json (1973 bytes)
CREATE nest-sample/tsconfig.build.json (97 bytes)
CREATE nest-sample/tsconfig.json (339 bytes)
CREATE nest-sample/src/app.controller.spec.ts (617 bytes)
CREATE nest-sample/src/app.controller.ts (274 bytes)
CREATE nest-sample/src/app.module.ts (249 bytes)
CREATE nest-sample/src/app.service.ts (142 bytes)
CREATE nest-sample/src/main.ts (208 bytes)
CREATE nest-sample/test/app.e2e-spec.ts (630 bytes)
CREATE nest-sample/test/jest-e2e.json (183 bytes)

? Which package manager would you ❤️  to use? (Use arrow keys)
❯ npm 
  yarn 

설치가 완료된 것 같습니다.
✔ Installation in progress... ☕

🚀  Successfully created project nest-sample
👉  Get started with the following commands:

$ cd nest-sample
$ npm run start


                                                                                           Thanks for installing Nest 🙏
                                                                                  Please consider donating to our open collective
                                                                                         to help us maintain this package.


                                                                                🍷  Donate: https://opencollective.com/nest

디렉토리의 구성은 다음과 같은 느낌이었습니다.
tree -I node_modules
.
├── nest-cli.json
├── package.json
├── package-lock.json
├── README.md
├── src
│   ├── app.controller.spec.ts
│   ├── app.controller.ts
│   ├── app.module.ts
│   ├── app.service.ts
│   └── main.ts
├── test
│   ├── app.e2e-spec.ts
│   └── jest-e2e.json
├── tsconfig.build.json
└── tsconfig.json

.git이 있었기 때문에 git의 리포지토리가 마음대로 완성되고있는 것 같습니다.

완성된 코드 확인



엔드포인트

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

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


로드하는 AppModule

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


추가로 읽고있는 AppController, AppService를 확인하십시오.

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


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

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


controller의 클래스에 service를 생성자로 주입하고 있는 것을 알 수 있습니다. (DI 패턴이라는 녀석입니까.

우선 움직여 보겠습니다.
npm start

> [email protected] start
> nest start

[Nest] 3843   - 07/02/2021, 11:59:43 PM   [NestFactory] Starting Nest application...
[Nest] 3843   - 07/02/2021, 11:59:43 PM   [InstanceLoader] AppModule dependencies initialized +133ms
[Nest] 3843   - 07/02/2021, 11:59:43 PM   [RoutesResolver] AppController {}: +26ms
[Nest] 3843   - 07/02/2021, 11:59:43 PM   [RouterExplorer] Mapped {, GET} route +12ms
[Nest] 3843   - 07/02/2021, 11:59:43 PM   [NestApplication] Nest application successfully started +10ms




우선 움직였습니다.

아직도 여러가지 기능이 있을 것 같기 때문에 조금씩 발굴해 나가면 좋겠습니다.
typeORM의 사용이 추천되고 있는 것 같기 때문에, typeORM을 사용한 단순한 CRUD에서도 만들어 보면 여러가지 알 수 있을지도 모릅니다.

좋은 웹페이지 즐겨찾기