게을러지지마 / NestJS로 배우는 백엔드 프로그래밍

책 요약

book : aws algorithm

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

Express와 Fastify는 모두 Node.js를 쉽게 사용하기 위해 만들어진 프레임워크

NestJS는 기본 설치시 Express를 사용

벤치마크 결과 Fastify가 Express보다 2배 빠르지만 Express를 사용하는 이유는 Express가 널리 사용되고 있고 많은 미들웨어가 NestJS와 호환되기 때문

NestJS는 Angular의 영향을 많이 받았다. 모듈/컴포넌트 기반으로 프로그램을 작성하고 재사용성을 높인다..

제어의 역전, 의존성 주입, AOP같은 객체 지향 개념을 도입

언어는 타입스크립트를 기반으로 채택

웹 프레임워크가 갖춰야 할 기능 최신 ECMA스크립트 지원

타입스크립트

CQRS

HTTP 헤더 보안

편리한 설정

인터셉터 : 특정 URI로 요청시 Controller로 가는 요청을 가로채는 역할을 한다.

다양한 미들웨어

스케줄링

로깅

테스팅

문서화

ORM

NestJS는 대부분 내장하고 있다.

Express가 좋을까 NestJS가 좋을까 NestJS는 백엔드 서버가 갖춰야 하는 많은 필수 기능을 프레임워크 내에 내장했고, 필요한 기능을 추가로 설치하고 적용하기 쉽다.

DI, IoC를 채용하여 객체지향 프로그래밍과 모듈화를 쉽게 할 수 있다. (Express를 사용하면 해당 기능들을 검토하고 npm 모듈을 찾아야하는 수고가 있다)

Express로 개발할 경우 속도는 확실히 빠르지만 나중엔 필수로 요구하는 라이브러리들을 계속 추가 하기 때문에 결국 NestJS에서 제공하는 기능을 모두 구현하면 성능상 크게 차이가 없다.

NestJS 프로젝트 생성 npm i -g @nestjs/cli

패키지 매니저는 무난하게 npm을 선택하는 것이 좋다. (yarn도 많으 씀)

*운영이 아닌 개발단계에서는 npm run start:dev 명령어를 이용하는것이 좋다.

(package.json에 기술된 스크립트를 보면 start:dev 키에 해당하는 값은 nest start –watch, –watch옵션은 소스코드 변경을 감지하고 코드를 저장할 때마다 서버를 다시 구동하는 옵션)

프레임워크와 라이브러리의 차이점

클래스와 인터페이스의 집합이라고 할 수 있다.

→ 프레임워크와 라이브러리의 가장큰 차이점은 “제어의 흐름”, IoC개념이 적용되어 있다. IoC기능으로 개발자가 작성하는 코드에서 신경써야할 부분을 줄인다..

반면 라이브러리는 개발자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰게 된다. 개발자가 전적으로 제어흐름이 필요할 때마다 능동적으로 라이브러리를 호출하여 사용한다.

DI, IoC, AOP(제가 주로 스프링 개발을 했었기 때문에 스프링공부할때 나왔던 개념입니다. 스프링 기준으로 설명드립니다..) IoC(Inversion of Control)

AOP(Aspect Oriented Programming)

Spring AOP, Aspect 개념 특징, AOP 용어 정리

DI(Dependency Injection)

비동기, 동기, 논블로킹, 블로킹의 차이 블로킹 : 작업이 완료 될때까지 모든일을 중단하고 대기해야하는 방식

논블로킹 : 작업이 중단되지 않는다. 다른작업이 완료가 될떄까지 기다리지 않고 다른작업을 수행

동기

비동기

예시)

블로킹 & 동기

Sync Blocking 조합은 다른 작업이 진행되는 동안 자신의 작업을 처리하지 않고 (Blocking), 다른 작업의 완료 여부를 바로 받아 순차적으로 처리하는 (Sync) 방식이다. 다른 작업의 결과가 자신의 작업에 영향을 주는 경우에 활용할 수 있다.

  1. 이x정 연구원 : 00선임님 API 만들어주세요.

  2. 00선임 : 네 알겠습니다.

  3. 이x정 연구원 : 00선임이 다 할때까지 아무것도 안하고 기다린다.

  4. 00선임 : x정 연구원님 완료했습니다.

  5. 이x정 연구원 : 고맙습니다. H선임님 번역좀 봐주세요.

  6. H선임 : 네 알겠습니다.

  7. 이x정 연구원 : H선임이 다 할때까지 아무것도 안하고 기다린다.

  8. H선임 : x정 연구원님 완료했습니다.

  9. 이x정 연구원 : 고맙습니다. N선임님 DB점 봐주세요 …….

………

비동기 & 논블로킹

Async Non Blocking 조합은 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고 (Non Blocking), 다른 작업의 결과를 바로 처리하지 않아 작업 순서가 지켜지지 않는 (Async) 방식이다. 다른 작업의 결과가 자신의 작업에 영향을 주지 않은 경우에 활용할 수 있다.

  1. 이x정 연구원 : 00선임님 API 만들어주세요.

  2. 이x정 연구원 : H선임님 TC 만들어주세요.

  3. 이x정 연구원 : N선임님 controlplus 고쳐주세요.

  4. 이x정 연구원 : (나는 DMS FE 수정해야지~)

  5. H선임 : TC 다만들었습니다.

  6. 00선임 : API 만들었습니다.

  7. N선임 : 고쳤어요~

동기 & 논블로킹

Sync Non-Blocking 조합은 다른 작업이 진행되는 동안에도 자신의 작업을 처리하고 (Non Blocking), 다른 작업의 결과를 바로 처리하여 작업을 순차대로 수행 하는 (Sync) 방식이다.

  1. 이x정 연구원 : H선임님 API 고쳐주세요.

  2. H선임 : 네 알겠습니다.

  3. 이x정 연구원 : 다음 업무하려면 API가 고쳐져야 하는데……. H선임님 다했어요?

  4. H선임 : 아직이요 API 고치는 중입니다.

  5. 이x정 연구원 : H 선임님 다 했어요?

  6. H선임 : 아직이요 API 고치는 중입니다.

  7. H선임 : 이수정 연구원님 모두 고쳤습니다.

  8. 이x정 연구원 : 고생했어요. 00선임님 EnergySaving 고쳐주세요

  9. 00선임 : 네 알겠습니다.(energysaving 고치는중…)

  10. 이x정 연구원 : 다음업무를 하려면 energysaving이 고쳐져야하는데…. 00선임님 다했어요??

…………………

비동기 & 블로킹

Async Blocking 조합은 다른 작업이 진행되는 동안 자신의 작업을 멈추고 기다리는 (Blocking), 다른 작업의 결과를 바로 처리하지 않아 순서대로 작업을 수행하지 않는 (Async) 방식이다.

Async-blocking 의 경우는 실무에서 잘 마주하기 쉽지 않아 다룰일이 거의 없다. 그래서 그냥 넘어가도 크게 문제는 없다.