eslintrc.js
prettierrc
nest-cli.json
tsconfig.json
- 어떻게 타입스크립트를 컴파일 할지 설정
tsconfig.build.json
package.json
src
App Module안에 BoardModule과 AuthModule이 있으면 각 모듈안에 Controller Entity Service등이 있다. 우선 모듈(Module)이 무엇인지 알아보자.
모듈은 @Module () 데코레이터로 주석이 달린 클래스이다. @Module () 데코레이터는 Nest가 어플리케이션 구조를 구성하는데 사용하는 메타 데이터를 제공한다.
각 응용 프로그램에는 하나 이상의 루트 모듈이 있다. 루트 모듈은 Nest가 사용하는 시작점이다.
모듈은 밀접하게 관련된 기능 집합으로 구성 요소를 구성하는 효과적인 방법이다.
ex) 유저 모듈, 주문 모듈, 챗 모듈...
같은 기능에 해당하는 것들은 하나의 모듈 폴더안에 넣어서 사용한다. (UserController, UserService, UserEntity 다 같은 기능이기에 UserModule안에 넣는다.)
모듈은 기본적으로 싱글 톤이므로 여러 모듈간에 쉽게 공급자의 동일한 인스턴스를 공유 할 수 있습니다.
CRUD 기능을 만들기 위해서는 아래와 같은 두개의 모듈이 필요하다.
module 생성 명령어
nest g module boards
이렇게 생성한 boards 모듈을 사용하기 위해서는 루트 모듈에 등록해 주어야한다.
npm run start:dev로 잘 실행되는지 확인
컨트롤러는 클라이언트에서 들어오는 요청을 처리하고 클라이언트에 응답을 반환한다.
컨트롤러는 @Controller 데코레이터로 클래스를 데코레이션하여 정의된다.
핸들러는 @Get, @Post, @Delete 등과 같은 데코레이터로 장식 된 컨트롤러 클래스 내의 단순한 메서드이다. 원하는 동작을 처리 해주는 핸들러
nest g controller boards --no-spec
cli는 먼저 boards 폴더를 찾는다. boards 폴더 안에 controller 파일을 생성한다. boards 폴더안에 module 폴더를 찾고, module 파일안에 controller를 넣어준다.
Provider 에는 서비스, 팩토리 등이 포함된다.
Provider 의 가장 메인 아이디어는 의존성으로서 주입될 수 있다는 데에 있다.
의존성 주입을 통해 서로 다른 객체들이 다양한 관계를 맺을 수 있다. 물론 모듈에 필요한 Provider 들을 정의하고, 실제 시스템에 반영되는 내부적인 작업은 Nest 런타임 시스템이 위임하여 처리한다고 한다.
Provider 는 주로 Controller 를 통해 전달받은 요청에 대하여 복잡한 기능을 수행하는 비즈니스 로직이 담긴다.
@Injectable 데코레이터로 감싸져서 모듈에 제공되며, 이 서비스 인스턴스는 애플리
케이션 전체에서 사용 될 수 있다.
서비스는 컨트롤러에서 데이터의 유효성 체크를 하거나 데이터베이스에 아이템을 생하는 등의 작업을 처리하는 부분이다.
Service 안에서는 데이터베이스 관련된 로직을 처리한다. 데이터베이스에서 데이터를 가져오거나 데이터베이스안에 게시판 생성할때 그 생성한 게시판 정보를 넣어 주는 등의 로직을 처리한다.
nest g service boards --no-spec
CLI를 이용해서 Service를 생성하면 이렇게 boards.service.ts 파일이 생성된다.
이 생성된 파일 안에는 Injectable 데코레이터가 있으며 이 NestJS는 이것을 이용해서
다른 컴포넌트에서 이 서비스를 사용 할 수있게(Injectable)만들어준다.
그리고 CLI로 Service 생성시에는 module에도 자동으로 Service가 추가된다.