[TIL] NestJS

한재창·2023년 5월 8일
0

NestJS

  • 자바스크립트나 타입스크립트로 서버 애플리케이션을 개발할 수 있는 백엔드 웹 프레임워크
  • 객체 지향 프로그래밍, 의존성 주입, 과점 지향 프로그래밍과 같은 백엔드 개발 트렌드를 반영하고 있어 고품질의 코드를 작성하는데에 도움을 준다.

설치

  • 터미널에서 npm i -g @nestjs.cli 입력
  • 맥북 sudo npm i -g @nestjs.cli 입력
  • 설치 확인을 위해 nest 입력하면 아래와 같은 설명서를 볼 수 있다.

프로젝트 만들기

  • 터미널에서 nest new 입력 후 엔터
  • 프로젝트 명 입력 후 엔터
  • npm, yarn, pnpm 중에 선택해서 엔터

실행

  • 프로젝트 터미널에서 npm run start:dev 를 입력하면 실행된다.
  • 브라우저에서 http://localhost:3000 을 입력하면 아래와 같은 화면을 볼 수 있다.

main.ts

  • 자동으로 생성된 파일 중에서 제일 가장 중요한 것은 main.ts 파일이다.
  • nestJS는 무조건 main.ts 파일을 가지고 있고, 파일명은 항상 main.ts 여야한다.
  • NestJS 애플리케이션이 시작되는 진입 지점이다.
  • 코드의 마지막 줄에는 bootstrap() 함수를 호출하고 있고, bootstrap() 함수 안에서는 app.module 파일로부터 AppModule를 불러와서 NestFactory가 애플리케이션 객체를 생성하고 3000 포트로 HTTP 요청을 받고 있다.
  • 이것이 아까 전에 위에서 http://localhost:3000 접속이 가능했던 이유이다.

모듈(Modules)

  • 하나의 NestJS 애플리케이션은 보통 여러 개의 모듈로 이루어지는데 기능 단위로 애플리케이션을 쪼개 놓은 단위
  • 모듈은 @Module() 데코레이터에 인자로 넘기는 객체의 imports 속성을 통해서 의존 관계를 명시해 서로 의존할 수 있다.
  • AppModule class를 갖고 있다.
    • @Module() 데코레이터 ( NestJS에서 데코레이터는 일반적으로 클래스나 메서드에 어떤 정보를 추가해줄 때 많이 활용하고 있다. ) 가 호출되고 있다.
    • imports controllers providers 속성으로 이루어진 객체를 인자로 받는다.
    • controllers 속성에는 HTTP 요청을 받아서 응답을 보내는 컨트롤러 클래스를 나열해 줄 수 있다.
    • providers 속성에는 컨트롤러가 사용하는 다양한 일반 클래스를 나열해 줄 수 있다.
    • imports 속성에는 해당 모듈이 의존하고 있는 다른 모듈을 나열해 줄 수 있다.

컨트롤러(Controller)

  • HTTP 요청을 받아서 처리하고 응답을 해주는 역할을 하는 클래스이다.
  • 클래스 위에 @Controller() 데코레이터를 호출해주면 NestJS가 해당 클래스는 컨트롤러로 인식을 하게 된다.
  • 클래스 내의 각 메서드는 @Get() @Post() @Delete() 와 같은 HTTP 방식(method)에 해당하는 데코레이터를 붙여주게 된다.
  • 이러한 데코레이터들은 URL 경로를 나타내는 문자열을 인자로 받는데 NestJS는 데코레이터로 명시된 HTTP 방식과 URL 경로를 기준으로 부합하는 클래스의 메서드를 호출해준다.
  • 이를 통해 위에서 http://localhost:3000 으로 들어갔을 때, AppController 클래스의 getHello() 함수가 이를 받아서 Hello World! 라는 응답을 해줬다는 것을 알 수 있다.

서비스

  • 비지니스 로직을 수행하는 역할을 담당한다.
  • @Injectable() 데코레이터가 사용되고 있으며 @Injectable() 데코레이터가 붙어있는 클래스는 NestJS가 인스턴스를 생성하여 다른 클래스에 생성자를 통해서 주입해줄 수 있다.
  • AppModule에서 @Module() 데코레이터를 호출할 때 providers
    속성에 AppService 클래스를 명시해줘서 AppController 클래스의 생성자인 인자로 AppService 클래스의 인스턴스가 주입이 되고, AppController 클래스의 getHello 메서드 내에서 AppService 클래스의 getHello 메서드를 호출할 수 있었던 것이다.
  • 이렇게 컨트롤러의 역할과 서비스 역할을 분리함으로써 유지보수가 용이한 애플리케이션을 개발할 수 있다.
profile
취준 개발자

0개의 댓글