Provider
대부분의 기본 nest 클래스는 서비스, 레포지토리, 팩토리, 헬퍼 등 프로바이더로 취급 가능하다.
즉, 객체는 서로 다양한 관계를 만들 수 있으며 객체의 인스턴스를 '연결'하는 기능은 대부분 Nest 런타임 시스템에 위임 가능하다.
Provider 등록은 모듈 파일에서 가능하다. ~ 종속성 주입 : 각각의 서비스를 컨트롤러에 주입
모듈 생성 CLI
nest g module '모듈명'
컨트롤러에 서비스 인젝션 시 Ts에서 제공하는 접근 제한자(publice, protected, private)를 생성자 파라미터에 선언할 경우, 접근 제한자가 사용된 파라미터는 암묵적으로 클래스 프로퍼티로 선언된다.
컨트롤러 생성 CLI
nest g controller '컨트롤러명'
서비스 생성 CLI
nest g service '서비스명'
Model
Class를 이용하거나 Interface를 이용한다.
DTO(Data Transfer Object)
DTO를 쓰는 이유
1) 데이터 유효성을 체크하는데 효율적
2) 유지보수과정에서 다수의 프로퍼티를 관리 가능
3) 타입스크립트의 타입으로도 사용 가능
파이프는 @Injectable() 데코레이터로 주석이 달린 클래스이다.
Data Transformation
입력 데이터를 원하는 형식으로 변환
Ex) 만약 숫자를 받길 원할 시 데이터가 문자열 형식으로 온다면 파이프에서 자동으로 숫자로 변환
Data Validation
입력 데이터를 평가 후 전달 or 에러 처리
1) Handler-level Pipes
라우터 핸들러 레벨에 직접 @UsePipes() 데코레이터를 이용하여 모든 파라미터에 적용
2) Parameter-level Pipes
특정한 파라미터에 적용되는 파이프
3) Global-level Pipes
애플리케이션 레벨의 파이프로 클라이언트에서 들어오는 모든 요청에 적용
*DTO에 정의한 validation 적용 시 nestjs built-in된 ValidationPipe사용
tranfrom() 메소드에서 return 된 값은 route 핸들러로 전해지고 예외 발생 시 클라이언트에 에러 전달