📌 해당 글은 따라하면서 배우는 NestJS를 참조해 작성되었습니다.
📌 Nest JS란?
Nest는
Node.js
서버 측 어플리케이션을 구축하기 위한 프레임워크이며,JavaScript
를 사용하고TypeScript
로 빌드되며 객체지향, 함수형, 함수형 반응형 프로그래밍적 요소를 사용할 수 있게 해준다.
위 환경은
NodeJS
와npm
이 깔려있다는 전제로 한다.
npm i =g @nestjs/cli
nest new 프로젝트 이름
후 NestJS가 잘 설치되었는지 보려면
nest --version
예를 들어 게시글을 만든다고 가정했을 때, 우리는 게시글에 관한 모듈과 그 게시글을 만드는 사람에 대한 인증 모듈이 필요하다.
또한, 각 모듈을 구성하는Controller
,Entity
,Service
,Repository
등이 있다.
▪ eslintrc.js
▪ prettierrc
▪ nest-cli.json
▪ tsconfig.json
▪ tsconfig.build.json
▪ package.json
▪ src폴더
app.module.ts -> board.controller.ts -> board.service.ts
모듈은
@Module {}
데코레이터로 주석이 달린 클래스로, 어플리케이션 구조를 구성하는데 사용하는 메타 데이터를 제공한다.
각 응용 프로그램에는 하나 이상의 모듈이 존재하며, 루트 모듈은 Nest가 사용하는 시작점이 된다.
모듈은 관련된 기능 집합으로 구성 요소를 구성하는 효과적인 방법이다. 즉, 기능별로 만들어진다.
ex)유저모듈, 주문모듈 ...
같은 기능에 해당하는 것들은 하나의 모듈 폴더 안에 넣어서 사용한다.
또한, 하나의 공통된 모듈을 생성해 여러 모듈에 공유하며 사용할 수도 있다.
nest g module 모듈 이름
대부분의 nest 파일들은 명령어로 생성한다.
컨트롤러는 들어오는 요청을 처리하고 클라이언트 응답을 반환한다.
컨트롤러는 @Controller
데코레이터로 클래스를 데코레이션하여 정의된다.
핸들러는
@Get
,@Post
,@Delete
와 같은 데코레이터로 장식된 컨트롤러 클래스 내의 단순한 메소드이다.
nest g controller 컨트롤러 이름 --no-spec
--no-spec
: 테스트를 위한 소스 코드 생성을 방지한다.
컨트롤러가 만들어지는 Logic:
해당 폴더에 Controller 생성 -> 폴더 내 Module 탐색 -> Module 파일 내에 Controller 명시
Provider는 Nest의 기본개념이다. Controller가 필요로 하는 컴포넌트들이 기능 단위로 존재하고, Controller가 해당 컴포넌트를 필요로 할 때 그 컴포넌트를 Controller로 종속시켜주는 것을 주입이라고 하는데, 여기서 각 요소가 Provider가 된다. 우리는 Service를 Controller에 주입시키기 때문에, Service는 큰 의미로 Provider이다.
Service는 sw 개발 내 공통개념이다, 즉 Nest에서만 사용되는 개념이 아니다. 데이터의 유효성을 검사하거나 DB 아이템을 생성하는 등의 작업을 처리한다. @Injectable 데코레이터로 감싸져서 모듈에 제공되며, 이 서비스 인스턴스는 어플리케이션 전체에 사용될 수 있다.
nest g service 서비스 이름 --no-spec
또한 이렇게 만들어진 Service를 Controller에 사용할 수 있게 Dependency Injection, 즉 종속성 주입을 해주어야 한다. 이는 Controller 클래스의 Constructor
안에서 이루어 진다.
접근 제한자(public, protected, private)를 생성자(constructor) 파라미터 안에 선언하면 접근 제한자가 사용된 생성자 파라미터는 암묵적으로 클래스 프로퍼티로 선언된다.
또한, Private가 선언되었기 때문에 위 사진에서 userServvice 프로퍼티는 UserController 클래스 내부에서만 사용 가능하다.