[생성하려는 애플리케이션]
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를 넣어서 프로퍼티 자체를 클래스 안에서만 사용할 수 있게 된다.
'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 |
댓글