파이프(Pipe) 요청이 라우터 핸들러로 전달되기 전에 요청 객체를 변환할 수 있는 기회를 제공 미들웨어의 역할과 비슷하지만 미들웨어는 애플리케이션의 모든 콘텍스트에서 사용하도록 할 수 없음 => 미들웨어는 현재 요청이 어떤 핸들러에서 수행되는지, 어떤 매개변수를 가지고 있는지에 대한 실행 콘텍스트를 알지 못함 파이프의 목적 변환(trasform): 입력 데이터를 원하는 형식으로 변환, => users/user/1 의 경로 매개변수 1을 문자열에서 정수로 변환 유효성 검사(validation): 입력 데이터가 사용자가 정한 기준에 유효하지 않은 경우 예외 처리를 반환함 파이프의 종류 ValidationPipe 용도: 들어오는 데이터의 유효성 검사를 수행함 @Post() //ValidationPipe를 통..
모듈 여러 작은 단위의 컴포넌트들을 조합하여 큰 작업을 수행할 수 있게 하는 단위 Nest 앱이 실행되기 위해서 하나의 루트 모듈이 존재하고 이 루트 모듈(AppModule)은 다른 모듈들로 구성됨 여러 모듈에 각기 맡은 바 책임을 나누고 응집도를 높이기 위함 유사한 기능끼리 모듈로 묶어야함 import: 이 모듈에서 사용하기 위한 프로바이더를 가지고 있는 다른 모듈을 가져옴 controllers / providers : 모듈 전반에서 컨트롤러와 프로바이더를 사용할 수 있도록 Nest가 객체를 생성하고 주입 export: 이 모듈에서 제공하는 컴포넌트를 다른 모듈에서 가져오기해서 사용하고자 한다면 export를 해야함 AppModule 애플리케이션의 Root 모듈 CoreModule만을 가져오고 Core..
Nest.js 설치 nest.js를 글로벌환경에 설치하고 프로젝트 생성 CLI $ npm i -g @nestjs/cli $ nest new '생성하려는 프로젝트이름' Nest.js 실행 start:dev로 실행시 package.json에 기술된 스크립트에 --watch 옵션이 포함되어 있어서 코드 변경후 저장할때 마다 서버를 자동으로 다시 실행함 npm run start:dev Controller 생성 컨트롤러는 들어오는 요청을 받고 처리된 결과를 응답으로 돌려주는 인터페이스 역할 엔드포인트 라우팅 매커니즘을 통해 각 컨트롤러가 받을 수 있는 요청을 분류 nest g controller '이름' 보일러 플레이트 생성 '이름'에 해당하는 module, controller, service, entity, d..
Redis 트래픽 분산 Redis도 트래픽이 늘어나면 한 대의 Redis 인스턴스로는 트래픽 처리가 어려운 상황발생가능, Redis의 트래픽을 분산 시키는 방법중 Cluster와 Master/Slave가 존재함, Redis Cluster master 노드를 여러대 두어 트래픽을 분산 master노드에는 하나 이상의 slave노드를 둘 수 있음 하나의 master 노드가 다운되어도 다른 2개의 master 노드가 존재하기 때문에 redis의 가용성을 높힐 수 있음 데이터를 저장하는 방식은 해시슬롯 이라는 방식을 사용함. CRC-16 해시 함수를 사용해 key를 정수로 변환하고 해당정수값을 16,385로 모듈 연산한 값 cluster는 총 16384개의 해시슬롯이 있으면 각 master노드에 자유롭게 할당이..