nest의 공식문서를 토대로 작성합니다.
이 챕터에서는 Nest의 핵심 기본 사항에 대해 알아보고 Nest의 필수 구성 요소에 익숙해지기 위해 간단한 CRUD 앱을 빌드해 봅시다.
언어는 TS, JS 모두 가능합니다. 공식 문서에서 각 코드 블록에서 우측 상단 버튼을 누르면 JS로 전환 가능합니다. (JS 사용 시 Babel 컴파일러가 필요하다고 합니다.)
저는 TS 그대로 사용하도록 하겠습니다.
Node.js 버전 13을 제외한 버전 12 이상이 설치되어 있어야 합니다.(작성일 기준)
우리는 1장에서 이미 다 했습니다!!
여기서는 구조 그리고 각 파일의 역할에 대해 설명합니다.
nest cli로 생성한 프로젝트 폴더를 보면
이렇게 src 폴더 안에 5가지 파일을 확인할 수 있습니다.
각 파일에 대한 간단한 설명을 보면
파일 | 설명 |
---|---|
app.controller.ts | 단일 경로의 기본 컨트롤러 |
app.controller.sepc.ts | 컨트롤러에 대한 유닛 테스트 |
app.module.ts | 애플리케이션의 루트 모듈 |
app.service.ts | 단일 메소드의 기본 서비스 |
main.ts | Nest 애플리케이션 인스턴스를 작성하는 엔트리 파일 |
이게 뭔가 한국말로 하려니까 조금 어색한 부분이 있네요ㅎ
이거 보고 감을 못잡으셔도 됩니다 이후에 더 자세히 나오니까요
우선 main.ts 파일을 보시면 이렇게 되어있는데
# 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();
완벽히는 모르겠지만 NestFactory 함수에 있는 create 메소드를 사용해서 NestApplication의 인스턴스를 만들고 3000번 포트로 실행한다 정도가 제 이해입니다.
혹시 보면 알까 해서 폴더 내에서 찾아봤습니다.
# nest-factory.js
async create(moduleCls, serverOrOptions, options) {
const [httpServer, appOptions] = this.isHttpServer(serverOrOptions)
? [serverOrOptions, options]
: [this.createHttpAdapter(), serverOrOptions];
const applicationConfig = new application_config_1.ApplicationConfig();
const container = new container_1.NestContainer(applicationConfig);
const graphInspector = this.createGraphInspector(appOptions, container);
this.setAbortOnError(serverOrOptions, options);
this.registerLoggerConfiguration(appOptions);
await this.initialize(moduleCls, container, graphInspector, applicationConfig, appOptions, httpServer);
const instance = new nest_application_1.NestApplication(container, httpServer, applicationConfig, graphInspector, appOptions);
const target = this.createNestInstance(instance);
return this.createAdapterProxy(target, httpServer);
}
음.. 명확히 이해되진 않더라구요
NestJS 파헤치기 01.NestFactory
찾아보니까 이 분이 설명을 잘 해주셨습니다!! 자세히 알고 싶은 분들은 방문해보세요!! 저도 읽고 도움을 받았습니다. 😀 감사합니다
공식 문서를 계속 따라가보면 Nest application 인스턴스를 만들기 위해 핵심 NestFactory 클래스를 사용하고 인스턴스 생성을 허용하는 몇 가지 정적 메소드를 노출합니다. 바로 create()처럼요. 위의 main.ts
에서 HTTP 리스너를 시작하면 애플리케이션이 인바운드 HTTP 요청을 기다립니다.
HINT
기본적으로 애플리케이션을 생성 중 에러가 발생하면 app은 코드와 함께 종료됨. 해당 에러를 던지고 싶다면 abortOnError 옵션을 사용하지 않도록 설정.NestFactory.create(AppModule, {abortOnError: false})
Nest는 플랫폼에 구애받지 않는 프레임워크가 되는 것을 목표로 합니다. 어댑터가 생성되면 모든 Node HTTP 프레임워크와 작동할 수 있습니다. Nest에는 기본으로 지원하는 두 가지 HTTP 플랫폼이 있습니다. express와 fastify. 필요에 따라 원하는 것을 선택하면 됩니다.
플랫폼 | 설명 |
---|---|
platform-express | 잘 알려진 미니멀리스트? 웹 프레임워크. 실제 사용 조건에서 성공적으로 테스트된 프로덕션 용 라이브러리. |
platform-fastify | 최대 효율성과 속도를 제공하는 데 중점을 둔 고성능 및 overhead?가 낮은 프레임워크. 사용법을 알고 싶으면 클릭 |
미니멀리스트 웹 프레임워크? 오버헤드?
찾아보니 미니멀리스트 웹 프레임워크는 필요하지 않은 요소를 최대한 뺀 웹 프레임워크라는 뜻이고 오버헤드는 특정 작업을 수행하는 데 필요한 과도하거나 간접적인 계산 시간, 메모리, 대역폭, 또는 기타 리소스의 조합이라고 합니다.
어떤 플랫폼을 사용하든 자체 애플리케이션 인터페이스를 제공합니다. (NestExpressApplication, NestFastifyApplication으로 나타냄)
아래와 같이 타입을 NestFactory.create() 메소드에 전달하면 app 객체는 특정 플랫폼에서만 사용할 수 있는 메소드를 갖게 됩니다. 그러나 기본 플랫폼 API에 실제로 엑세스하지 않는 한 유형을 지정할 필요가 없습니다.
const app = await NestFactory.create<NestExpressApplication>(AppModule);
그러니까 굳이 이렇게 타입을 넘기지 않아도 된다는 겁니다!
$ npm run start
이 명령어는 src/main.ts 파일에서 정의된 포트를 수신하는 HTTP 서버와 함께 앱을 실행합니다.
$ npm run start:dev
이 명령어는 파일이 변하면 자동으로 다시 컴파일, 로드합니다.
저는 보통 이걸 씁니다👍
고생하셨습니다!
다음 글에서 만나요~~😀
저도 아직 배우는 단계입니다. 지적 감사히 받겠습니다. 함께 열심히 공부해요!!