[NestJS] (공식문서 번역) Asynchronous providers

NestJS 공식문서 번역 겸 공부하는 글 입니다. 의역 및 오역이 있을 수 있습니다. https://docs.nestjs.com/fundamentals/async-providers Asynchronous providers 때떄로, 애플리케이션은 하나 또는 그 이상의 비동기 작업이 끝날때까지 시작이 지연되어야한다. 예를 들어, 데이터베이스에 연결이 될때까지는 request를 받고싶지 않을 것이다. asynchronous provider를 사용하여 이를 해결할 수 있다.이것을 위한 문법은 useFactory와 함께 async/await를 사용하는 것이다. factory는 Promise를 리턴하며, await를 사용해 비동기 작업을 대기할 수 있다. Nest는 이러한 provider에 의존하는 클래스가 인스턴스화 될때까지 대기한다. { provide: 'ASYNC_CONNECTION', useFactory: async () => { const connection = await createConnection(options); return connection; }, } [hint]...

May 23, 2021 · 1 min · icecat471

[NestJS] (공식문서 번역) Custom Providers

NestJS 공식문서 번역 겸 공부하는 글 입니다. 의역 및 오역이 있을 수 있습니다. https://docs.nestjs.com/fundamentals/custom-providers Custom providers 앞선 챕터들에서, 다양한 측면의 의존성 주입(DI)를 어떻게 Nest에서 사용하는지 알아보았다. 하나의 예는 생성자 기반 의존성 주입이다. Nest 코어에서 기본적으로 빌드되는 의존성 주입과 한가지 메인 패턴만을 살펴보았다. 애플레케이션이 더 복잡해질수록 DI 시스템의 모든 특성들을 필요로 하게 될 것이다. 좀 더 자세히 알아보자. DI fundamentals 의존성 주입은 직접 코드로 작성하는 대신, 의존성의 인스턴스화를 IoC 컨테이너(여기서는 NestJS runtime system)에게 맡기는 inversion of control(IoC) 테크닉이다....

May 21, 2021 · 6 min · icecat471

[NestJS] (공식문서 번역) Custom decorators

NestJS 공식문서 번역 겸 공부하는 글 입니다. 의역 및 오역이 있을 수 있습니다. https://docs.nestjs.com/custom-decorators Custom decorators Custom router decorators Nest는 데코레이터라는 특성을 중심으로 만들어졌다. 데코레이터는 많은 프로그래밍 언어에서 알려진 개념이지만, 자바스크립트 세계에서는 상대적으로 새로운 편이다. 데코레이터가 어떻게 작동하는지 더 잘 이해하기 위해서는, 이 글을 읽어보는 것을 추천한다. 아래는 간단한 정의이다. ES2016 데코레이터는 함수를 반환하고, 인자로 target, name, property, description을 받을 수 있는 expression이다. decorate하려고하는 것 맨 위에 @를 접두어로 붙인 데코레이터를 위치함으로써 데코레이터를 적용할 수 있다....

May 14, 2021 · 3 min · icecat471

[NestJS] (공식문서 번역) Interceptors

NestJS 공식문서 번역 겸 공부하는 글 입니다. 의역 및 오역이 있을 수 있습니다. https://docs.nestjs.com/interceptors Interceptors Interceptors interceptor는 @Injectable() 데코레이터로 주석된 클래스이다. interceptor는 NestInterceptor 인터페이스를 구현해야 한다. interceptor는 Aspect Oriented Programming(AOP)에서 영감을 받은 여러가지 기능을 갖고 있다. method 수행 전/후 추가 로직을 bind 함수로부터 반환된 값을 변형 함수로부터 throw된 예외를 변형 기본 함수를 확장 특정 조건들에 따라 함수를 완전히 override(e.g, 캐싱) Basics 각각의 interceptor는 intercept() method를 구현해야하며, 이 함수는 2개의 argument를 받는다....

May 14, 2021 · 6 min · icecat471

[NestJS] (공식문서 번역) Guards

NestJS 공식문서 번역 겸 공부하는 글 입니다. 의역 및 오역이 있을 수 있습니다. https://docs.nestjs.com/guards Guards Guards guard는 @Injectable() 데코레이터로 주석된 클래스이다. 모든 guard는 CanActivate 인터페이스를 구현해야 한다. guard는 단일 책임을 갖는다. guard는 런타임 시, 조건(권한, 역할, ACL 등)에 따라 request가 route handler에 의해 수행될지 아닐지를 결정한다. 이것은 종종 authorization을 가리킨다. 전통적인 express 애플리케이션에서 authorization(혹은 authentication)은 미들웨어에서 처리된다. 토큰의 유효성을 검사하고, request 오브젝트에 프로퍼티를 추가할 수 있기때문에 미들웨어에서 인증을 구현하는 것은 좋은 선택이다....

May 12, 2021 · 4 min · icecat471

[NestJS] (공식문서 번역) Pipe

NestJS 공식문서 번역 겸 공부하는 글 입니다. 의역 및 오역이 있을 수 있습니다. https://docs.nestjs.com/pipes Pipe Pipe pipe는 @injectable() 데코레이터로 주석이 된 클래스이다. pipe는 PipeTransform 인터페이스를 구현해야 한다. pipe는 두가지 사용방법이 있다. transformation: input 데이터를 원하는 형태로 변환(예를 들면, string에서 int로). validation: input 데이터가 유효한지 확인하고, 유효하지 않은 경우 예외 발생. 두가지 경우 모두 controller route handler의 argument에 동작한다. Nest는 method가 수행되기전에 끼어들어, pipe가 argument를 먼저 받게 한다. transform이나 validation은 이때 동작한다....

May 12, 2021 · 8 min · icecat471

[NestJS] (공식문서 번역) Exception Filters

NestJS 공식문서 번역 겸 공부하는 글 입니다. 의역 및 오역이 있을 수 있습니다. https://docs.nestjs.com/exception-filters Exception filters Exception filters Nest에는 핸들링 되지 않은 예외를 처리해주는 exception layer가 내장되어 있다. 코드에서 예외를 처리해주지 않았다면 이 layer에서 예외를 캐치하여 자동으로 유저친화적인 response를 전송한다. 특히, 이것은 HttpException과 서브클래스들을 핸들링하는 global exception filter에 의해 수행된다. 예외가 인식되지 않을 때(HttpException과 그 서브클래스가 아닌 경우), exception filter는 자동으로 아래의 데이터를 JSON 형식으로 response한다. { "statusCode": 500, "message": "Internal server error" } Throwing standard exceptions Nest는 @nestjs/common 패키지를 통해, HttpException class를 제공한다....

May 3, 2021 · 5 min · icecat471

[NestJS] (공식문서 번역) Middleware

NestJS 공식문서 번역 겸 공부하는 글 입니다. 의역 및 오역이 있을 수 있습니다. https://docs.nestjs.com/middleware Middleware Middelware middleware는 route handler 이전에 호출되는 함수이다. middleware는 request와 response object에 접근할 수 있으며, 애플리케이션의 request-response cycle 내에서 next() 함수에도 접근할 수 있다. Nest middleware는 기본적으로 express middleware와 같다. 아래는 express 공식문서에 나와있는 express middleware의 특징이다. 어떠한 코드도 실행한다. request와 response object를 변형한다. request-response cycle을 끝낸다. stack에서 다음 middleware를 호출한다. 현재 middleware가 request-reponse cycle을 끝내지 못하면, next() 함수를 통해 다음 middleware를 호출한다....

May 3, 2021 · 3 min · icecat471

[NestJS] (공식문서 번역) Modules

NestJS 공식문서 번역 겸 공부하는 글 입니다. 의역 및 오역이 있을 수 있습니다. https://docs.nestjs.com/providers Modules Modules module class는 @Module 데코레이터로 선언된다. @Module 데코레이터는 Nest가 애플리케이션 구조를 조직하기 위해 사용하는 메타데이터를 붙여준다. 각각의 애플리케이션은 적어도 root module이라고 불리는 하나의 module을 갖는다. root module은 Nest가 애플리케이션그래프(Nest가 module과 provider의 관계들과 의존성을 결정하는데 사용하는 내부 데이터 구조)를 빌드하기 위해 사용하는 시작점이다. 보통 매우 작은 규모의 애플리케이션은 root module 단 하나만 갖는 경우도 있지만, 이러한 경우는 일반적이지는 않다....

May 3, 2021 · 5 min · icecat471

[NestJS] (공식문서 번역) Providers

NestJS 공식문서 번역 겸 공부하는 글 입니다. 의역 및 오역이 있을 수 있습니다. https://docs.nestjs.com/providers Providers Providers provider는 Nest에서 가장 근본적인 개념이다. 대부분의 기본 Nest class는 provider로 취급된다(예를 들어, service, repository, factory, helper 등등). provider는 의존성을 주입할 수 있다. 이것은 오브젝트간의 서로 다양한 관계들을 만들 수 있음을 뜻한다. 앞선 챕터에서, 우리는 CatsController를 만들었고, controller는 HTTP request를 핸들링하고 복잡한 일을 provider에게 맡긴다. Services 간단한 CatsService를 만들어보자. 이 service는 데이터를 저장하고 불러오는 역할을 담당할 것이며, CatsController가 이를 시용할 것이다....

May 2, 2021 · 4 min · icecat471