유효성 검사의 JOI: Node.js에서 데이터 검증의 강력한 도구
Node.js에서 널리 사용되는 데이터 검증 라이브러리인 JOI는 선언적으로 객체 스키마를 정의하고 데이터를 검증하는 데 탁월한 도구입니다. 특히, 사용자 입력, API 요청, 데이터베이스 입력 등 다양한 데이터 구조를 유연하고 효율적으로 검증할 수 있습니다.
주요 특징
- 직관적인 API: 객체 스키마를 선언적으로 작성 가능
- 강력한 유효성 검사: 다양한 데이터 유형과 복잡한 조건 처리 지원
- 확장 가능성: 사용자 정의 규칙과 메시지 작성 지원
- 타입 검사 지원: 문자열, 숫자, 배열, 객체 등 다양한 데이터 유형 검증 가능
JOI 기본 사용법
다음은 JOI를 활용한 기본 데이터 검증 예제입니다.
const Joi = require('joi');
// 스키마 정의
const schema = Joi.object({
name: Joi.string().min(3).max(30).required(),
age: Joi.number().integer().min(0).max(120).required(),
email: Joi.string().email().required(),
});
// 유효성 검사
const data = {
name: "John Doe",
age: 25,
email: "john.doe@example.com",
};
const { error, value } = schema.validate(data);
if (error) {
console.error("유효성 검사 실패:", error.details);
} else {
console.log("유효성 검사 성공:", value);
}
주요 메서드와 옵션
기본 데이터 유형
Joi.string()
: 문자열 검증Joi.number()
: 숫자 검증Joi.boolean()
: 불리언 값 검증Joi.array()
: 배열 검증Joi.object()
: 객체 검증Joi.date()
: 날짜 검증Joi.any()
: 모든 유형 허용
공통 메서드
.required()
: 필수 필드로 지정.optional()
: 선택 필드로 지정.default(value)
: 기본값 설정.min(value)
: 최소값/길이 제한.max(value)
: 최대값/길이 제한.pattern(regex)
: 정규식을 사용한 유효성 검사.valid(...values)
: 허용된 값 지정.invalid(...values)
: 허용되지 않는 값 지정
심화 기능
중첩된 객체 검증
const schema = Joi.object({
user: Joi.object({
name: Joi.string().required(),
age: Joi.number().required(),
}),
});
const data = {
user: {
name: "Alice",
age: 30,
},
};
const { error } = schema.validate(data);
console.log(error ? error.message : "유효성 검사 성공");
배열 검증
const schema = Joi.array().items(
Joi.object({
id: Joi.number().required(),
value: Joi.string().required(),
})
);
const data = [
{ id: 1, value: "item1" },
{ id: 2, value: "item2" },
];
const { error } = schema.validate(data);
console.log(error ? error.message : "유효성 검사 성공");
사용자 정의 메시지
const schema = Joi.string().min(5).required().messages({
"string.base": `"name"은 문자열이어야 합니다.`,
"string.min": `"name"은 최소 5글자여야 합니다.`,
"any.required": `"name" 필드는 필수입니다.`,
});
const data = "abc";
const { error } = schema.validate(data);
if (error) {
console.log(error.details[0].message);
}
확장성과 커스텀 규칙 작성
JOI는 사용자 정의 검증 규칙을 쉽게 추가할 수 있습니다.
const customSchema = Joi.string().custom((value, helper) => {
if (value !== "specialValue") {
return helper.message("값이 'specialValue'이어야 합니다.");
}
return value;
});
const { error } = customSchema.validate("wrongValue");
console.log(error ? error.message : "유효성 검사 성공");
실무에서의 활용
- API 유효성 검사: Express.js와 같은 프레임워크에서 미들웨어로 활용.
- 데이터베이스 유효성 검사: MongoDB와 같은 데이터베이스 입력 값 검증.
- 폼 입력 검증: 사용자 입력 데이터 검증.
JOI는 간단한 데이터 검증에서부터 복잡한 스키마 관리까지 지원하는 강력한 라이브러리입니다. 데이터를 안전하게 처리하고 신뢰성을 높이는 데 적극 활용해 보세요!
Leave a comment