nest.js 와 node.js

wisdom·2022년 7월 1일
0
  • Node.js에 기반을 둔 웹 API 프레임워크
  • 객체지향 개념 도입
    • IoC(Inversion of Control, 제어역전)
    • DI(Dependency Injection, 의존성 주입)
    • AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)
  • 타입스크립트를 기본으로 채택

왜 쓸까?

  • Node.js의 단점 극복
    • Node.js는 손쉽게 사용할 수 있고 뛰어난 확장성을 가지고 있지만, 과도한 유연함으로 인해 SW의 품질이 일정하지 않고 알맞은 라이브러리를 찾기 위해 사용자가 많은 시간을 할애해야한다는 단점이 있다.

NestJS 장점

  • 데이터베이스, ORM, 설정(Configuration), 유효성 검사 등 수많은 기능을 기본 제공
  • 필요한 라이브러리를 쉽게 설치하여 기능을 확장할 수 있는 Node.js 장점은 그대로 가지고 있다.
  • 모듈/컴포넌트 기반으로 프로그램을 작성함으로써 재사용성을 높여준다.

Node.js

  • Next는 Node.js 기반으로 동작하기 때문에 node의 동작원리를 이해할 필요가 있다.
    • 정확히는 Nest로 작성한 소스코드를 Node.js 기반 프레임워크인 Express나 Fastify에서 실행 가능한 자바스크립트 소스코드로 컴파일해 주는 역할을 한다.

Node.js의 특징

단일 쓰레드에서 구동되는 non-blocking I/O 이벤트 기반 비동기 방식

  • 먼저 멀티 스레드란?
    • 작업 요청이 한꺼번에 들어올 때 각 작업을 처리하기 위한 쓰레드를 만들고 할당하는 방식
    • 여러 작업을 동시에 처리하므로 작업 처리속도가 빠른 장점이 있다.
    • 하지만 공유 자원을 관리하는 노력이 많이 들고 잘못 작성된 동기화로 인해 락에서 빠져나오지 못하는 경우가 발생하기 쉽다.
    • 쓰레드가 늘어날 때 마다 메모리를 소모하게 되므로 메모리 관리 역시 중요하다.
  • Node.js는 하나의 쓰레드에서 작업을 처리한다.
    • 애플리케이션 단에서는 단일 쓰레드이지만 백그라운드에서는 쓰레드 풀을 구성해 작업을 처리한다.
    • 개발자가 직접 쓰레드 풀을 관리하지 않고, Node.js에 포함된 libuv(Node.js에서 사용하는 비동기 I/O 라이브러리)가 그 역할을 하기 때문에 개발자는 단일 쓰레드에서 동작하는 것처럼 이해하기 쉬운 코드를 작성할 수 있다.
    • 웹 서버를 운용할 때는 코어(CPU)를 분산해서 관리하므로 실제 작업은 여러개의 코어에서 별개로 처리된다.
    • Node.js는 하나의 쓰레드지만, 라이브러리의 도움으로 앞의 작업이 끝날때까지 기다리지 않고(non-blocking) 비동기로 처리한다.
profile
문제를 정의하고, 문제를 해결하는

0개의 댓글