nest.js 소개 및 macOS 환경설정

Featured image

nest.js 소개

nest.js의 공식 사이트 소개는 이렇게 되어있다.

1. 효율적이고 스케일링이 쉬운 node 서버를 만드는데 사용하는 프레임워크이다 2. 차세대 자바스크립트를 사용하며 타입스크립트로 만들어졌으며 타입스크립트를 완전히 지원 3. express와 같은 견고한 http 서버 프레임워크를 사용하며 fastify도 사용할 수 있다

보통 express와 nest를 비교하는데 nest는 기본적으로 express로 설계되어있다. express를 어떻게 하면 효율적으로 사용할 수 있을까하고 고민해서 만들어진것이다.

4. 상당히 많은 라이브러리, 헬퍼 툴들이 있음에도 불구하고 아키텍쳐 설계에 대한 문제를 해결해주는 해결책은 존재하지 않는다 이러한 아키텍쳐적인 문제를 해결하기 위해서 나온게 nest.js. nest는 자체적으로 서버 아키텍쳐를 제공해줘 테스트가 쉽고 디커플링이 잘되어 있고(결합도가 낮다) 유지보수가 편한 서버를 제작하게 해준다.

nest.js의 특징

엔터프라이즈급 애플리케이션 구축에 적합하다. 모듈식 아키텍처로 유연한 구조 타입스크립트 기반, 객체지향 프로그램 및 함수형 프로그래밍의 개념을 살용해 확장성이 높은 애플리케이션을 빠르게 개발할 수 있게 지원한다.

nest.js와 node.js의 차이

  1. 아키텍쳐 기존의 node.js 서버는 다양한 형태를 볼 수 있다. 이 부분은 모두 다르기 때문에 학습하는 개발자는 어떤게 좋은 구조인지 판단하기 어렵다. nest는 모듈형 아키텍쳐를 사용하며 객체지향 프로그래밍, 함수형 프로그래밍 같은 고급 디자인 패턴을 통합헤 구축한다.

  2. 타입스크립트 지원 nest.js는 기본적으로 타입스크립트를 지원한다. 타입스크립트를 사용하면 코드 자동완성 및 리팩토링과 같은 강력한 기능을 활용할 수 있다. 타입스크립트를 사용하기 위해서는 별도의 설정이 필요한 노드와 달리 기본적으로 타입스크립트로 만들어졌다.

  3. 의존성 주입 의존성 주입 패턴을 적극적으로 사용해 모듈간의 결합도를 낮춤 -> 코드의 유연성과 용이성이 향상된다.

  4. 데코레이터 사용 nest는 데코레이터를 사용해 메타데이터를 추가하거나 기능을 확장할 수 있다.

MacOS환경설정

  1. node.js install 검색해 들어가 node.js 설치해주기.
  2. 터미널에 들어가 node버전 제대로 나오는지 확인하고 sudo corepack enable. 이렇게 하면 yarn이 설치가 된다.
  3. nest.js 프로젝트를 실제로 관리할 수 있는 cli툴 설치(sudo npm i-g @nestjs@cli).

nest 폴더 살펴보기

nest.js는 크게 모듈, 컨트롤러, 서비스로 나뉜다. 기존의 3layered모델과 같지만 다른점이 컨트롤러와 모듈에 등록되어야 가능하다.

  1. src 폴더는 기존의 node 프로젝트처럼 실제 코드 작성하는 폴더
  2. test 폴더는 테스트폴더 작성하는 폴더
  3. 컨트롤러는 http요청을 처리하기 위해 사용하고 url앤드포인트와 요청 메서드를 정의한다
  4. 서비스는 컨트롤러에서 사용할 비즈니스 로직 구현함, 서비스와 컨트롤러는 같은 클래스로 Injectable()데코레이터 사용해 주입한다
  5. 모듈을 사용해 어플리케이션을 구성 -> 모든 컨트롤러, 서비스, 프로바이더, 미들웨어등을 모듈에 등록
  6. main.ts는 nestjs의 부트스트랩 파일로써 nestjs의 애플리케이션을 실행하는 역할을 수행

프로바이더란

프로바이더란 nest.js의 기본단위로 서비스, 레포지토리, 팩토리, 헬퍼등이 프로바이더로 취급될 수 있다. 이 프로바이더를 사용해 의존성 주입을 관리한다. 개체는 다양한 관계를 만들 수 있고 개체 인스턴스를 연결하는 기능을 nest런타임의 시스템에 위임이 가능하다. 프로바이더는 컨트롤러나 서비스에서 사용하는 객체 함수를 제공한다.