Joi는 Javascript 유효성 검증을 위한 라이브러리다. Joi는 여러 타입과 규칙을 이용해 유효성을 검증할 수 있으며, 유효성 검증에 실패하면 오류를 발생시킨다.

 

유효성 검증 ( Validation )

function is1(value) {
	return value === 1;
}
  • 위 코드는 단순히 값이 1인지 아닌지 판단해서 Boolean 타입의 값을 반환하는 함수다. 이런 간단한 함수도 Validation. 즉, 검증을 위한 코드가 된다.
  • 이런 데이터를 검증하는 것을 더 쉽고 간결하게 작성하도록 도와주는 joi라는 라이브러리를 사용할 수 있다.

joi 설치

# yarn을 이용해 Joi를 설치합니다.
yarn add joi

 

  • yarn add joi를 터미널에 입력해 패키지를 설치한다.

 

joi를 이용해 유효성 검증 하기

  • 문자열 길이 검증
import Joi from 'joi';

// Joi 스키마를 정의합니다.
const schema = Joi.object({
  // name Key는 문자열 타입이고, 필수로 존재해야합니다.
  // 문자열은 최소 3글자, 최대 30글자로 정의합니다.
  name: Joi.string().min(3).max(30).required(),
});

// 검증할 데이터를 정의합니다.
const user = { name: 'Foo Bar' };

// schema를 이용해 user 데이터를 검증합니다.
const validation = schema.validate(user);

// 검증 결과값 중 error가 존재한다면 에러 메시지를 출력합니다.
if (validation.error) {
  console.log(validation.error.message);
} else {
  // 검증 결과값 중 error가 존재하지 않는다면, 데이터가 유효하다는 메시지를 출력합니다.
  console.log('Valid Data!');
}

 

  • 이메일 검증
import Joi from 'joi';

// Joi 스키마를 정의합니다.
const schema = Joi.object({
  // name Key는 문자열 타입이고, 필수로 존재해야합니다.
  // 문자열은 이메일 형식에 맞아야합니다.
  email: Joi.string().email().required(),
});

// 검증할 데이터를 정의합니다.
const user = { email: 'foo@example.com' };

// schema를 이용해 user 데이터를 검증합니다.
const validation = schema.validate(user);

// 검증 결과값 중 error가 존재한다면 에러 메시지를 출력합니다.
if (validation.error) {
  console.log(validation.error.message);
} else {
  // 검증 결과값 중 error가 존재하지 않는다면, 데이터가 유효하다는 메시지를 출력합니다.
  console.log('Valid Email User!');
}

 

https://joi.dev/api/?v=17.13.3  ( 더욱 상세한 joi 문법 사용 방법 )

 


joi를 이용해 유효성 검증하기 ( 비동기 )

  • 비동기로 문자열 길이 검증하기
import Joi from 'joi';

// Joi 스키마를 정의합니다.
const schema = Joi.object({
  // name Key는 문자열 타입이고, 필수로 존재해야합니다.
  // 문자열은 최소 3글자, 최대 30글자로 정의합니다.
  name: Joi.string().min(3).max(30).required(),
});

// 검증할 데이터를 정의합니다.
const user = { name: 'Foo Bar' };

try {
  // schema를 이용해 user 데이터를 검증합니다.
  const validation = await schema.validateAsync(user);
  // 검증 결과값 중 error가 존재하지 않는다면, 데이터가 유효하다는 메시지를 출력합니다.
  console.log('Valid Data!');
} catch (error) {
  // 검증에 실패한다면, 에러 메시지를 출력합니다.
  console.log(error.message);
}
  •  validateAsync()를 통해 데이터를 비동기적으로 검증한다.

+ Recent posts