인프런 커뮤니티 질문&답변

SJ님의 프로필 이미지
SJ

작성한 질문수

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

직접 Custom Pipe 만들어보기

custom 파이프라인

작성

·

80

1

custom 파이프 챕터를 듣고있습니다.

위의 강의에서 8 자 보다 긴 비밀번호는 throw new 반환을 적용한다고 했을때

파이프 라인으로 적용해도 될것같고 , request dto 로 적용할수있을것 같단 생각을 했습니다.

이럴때 어디서 적용할지에 대한 기준치는 어떻게 판별하시나요 ??

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

질문을 정확히 이해하지 못했습니다.

생각하시는 두가지의 예제 코드를 보여주시면 최선을 다해 답변 드리도록 하겠습니다.

감사합니다!

SJ님의 프로필 이미지
SJ
질문자

@Injectable() // 모든 파이프는 Injectable 입니다.
export class PasswordPipe implements PipeTransform{ // PipeTransform 를 사용하면 강제하는게 필요하다.
    transform(value: any, metadata: ArgumentMetadata) {
        if(value.toString().length > 8){ // 8 자보다 길다면 에러를 반환 
            throw new BadRequestException('비밀번호는 8자 이하로 입력해주세요!');
        }

        return value.toString();
    }
}


위와 같이 적용할수있지만

import { IsString, MaxLength } from 'class-validator';

export class PasswordDto {
  @IsString()
  @MaxLength(8, { message: '비밀번호는 8자 이하로 입력해주세요!' })
  password: string;
}

파이프라인을 만들지 않고 request dto 로 만들어서 사용할 수도 있을것 같았습니다.

만약 기능을 만들고자 할때 두곳에 어느곳에서도 적용을 해도 된다고 취지에 맞게 그 기능을 붙이는게 맞아보였어요 그래서 언제 어떤부분에 기능을 붙이시는지 기준을 알고 싶었습니다.

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

어느 한곳에만 적용한다고 했을때 두 방식의 결과는 완전 같다고 볼 수 있습니다.

이런건 정답이 없는 영역입니다. 팀의 기준에 따라 적용하시면 됩니다.

다만 제 개인적인 의견을 물으신다면 Dto에 적용 할 것 같습니다.

저는 개인적으로 모든 request의 검증 과정을 Class Validator에 담는 편입니다. (NestJS 자체 Pipe의 기능은 대부분 class validator 기능으로 대체 가능합니다. 애초에 class validator가 나온 목적이기도 하구요.)

이런 기준이 있으면 협업하기 편하기 때문에 어느 한가지 기준을 세워두시기만 하면 된다고 생각합니다.

감사합니다!

SJ님의 프로필 이미지
SJ

작성한 질문수

질문하기