프레임워크/Nest.js

    Nest.js 웹소켓 (WebSockets) 이란? + 사용법

    웹소켓 게이트웨이 웹소켓 게이트웨이란, 웹소켓에서 REST Controller 와 비슷한 역할을 해주는 것이라고 보면 된다. 단, 진입점이 단순히 엔드포인트가 아니라 이벤트(namespace)이며, 뒤에 추가 path 가 있는 게 아니라 추가 event 가 더 있는 것으로 보면 된다. 웹소켓에서 엔드포인트는 단순히 처음 connection 을 맺을 때 한번만 쓰인다. @WebSocketGateway() 데코레이터를 단 클래스이다. 게이트웨이는 플랫폼에 구애받지 않으므로 어댑터가 생성되면 모든 WebSockets 라이브러리와 호환된다. 기본 지원은 socket.io 와 ws 이다. 의존성 설치 $ npm i --save @nestjs/websockets @nestjs/platform-socket.io 기본..

    Nest.js 미들웨어 (Middleware) 란?

    미들웨어 (Middleware) 란? 라우트 핸들러 앞에 호출되는 함수 요청-응답에서 요청 및 응답 객체와 next() 미들웨어 함수에 접근 가능 다음 미들웨어 함수는 일반적으로 next 라는 변수로 표기됨 기본적으로 express 의 미들웨어와 동일 express 의 미들웨어 소개 어떤 코드든 실행한다. 요청-응답 객체를 변환한다. 요청-응답 사이클을 종료한다. 스택에서 다음 미들웨어 함수를 호출한다. 다음 미들웨어 함수에 제어권을 넘기기 위해 next() 를 호출해야 한다. 그렇지 않으면 요청이 중단된 채로 유지된다. next() 를 꼭 불러줘야 한다는 점이 Interceptor 나 Guard 와 같은 것과 구분된다. 미들웨어는 요청에 제공하는 기능 중 올인원 솔루션 같은 느낌이다. 제약받지 않고 많..

    Nest.js 인터셉터 (Interceptor) 란?

    인터셉터 Nest.js 의 인터셉터 클래스는 @Injectable 데코레이터를 추가해야 한다. NestInterceptor 인터페이스를 상속해야 한다. 인터셉터는 Aspect Oriented Programming 기술에서 영감을 받았다. 메서드 실행 전 후에 추가 로직 바인딩 함수 결과를 변환 함수 예외를 변환 함수 동작을 확장 조건부 함수 완전 재정의 (ex. 캐싱 목적) 기초 인터셉터는 intercept() 메서드를 구현해야 한다. 메서드엔 두개의 인자가 있다. 1번째 인자, ExecutionContext: 요청의 타입 정보나 호출된 컨트롤러 메서드 정보 등을 가져올 수 있다. ex) http 에서 헤더, 쿠키 등의 정보 그리고 컨트롤러 메서드 정보 이는 ArgumentsHost 를 상속한다. 2번째..

    Nest.js 의 Class Validator 란?

    Class Validator 란? nestjs 파이프 아래에 속하는 개념이다. Class Validator 공식문서 더 상세한 Typescript Validator 공식 문서 데코레이터를 통해 주로 DTO 내부에 있는 프로퍼티들의 값을 검증하는데 사용한다. 예시 글로벌로 적용하기 위해 필요한 설정 main.ts 에 다음 코드를 반드시 설정해주어야 한다. import { NestFactory } from "@nestjs/core"; import { AppModule } from "./app.module"; import { ValidationPipe } from "@nestjs/common"; async function bootstrap() { const app = await NestFactory.creat..

    Nest.js 의 가드(Guard) 란?

    Guard (가드) 란? 개념 Nest.js 에서 요청이 실제로 처리되기 전에 보통 권한이 있는지 확인하는 방패막이(Guard) 역할을 해주는 컴포넌트다. 가드가 없었다면 그냥 컨트롤러로 전해질수도 있는 요청에 이 가드가 중간 브로커 역할을 해서 인증 정보를 확인하거나 사용자 정보를 넣어주는 역할을 하는 것이다. Nest.js 의 라이프사이클로 보는 가드(Guard)의 위치 세부 설명 CanActive 인터페이스를 구현하고, @Injectable 데코레이터가 붙은 클래스이다. 런타임에 존재하는 조건에 따라 요청이 라우트 핸들러에 의해 처리될지 여부를 결정한다. 조건이란, 권한, 역할(ROLE), ACLs(Access Control Lists) 등을 말한다. 흔히 Authorization 이라 불리는 것들..

    Nest.js 의 파이프(Pipes) 란?

    파이프 (Pipe) 란? @Injectable 데코레이터가 붙은 PipeTransform 인터페이스를 구현하는 클래스로 요청 데이터 변환 및 유효성 검사에 사용한다 핸들러가 호출되기 직전 라우트 핸들러가 처리중인 Argument 를 대상으로 작동한다. 주요 기능 변환 (Transformation): 입력 데이터를 원하는 형태로 변환 가능 ex) 문자열 -> 정수 유효성 검사 (Validation): 입력 데이터가 올바르지 않은 경우 예외 발생 가능 파이프가 실행되는 영역 파이프는 예외 영역 (Exceptions zone) 에서 실행되어 파이프가 던지는 예외는 예외 계층에서 처리된다. 파이프에서 예외가 발생하면 컨트롤러 메서드가 이어서 실행되지 않는다. 다이어그램 살펴보기 클라이언트: Nest.js 서버의..

    Nest.js Request Lifecycle 과 기본 아키텍처

    Nest.js 기본 아키텍처 살펴보기 아래는 참고용 Request Lifecycle 아키텍처 그림이다. Controller, Service, Repository 가 요청 로직을 실제로 처리하는 부분이다. 나머지는 없어도 동작을 하지만 요청 로직을 실제로 처리하는 부분은 반드시 있어야 한다. 미들웨어 request 와 resoponse 그리고 next() 함수에 접근할 수 있는 함수를 구성할 때 사용된다. 로깅이나 요청 검증 등에 사용 가능하다. 가드 인증 및 권한 부여에 사용된다. CanActivate 인터페이스를 구현한다. 인터셉터 메서드 실행 전 후에 추가 로직을 바인딩한다. 메서드 결과를 변형한다. 응답을 확장한다. 파이프 라우트 핸들러가 처리할 인수에 대해 작동한다. 데이터 유효성 검사 혹은 변환..

    Nest.js 소개

    Nest.js 소개 Node.js 로 만듦 차세대 Typescript 를 이용 HTTP 서버 프레임워크인 Express 를 사용, Fastify 로도 사용 가능 공식 문서에서는 모든 노드 HTTP 프레임워크에서 작동한다고 한다. 기본은 @nestjs/platform-express 아키텍처 설계 문제를 해결하기 위해 나옴 서버 아키텍처 때문에 테스트하기 쉽고, 디커플링 잘되고, 유지보수 편함 결국 Express + 아키텍처 초기 파일 구성 아래 디렉토리 구성은 각 모듈을 전용 디렉토리에 저장하는 관례를 따르기 위해 초기에 잡힌다. src 디렉토리 내부 main.ts: 엔트리 파일 역할. 코어 함수인 NestFactory 를 사용하여 Nest Application Instance 를 만듦 app.servic..

반응형