본문 바로가기

입력 정보 검증하기

@정소민fan2025. 6. 15. 16:01

컨트롤러에서 가져오는 입력 정보, 예를 들어 회원가입 시의 정보들을 어떻게 검증할 수 있을까?

문자열이 비어있다던가, 전화번호나 이메일이 형식이 맞지 않는다던지 하는 검증 말이다.

물론 컨트롤러에서 @Body 로 가져온 데아터를 일일히 검증할수도 있겠지만, 너무 불편하다.

이미 만들어진 라이브러리를 통해 자동으로 검증하도록 해보자.

라이브러리 설치

npm install class-validator
npm install class-transformer

validator는 클래스의 정보를 검증할 수 있고, transformer는 @Body에 들어온 정보를 DTO로 변환해준다.

사용법

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(
    new ValidationPipe(
      {
        whitelist: true,
      }
  ));
  await app.listen(process.env.PORT ?? 3000);
}
bootstrap();

부트스트랩 함수에서 app.userGloablPipes를 추가해주자.

whitelist는 DTO에 정의되어있는 필드 외에 다른 인자가 들어오면 이를 무시할 수 있게 해주는 플래그이다.

 

회원가입을 위한 api가 하나 있다고 가정하자. 그러면 받아올만한 정보는 이메일, 패스워드 정도일 것이다.

/* create-user.dto.ts */
export class CreateUserDto {
  @IsEmail()
  email: string;
  @IsString()
  password: string;
}
  1. @IsEmail : 이 필드의 형식이 이메일 형식을 따르는지 확인한다. 예를 들어 example@email.com과 같은 형식을 따르는지 확인하는것이다
  2. IsString : 이 필드에 문자열 외의 다른 인자가 들어오는지 확인한다. 비어있는 문자열도 안되고, 숫자도 안된다.

이외의 다른 검증 데코레이터는 공식 문서나 검색을 통해 알아보자

/* users.controller.ts */

@Controller('auth')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Post('/signup')
  createUser(@Body() body: CreateUserDto) {
    console.log(body)
  }
}

이후에 컨트롤러에서 @Body에 타입만 위의 Dto로 명시해주면? 알아서 받은 body이자를 Dto로 바꿔주고, 검증을 수행한다.

 

이후에 json으로 여기다 정보를 날려보면?

/* send to [POST]/auth/signup */

{
    "email":"hi@example.com",
    "password":"hello"
}

이렇게 잘 받아오는 것을 확인할 수 있다.

'NestJS' 카테고리의 다른 글

AWS bedrock 사용기  (5) 2025.08.05
반환 정보 편집하기  (1) 2025.06.15
TypeORM 간단 사용법  (0) 2025.06.15
제어 역전 / 의존성 주입  (0) 2025.06.14
컨트롤러 라우팅 / 요청 인자 받기  (0) 2025.06.14
정소민fan
@정소민fan :: 코딩은 관성이야

코딩은 관성적으로 해야합니다 즐거운 코딩 되세요

목차