지금까지 자바를 주로 사용해오고, 코틀린을 끄적 끄적 사용해왔지만
추후 Serveless에 활용되기에는 너무 먼것같고(Graalvm은 아직 멀고 멀어보인다..ㅠㅠ)
효율적인 Node.js 에 괜찮은 프레임워크가 나왔다길래 공부해보려고 합니다.
(추후 Serverless나 Toy 프로젝트에 조금씩 활용해볼수 있을듯..)
Nest CLI 설치
npm i -g @nestjs/cli
설치 후 'nest' 를 입력하면 command 들에 대해 설명이 잘 기술되어있습니다.
nest
Usage: nest <command> [options]
Options:
-v, --version Output the current version.
-h, --help Output usage information.
Commands:
new|n [options] [name] Generate Nest application.
build [options] [app] Build Nest application.
start [options] [app] Run Nest application.
info|i Display Nest project details.
update|u [options] Update Nest dependencies.
add [options] <library> Adds support for an external library to your project.
generate|g [options] <schematic> [name] [path] Generate a Nest element.
Available schematics:
┌───────────────┬─────────────┬──────────────────────────────────────────────┐
│ name │ alias │ description │
│ application │ application │ Generate a new application workspace │
│ class │ cl │ Generate a new class │
│ configuration │ config │ Generate a CLI configuration file │
│ controller │ co │ Generate a controller declaration │
│ decorator │ d │ Generate a custom decorator │
│ filter │ f │ Generate a filter declaration │
│ gateway │ ga │ Generate a gateway declaration │
│ guard │ gu │ Generate a guard declaration │
│ interceptor │ in │ Generate an interceptor declaration │
│ interface │ interface │ Generate an interface │
│ middleware │ mi │ Generate a middleware declaration │
│ module │ mo │ Generate a module declaration │
│ pipe │ pi │ Generate a pipe declaration │
│ provider │ pr │ Generate a provider declaration │
│ resolver │ r │ Generate a GraphQL resolver declaration │
│ service │ s │ Generate a service declaration │
│ library │ lib │ Generate a new library within a monorepo │
│ sub-app │ app │ Generate a new application within a monorepo │
│ resource │ res │ Generate a new CRUD resource │
└───────────────┴─────────────┴──────────────────────────────────────────────┘
프로젝트 생성(proj_name에 생성하고싶은 이름 입력, 해당 이름으로 디렉토리 생성됨)
nest n proj_name
생성된 디렉토리를 진입하면 /src 디렉토리가 보이고
생성된 디렉토리에서 "nest start"를 입력하면 바로 서버가 기동된다.
(localhost:3000 호출시, 기본적으로 Hello World는 볼수 있도록 샘플 코드가 같이 생성된다)
/src 디렉토리를 확인하면 파일들이 5개 정도 존재하는데
app.controller.spec.ts : Test 코드
//
app.controller.ts : Controller 코드, Spring 처럼 어노테이션들을 볼 수 있다.
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
//
app.module.ts : 모듈 선언(의존성 선언 같은), AppController는 AppService를 의존성을 가지고 있도록 생성됨
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
//
app.service.ts : 서비스 코드(@Injectable은 없어도 Injection에는 문제는 없던데 추후에 학습해봐야겠다)
main.ts : SpringBootApplication 처럼, 메인이며, Nest를 실행하며, 포트에 대한 선언도 이 코드에 있다.
기본적으로 restController 처럼 값을 응답할텐데, View를 표현할 필요가 있다면 hbs 와 같은 모듈을 추가하여 동적 View도 제공 가능 합니다.