1장 - Hello NestJS

2023. 4. 3. 14:08개발 관련 책 읽기/NestJS로 배우는 백엔드 프로그래밍

✅ 아래 내용들에 대해서 알아보자

- NestJS
- Node.JS
- 패키지 의존성 관리

 

 

NestJS

NestJS는 Node.js에 기반을 둔 웹 API 프레임워크로서 Express 또는 Fastify 프레임워크를 래핑 하여 동작한다.

  • Express 또는 Fastify는 모두 Node.js를 쉽게 사용하기 위해 만들어진 프레임워크이다.
  • NestJS는 기본 설치 시 Express를 사용하는데 속도면에서 Fastify가 Express보다 2배 더 빠르다. 하지만 Express를 사용하는 이유는 Express가 널리 사용되고 있고 수많은 미들웨어가 NesgJS와 호환되기 때문이다.
  • NestJS는 DB, ORM, 설정, 유효성 검사 등 Node.js에 비해 많은 기본 기능을 제공하고 필요한 라이브러리를 쉽게 설치할 수 있다.
  • NestJS는 Angular로부터 많은 영향을 받아왔다. 모듈 컴포넌트 기반으로 IOC/DI/AOP 같은 개념을 도입하였다.

 

 

Node.JS

Node.js는 단일 스레드에서 작동하는 논블로킹 I/O 이벤트 기반 비동기 방식으로 작동한다. 즉 하나의 스레드에서 작업을 처리하게 된다.

-> application 단에서는 단일 스레드이지만 백그라운드에서는 스레드 풀을 구성해 작업을 처리한다.

 

개발자 대신 플랫폼(Node.js에 포함된 비동기 I/O 라이브러리 libuv)이 스레드 풀을 관리하기 때문에 개발자는 단인 스레드에서 동작하는 것처럼 이해하기 쉬운 코드를 작성할 수 있다. -> 웹 서버를 운용할 때는 CPU 코어를 분산해서 관리하므로 실제 작업은 여러 개의 코어에서 별개로 처리된다.

 

Node.js는 하나의 스레드에서 순서대로 처리하지 않고 먼저 처리된 결과를 이벤트로 반환해 주는 방식으로 작동한다. 이러한 방식을 논블로킹 이벤트 기반 비동기 방식이라고 한다. -> 이로 인해 개발자는 멀티 스레딩을 직접 관리하지 않아도 된다는 장점이 있다.

 

 

패키지 의존성 관리

package.json

  • 애플리케이션이 필요로 하는 패키지 목록 나열
  • 각 패키지는 유의적 버전(semantic versioning, 시맨틱 버저닝 규칙)으로 필요한 버전 기술 [Major]. [Minor]. [Patch]-[label] 방식으로 기술한다. ex) 1.2.3-beta
  • 다른 개발자와 같은 빌드 환경을 구성할 수 있어 버전이 달라 발생하는 문제를 예방할 수 있다.
  • npm install 명령 수행 시 node_modulesdhk package-lock.json 파일이 생성된다.
  • node_modules은 프로젝트가 필요로 하는 패키지들이 실제 설치되는 장소

 

package.json 파일 내부

"name": "book-nestjs-backend",
"private": true,
"version": "2.0.0",
"description": "Examples for book-nestjs-backend",
"license": "MIT",
"scripts": {
  "prebuild": "rimraf dist",
  "build": "nest build",
  "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
  "start": "nest start",
  "start:dev": "nest start --watch",
  "start:debug": "nest start --debug --watch",
  "start:prod": "node dist/main",
  "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
  "test": "jest",
  "test:watch": "jest --watch",
  "test:cov": "jest --coverage",
  "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
  "test:e2e": "jest --config ./test/jest-e2e.json"
},

 

 

 

 

 

반응형