본문 바로가기

분류 전체보기

(181)
NestJS - 대충 서비스 만들어보기 (12) 이번 포스팅에선 NestJS 에서 제공하는 Guard 기능을 사용해보겠습니다. - 인증 vs 인가 인증은 Authentication, 인가는 Authorization 으로 의미하는 바는 좀 다릅니다. 인증은 유저의 신원을 검증하는 프로세스로, 자신이 누구인지를 증명하는 것입니다. 인가는 인증 이후의 프로세스로 인증된 사용자가 어떤 리소스에 접근할 수 있는지를 확인하는 것을 인가라고 합니다. NestJS 에선 Guard 를 사용해 인가를 구현할 수 있습니다. 좀 희한한건 일반적으로 응답 상태를 나타낼 때 인증이 실패하면 401, 인가가 실패하면 403 인데 401 - Unauthrozied / 403 - Forbidden 으로 되어있습니다. Forbidden 은 이해가 되지만 Authentication 실..
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 입력 데이터를 원하는 ..