본문 바로가기

전체 글

(180)
NestJS - 대충 서비스 만들어보기 (11) 이번 포스팅에선 NestJS 의 미들웨어에 대해 간단히 보도록 하겠습니다. - Middleware NestJS 의 미들웨어는 원래 알고 있던 Express 의 미들웨어와 다르지 않습니다. 일반적으로 미들웨어라 함은 클라이언트의 요청에 맞는 응답을 하기 위한 중간에 거쳐가는 함수들이라고 볼 수 있습니다. Express 에선 미들웨어라고 하면 대략 아래와 같이 구성되어 있는데요. (req: Request, res: Response, next: NextFunction) { ... next(); } req(요청) 와 res(응답) 객체 및 다음 미들웨어 함수의 액세스 권한을 갖는 함수를 말하며 next 를 호출함으로써 다음 미들웨어로 현재 요청을 넘길 수 있고, 이러한 구성에 의해 미들웨어는 순차적으로 처리됩니..
NestJS - 대충 서비스 만들어보기 (10) 지난번에 작성하지 못했던 Repository 를 연동해 광고 등록시 DB 에 저장하고 DB 로 부터 광고 데이터를 조회하는 API 를 완성해 보도록 하겠습니다. - TypeORM Repository NestJS 는 저장소 패턴을 지원하니 먼저 이를 사용해보도록 하겠습니다. import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity('Ad') export class Ad { @PrimaryGeneratedColumn() id: number; @Column({ length: 10, name: 'ad_type' }) adType: string; @Column({ length: 30 }) title: string; @Column({ len..
NestJS - 대충 서비스 만들어보기 (9) 이번엔 꽤나 늦었지만 NestJS 에서 DB 를 연결해보겠습니다. - Mysql 데이터베이스로는 심플하게 Mysql 을 사용하려고 합니다. > docker run --name mysql-local -p 3306:3306/tcp -e MYSQL_ROOT_PASSWORD=xxx -d mysql:8 일단 로컬에서 진행하는 만큼 docker 로 간단하게 제 맥북에서 Mysql 8버전 container 를 실행했습니다. 패스워드는 자유롭게 넣어주시면 되겠습니다. 저는 예전부터 사내에서도 데이터베이스 클라이언트로 DBeaver 를 사용해왔습니다. 초기 버전에는 몇가지 버그도 있긴 했으나 어느덧 23버전까지 오면서 많은 부분의 개선이 있었으니 마땅한 툴을 사용하고 있지 않으셨다면 한번 써보시는것도 괜찮을 것 같습니다..
NestJS - 대충 서비스 만들어보기 (8) 지난 포스팅에서 미처 마무리하지 못했던 env 를 정리해보도록 하겠습니다. - Custom Config 위 구조는 현재까지 작성한 env 관련 디렉토리와 파일입니다. @nestjs/config 를 사용해 ConfigModule 을 Node 실행 환경에 따라 동적으로 구성하고, ConfigService 를 provider 로 등록해 config 가 필요한 컴퍼넌트가 ConfigService 와 협력하는 구조로 되어 있습니다. .development.env 또는 .production.env 와 같은 .env 파일은 환경에 따라 .staging.env 같은 파일이 추가될 순 있겠지만 이 파일을 괜히 사용하는 모듈에 따라 분리하는 건 오히려 관리가 더 어려울 것 같고, 하나의 통째로 들어가있는 ConfigSe..
NestJS - 대충 서비스 만들어보기 (7) 이번 포스팅에선 config 를 구성해보도록 하겠습니다. 본래는 프로젝트를 하면 이런것부터 해야하지만 당장 처음엔 딱히 config 로 넣을만한것도 없어서 미루다가, 대충 만들면서 하드코딩으로 들어가있는 slack 관련된 설정값들을 config 로 옮기려 합니다. - dotenv config 를 구성할 때 dotenv 라이브러리를 사용하려고 합니다. dotenv 는 .env 파일을 읽어서 환경 변수로 등록해주는 역할을 하고, 그럼 우리는 환경 변수로부터 필요한 세팅 값들을 사용할 수 있습니다. 팀에서 관리하는 레포들에 dotenv 를 적용해야지 생각만하고 아직 못했었는데 이런때에라도 좀 써보게 되었네요. > npm install dotenv 먼저 dotenv 라이브러리를 설치합니다. 그리고 당장 .pro..
NestJS - 대충 서비스 만들어보기 (6) 이번엔 저번 포스팅에서 하지 못했던 커스텀 validator 를 생성해 컨트롤러가 받는 DTO 의 일부 필드에 적용해보도록 하겠습니다 - Custom Validator validator 를 커스텀하게 만들려면 class-validator 에서 제공하는 기능을 사용하면 됩니다. 이번 예시에서도 공식 내용을 따라가면서 만들어보도록 하겠습니다. import { registerDecorator, ValidationOptions, ValidationArguments, } from 'class-validator'; export function IsXXX(property: string, validationOptions?: ValidationOptions) { return (object: object, propert..
NestJS - 대충 서비스 만들어보기 (5) 이번엔 광고 생성 또는 수정, 조회할 때 요청으로 들어오는 파라미터들에 대한 유효성 체크를 해보도록 하겠습니다. 그러기 위해선 먼저 파이프에 대해 알아야 합니다. - Pipe (파이프) NestJS 공식 문서 중 파이프에 대한 설명으로 제일 먼저 나와있는 그림입니다. 어느정도 공식 문서의 문구를 설명하는데 사용하겠습니다. 파이프는 Injectable 데코레이터가 붙어있는 클래스고, PipeTransform 인터페이스를 구현합니다. 파이프는 요청이 라우터 핸들러로 전달되기 전에 요청 객체를 변환할 수 있는 기회를 제공합니다. 지금까지 작성한 코드 기준으로 보자면 컨트롤러가 받고 있는 DTO 가 되겠죠. 보통 파이프는 일반적으로 두 가지의 사용법이 있습니다. transformation 입력 데이터를 원하는 ..
NestJS - 대충 서비스 만들어보기 (4) 저번엔 Controller 와 Provider 등을 알아본다고 별로 한게 없는데, 이번엔 광고 컨텐츠 등록 API 를 한번 건드려보겠습니다. DB 는 좀 나중에 연동하기로하고, 컨텐츠를 등록하면 Slack 으로 알람을 보내는 모듈을 만들어보겠습니다. 뭔가 사이드부터 하는 것 같다면 그게 맞습니다.. export class CreateAdDto {} 일전에 생성했던 리소스대로면 AdsController 의 create, update 메서드는 CreateAdDto 타입의 파라미터를 받게 되어있습니다. DTO (Data Transfer Object) 는 굳이 적지 않아도 아시다시피 프로세스나 레이어 사이에서 데이터를 전송하는 객체입니다. 직렬화, 역직렬화 로직 또는 단순한 getter setter 정도의 메..