본문 바로가기
programming language/Node.js

NestJS 애플리케이션 만들기_1

by cariño 2023. 6. 26.
728x90
반응형

[생성하려는 애플리케이션]

NestJS에서 사용할 것들 (앱 구조)

 

각 모듈을 구성하는

Controller

Service

Respository

 

 

AppModule(root)

 

BoardModule:  게시글에 관한 모듈

  • BoardController
  • BoardEntity
  • BoardService
  • BoardRepository
  • ValidationPipe

 

AuthModule:  게시글을 만드는 사람에 대한 인증 모듈

  • AuthController
  • UserEntity
  • AuthService
  • UserRepository
  • JWT, Passport

 

 

 


provider란?
프로바이더는 Nest의 기본 개념이다.  대부분의 기본 Nest클래스는 서비스, 리포지토리, 팩토리, 헬퍼 등이 프로바이더로 취급된다. 객체는 서로 다양한 관계를 만들 수 있으며 객체의 인스턴스를 연결하는 기능은 대부분 Nest 런타임 시스템에 위임될 수 있다. 컨트롤러에서 필요한 기능별 서비스나 리포지토리, 헬퍼 등을 넣어서 사용하는 것, 종속성을 주입할 수 있다는 점이 Provider의 주요 아이디어이다. 


service란?
@injectable 데코레이터로 감싸져서 모듈에 제공된다. 이 서비스 인스턴스는 애플리케이션 전체에서 사용될 수 있다.
서비스는 컨트롤러에서 데이터 유효성을 체크하거나 데이터베이스에 아이템을 생성하는 등의 작업 처리를 하는 부분이다.

 

dependency injection : service를 Controller에서 이용할 수 있는 방법

컨트롤러에 서비스마다 종속성을 주입해주어야 한다.
service에 정의해놓은 메소드를 controller에서 가져와서 쓰는 걸 볼 수 있다.

provider 등록하기
서비스, 레포지토리 등을 사용하기 위해서는 provider를 생성해야 하는데 nest에 등록해줘야 사용이 가능하다.
등록하기 위해서는 module 파일 > providers 항목 안의 해당 모듈에서 사용하고자 하는 provider를 넣어줘야 한다.

Service안에는 database관련 로직을 처리하도록 하자.
데이터베이스에서 데이터를 가져오거나 db안 게시판 생성할 때 생성한 게시판 정보를 넣어주는 등의 로직을 처리할것임
서비스에서 처리된 리턴 값은 Controller에서 받고 response를 client에 주면된다. 

 

 

*  Board Service를 Board Controller에서 이용할 수 있도록 종속성 주입하기

Nest JS에서 Dependency Injection은 클래스의 Constructor안에서 이루어 진다. 

 

타입스크립트는 접근제한자(private, public, protected)를 사용할 수 있다.

생성자안에서 사용해준다면 인수인 파라미터가 암묵적으로  프로퍼티로 선언이 되어 진다.

 

[기존 코드]

 

1. boardService 파라미터에 BoardsService 객체를 타입으로 지정해준다. 

2. boardsService 파라미터를 BoardsCotroller 클래스 안에서 사용하기 위해 this.boardsService 프로퍼티에 boardsService 파라미터를 할당해준다.

3. 타입스크립트는 선언한 값만 객체의 프로퍼티로 사용가능하기 때문에 boardsService: BoardsService로 선언해준다. 

4. boardsService프로퍼티를 이용해서 BoardsController를 클래스안에서 사용할 수 있게 된다. 

 

 

[변경 후]

생성자안에서 접근제한자를 사용하기

접근제한자를 생성자 파라미터에 선언하면 접근 제한자가 사용된 생성자 파라미터는 암묵적으로 클래스 프로퍼티로 선언된다.  private를 넣어서 프로퍼티 자체를 클래스 안에서만 사용할 수 있게 된다. 

728x90

'programming language > Node.js' 카테고리의 다른 글

NestJS  (0) 2023.06.25
AWS_S3 client 배포하기  (1) 2022.12.01
React 로그인 API _ 2 (서버만)  (0) 2022.11.06
express 사용해 보자!  (0) 2022.10.24
Webpack  (0) 2022.09.20

댓글