kakasoo

Nestjs 시작하는 법 본문

프로그래밍/JavaScript

Nestjs 시작하는 법

카카수(kakasoo) 2021. 3. 16. 23:43
반응형

소개

NestJS는 Express ( 또는 fastify ) 위에 추상화된 프레임워크로,

기존의 라이브러리와 호환되면서도 이전의 프레임워크보다 더 빠른 성능을 보여준다.

NestJS의 특징에 대해서는, JavaScript 개발자마다 호불호가 갈릴 수 있는 부분이지만,

ES6보다도 더 진보적인 JavaScript를 사용한다.

예컨대 NestJS에서 핵심이 되는 데코레이터 패턴은 ES7이며,

현재로서는 TypeScript의 도움 없이는 사용할 수가 없고, 객체지향이라는 점 역시도 쟁점이 될 수 있겠다.

그러나 JavaScript라는 언어에 어울리는가에 대한 문제를 차치하면,

NestJS가 성능이나 확장성 등, 철학으로 내세운 부분에 있어서는 확실히 기존 프레임워크보다 낫다.


내가 기존의 API를 NestJS로 바꿔 테스트해봤을 때, API가 훨씬 더 빨랐던 것을 확인할 수 있었다.

 

아니, 성능도 괜찮고 확장성도 용이한데 왜 주변에 쓰는 사람을 못 본 거지? 내가 보기엔 매력적인데?

 

Java에는 Spring이라는 진영이 있지만, JavaScript에는 Express가 그 대응이라고 하기엔 어딘가 엉성한 부분이 있는 것 같다. JavaScript의 자유로움이 매력이겠지만, 매력도 과하면 문제가 되는 법이다. JavaScript는 너무 자유로운 나머지 독창적인 코드가 이곳저곳에 널려 있다. 그래서 무언가를 배울 때에 재미와 더불어 당혹감(?)도 있었다.

 

Express는 특유의 자유도 때문에 사람들마다 작성하는 코드가 상이하다. 따라서 Best Practice라는 당연한 검색어에도 서로 다른 결론을 내세우는 글들이 나오곤 한다. 여기서는 Best 라고 말한 구조가 다른 쪽에서는 안티 패턴이라고 소개되고 있었다. 물론 그렇다고 NestJS를 배우는 게 쉬울 것 같지는 않다.

 

안타깝게도 아직은 다 영어라서, 접근성이 낮은 것도 있다. 하지만 이미 Express에서 사용하는 라이브러리들이 NestJS에서도 사용이 가능한 점과, 결국에 진보적이라는 말의 뜻이 나중에 다가올 것이라는 점을 볼 때, 배워서 나쁠 프레임워크는 아닌 거 같다. 잡설이 길었으니 한 번 설치부터 프로젝트 실행을 해보자.

설치

$ npm i -g @nestjs/cli
$ nest new project-name

 

이 부분은 express-generator를 사용한 것과 크게 다를 바 없다.

전역에 nestJS의 cli를 설치하고, nest를 입력하면 다양한 명령어들이 나온다.
당장은 새로운 프로젝트를 시작할 수 있도록 위처럼 작성하면 된다.

설치를 하고 나면 여러 설정 파일들이 생성될 것이고, src에는 아래처럼 핵심적인 파일이 생성된다.

 

src
 - app.controller.ts      // Express에서의 Router
 - app.controller.spec.ts // unit test를 위한 controller
 - app.module.ts          // application의 module로, 여기서는 Root module이다.
 - app.service.ts         // service 로직이 들어간다.
 - main.ts                // Nest application의 진입점이다.

 

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

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

Express로 치면 bin 폴더의 www에 해당하는 부분인데, AppModule의 instance를 생성하는 NestFactory가 있다.
필요에 따라서는 NestFactory.create() 라는 함수에 대해 타입을 지정할 수 있다.

위에서 언급했다시피 NestJS는 Express나 fastify 위에서 동작할 수 있는데,

Type으로 <NestExpressApplication> 또는 <NestFastifyApplication> 으로 작성하면 된다.

 

const app = await NestFactory.create<NestExpressApplication>(AppModule);

 

평범하게 npm run start 명령어로 실행시켜보자.


 

210316

NestJS 공식문서를 차례대로 따라가면서 공부해보고자 한다. 위의 내용은 공식문서에 가면 다 있는 내용이다.

반응형