미들웨어(Middleware)
·
NestJS/NestJS 문서화
미들웨어미들웨어는 클라이언트의 요청 데이터가 가장 먼저 처리되는 곳입니다. 필터, 파이프, 가드, 인터셉터 모두 미들웨어입니다.필터, 파이프, 가드, 인터셉터로 구현한 미들웨어가 아닌 NestMiddleware를 직접 구현한 미들웨어는 사용하지 않는 것을 권장합니다.미들웨어의 기능요청 및 응답 객체를 변경합니다.요청-응답 주기를 종료합니다.미들웨어 작성 시 주의점next() 함수를 실행하지 않으면 클라이언트에 응답이 전달되지 않고 요청이 중단됩니다.
인터셉터(Interceptor)
·
NestJS/NestJS 문서화
인터셉터의 역할인터셉터는 라우팅 실행 전과 실행 후 모두에 작업을 추가할 수 있습니다.인터셉터가 할 수 있는 일들메서드 실행 전후에 작업을 추가할 수 있습니다.함수에서 반환된 결과를 변환할 수 있습니다.함수에서 발생한 예외를 변환할 수 있습니다.조건에 따라 함수를 재정의 할 수 있습니다.인터셉터 구현인터셉터는 NestInterceptor 인터페이스를 구현해야 합니다.NestInterceptor 구현 시 intercept(context: ExcutionCentext, next: CallHandler) 메서드를 구현해야 합니다.매개변수 context는 요청 정보를 담고 있습니다.매개변수 next는 라우터가 실행할 함수입니다.import { CallHandler, ExecutionContext, NestInt..
가드(Guard)
·
NestJS/NestJS 문서화
가드의 역할가드는 클라이언트의 요청이 라우팅을 활성화 할 수 있는지 여부를 결정합니다.보통 인증 정보 혹은 권한 정보 여부에 따라 활성화 여부가 달라집니다.
Compodoc
·
NestJS/NestJS 레시피
Compodoc은 Angular 앱 문서화 도구입니다. NestJS에서도 Compodoc이 작동합니다.Compodoc은 API가 아니라 설치 및 실행 방법, 의존성, 코드의 구조 등을 문서화합니다.환경 설정패키지 추가npm i -D @compodoc/compodocpackage.json 파일 수정scripts 객체에 아래 코드를 추가합니다.-p: ts 설정 파일 경로 지정-s: 생성된 문서를 서버에서 제공(지정 안 하면 개별 HTML 파일에서 확인해야 합니다.)--port: 포트 지정. 기본값 8080--watch: 파일 수정 시 자동 재실행-d: 문서 작성 폴더 지정"doc": "npx @compodoc/compodoc -p tsconfig.json -s --port 8080 --watch -d ./d..
Swagger
·
NestJS/NestJS 레시피
SwaggerSwagger는 REST API를 문서화해주는 라이브러리입니다.Swagger 환경 설정패키지 추가npm install @nestjs/swaggermain.ts 파일 수정import { NestFactory } from '@nestjs/core';import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';import { AppModule } from './app.module';async function bootstrap() { const app = await NestFactory.create(AppModule); // Swagger에 제공할 정보 작성 const swaggerInfo = new DocumentBuilder() ..
파이프(Pipe)
·
NestJS/NestJS 문서화
파이프의 역할과 특징파이프는 클라이언트에서 전달된 요청 데이터를 검증 혹은 변환하는 역할을 합니다.파이프의 특징라우팅 핸들러(컨트롤러)가 호출되기 전에 작동합니다.파이프 내부에서 예외 처리를 할 수 있습니다.비동기식일 수 있습니다.@Injectoble() 데코레이터가 있는 클래스입니다.파이프는 보통 직접 만들지 않고, NestJS 기본 제공 파이프 혹은 class-transformer, class-validator 패키지를 사용합니다.class-transformer, class-validator를 사용한 데이터 검증 및 변환class-transformer, class-validator를 사용해 데이터 검증 및 변환을 하기 위해서는 다음 과정을 거쳐야 합니다.main.ts 파일에 전역으로 파이프를 사용하도..
모델과 DTO
·
NestJS/NestJS 문서화
모델과 DTO모델과 DTO 모두 NestJS의 필수 요소가 아닙니다.필수 요소는 아니지만 개발 편의성을 높여주기 때문에 사용합니다.NestJS에서만 사용하는 개념이 아니고, 소프트웨어 공학에서 사용되는 개념입니다.모델모델은 ORM의 종류에 따라 엔티티(Entity), 모델(Model), 스키마(Schema)라고 부릅니다.모델은 데이터베이스의 테이블과 일대일로 대응합니다.모델 작성 방법파일명 규칙은 '모델명.model.ts'입니다.task.model.tsexport class Task { id: string; title: string; description: string;}DTO(Data Transfer Object)DTO는 서버에서 데이터 처리를 위해 여러 단계의 절차를 거치는데 이 과정에서 데이터..
예외 필터
·
NestJS/NestJS 문서화
예외 필터의 역할NestJS의 예외 필터는 예외처리를 담당합니다.예외 필터의 특징직접 구현할 일은 거의 없습니다.HTTP / GraphQL, 웹소켓, gRPC의 예외 코드가 다르기 때문에 하나의 서비스를 여러 프로토콜에서 사용한다면 사용자 정의 필터를 사용해야 합니다.기본 제공 필터 목록아래 필터들은 HTTP / GraphQL 에러를 발생시킵니다.자주 사용할 것 같은 메서드만 정리했습니다.전체 목록은 공식 문서에서 확인 하세요.메서드응답코드설명BadRequestException400요청이 잘못된 경우UnauthorizedException401권한이 없을 때ForbiddenException403서버가 요청을 거부NotFoundException404서버는 정상이지만 요청한 정보가 없는 경우RequestTim..
프로바이더와 서비스
·
NestJS/NestJS 문서화
프로바이더NestJS에서 프로바이더는 의존성 주입을 이용해 다른 구성요소에서 사용 가능한 구성요소를 말합니다.프로바이더의 특징개발자가 작성하는 프로바이더의 대부분은 서비스지만, 변수, 클래스, 동기/비동기식 팩토리 함수에 @Injectable() 데코레이터를 이용하면 의존성 주입이 가능한 프로바이더가 됩니다. 모듈에서 프로바이더를 사용하려면 모듈의 providers 속성에 등록해야 합니다. 모듈의 exports 속성에 명시하면 해당 모듈을 사용하는 다른 모듈에서 해당 프로바이더를 사용할 수 있습니다.프로바이더는 싱글톤입니다. 하나의 프로바이더 인스턴스를 앱 전역에서 공유합니다.서비스프로바이더의 일종입니다. 모든 프로바이더가 서비스는 아니지만, 개발자가 작성하는 대부분의 프로바이더는 서비스입니다.서비스는 ..
컨트롤러
·
NestJS/NestJS 문서화
컨트롤러의 역할컨트롤러는 어떤 요청을 어떻게 처리하는지 관리하는 역할을 합니다.컨트롤러 생성 방법nest g controller 컨트롤러명nest g co 컨트롤러명 # 약어 사용nest g co 컨트롤러명 --no-spec # 테스트 파일 생성을 원하지 않을 때컨트롤러 모듈 등록 방법컨트롤러를 모듈에 등록해야 컨트롤러가 작동합니다.@Module({ controllers: [AppController],})export class AppModule {}라우팅요청 경로를 처리하기 위한 방법을 라우팅이라 합니다.컨트롤러 자체의 경로와 메소드별 경로를 지정할 수 있습니다.// 컨트롤러 수준의 라우팅// http://url/index 패턴과 일치하면 해당 컨트롤러로 진입후 메서드를 찾습니다.@Controller(..