JS

Joi vs Class Validation

용찬 2024. 3. 5. 11:51

 

Joi


객체 기반 유효성 검사 


객체의 특정 속성에 대한 규칙을 정의, 이를 통해 데이터가 요구하는 조건을 충족하는지 검사
풍부한 기능을 제공한다
다양한 유효성 검사 규칙을 지원한다. 길이, 패턴, 필수 여부 등 다양한 조건을 쉽게 설정할 수 있다.
데이터의 형식을 검사하거나 사용자 정의 규칙을 정의 할 수 있다.

nest.js와 통합이 용이
joi를 사용하면 dto등 데이터에 대한 간편한 유효성 검사를 할 수 있다.
joi 스키마를 정의 후 해당 스키마를 사용하여 데이터를 검증하는 방식으로 적용

import * as Joi from 'joi';

const schema = Joi.object({
  username: Joi.string().alphanum().min(3).max(30).required(),
  password: Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')).required(),
});

Joi로 유효성 검증

 

 

Class Validation

클래스 기반 유효성 검사


주로 클래스의 속성에 직접 데코레이터를 사용하며 유효성 검사 규칙을 정의
DTO나 엔티티 클래스의 속성에 대한 규칙을 클래스 내부에서 명시적으로 설정

 

데코레이터 기반 유효성 검사


데코레이터를 활용, 각 속성에 대한 유효성 검사를 설정
데코레이터를 통해 속성이 문자열인지, 길이제한이 있는지 필수 여부 등을 명시적으로 지정
nest.js 데코레이터와 통합

클래스의 유효성 검사를 쉽게 적용할 수 있다.

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

class CreateUserDto {
  @IsString()
  @IsNotEmpty()
  @MinLength(3)
  @MaxLength(30)
  username: string;

  @IsString()
  @IsNotEmpty()
  @MinLength(6)
  @MaxLength(30)
  password: string;
}

Class Validation으로 유효성 검증

 

 

결론

 

Joi는 더 복잡한 유효성 검사 시나리오를 다루는데 더 적합하고
Class Valudation은 클래스의 속성에 간단한 규칙을 적용 시 더 효과적이다.