내일배움캠프 TIL

Joi라이브러리 사용법과 사용하는 이유 본캠프 TIL 01/09

parkcw0325 2025. 1. 9. 21:18

코딩에서 유효성 검사라는 것이 존재한다 유효성 검사란 내가 서버에게 전달하는 데이터에 여러 제약조건을 걸어 해당 조건들을 모두 충족한 경우에만 서버로 전달한다는 의미이다.  그 중에 joi라이브러리를 사용하여 유효성 검사를 진행하는 방식을 알아보겠다. 

 

일단 조이라이브러리를 다운하는 방법은

npm i Joi

터미널에 이러한 명령어로 조이 라이브러리를 사용할 수 있다.

 

조이라이브러리를 사용하는 간단한 코드를 먼저 살펴보겠다.

// 조이 라이브러리를 사용합니다.
import Joi from 'joi';
// ../../constants/message.constant.js에 선언되어 있는 메시지 값을 가져와서 사용합니다.
import { MESSAGES } from '../../constants/message.constant.js';
// 이력서 최소 길이를 ./resume.constant.js'에서 값을 가져옵니다.
import { MIN_RESUME_LENGTH } from '../../constants/resume.constant.js';

//조이 라이브러리를 사용해서 타이틀과 컨탠츠 부분의 유효성 검사를 진행합니다.
const schema = Joi.object({
  title: Joi.string(),
  content: Joi.string().min(MIN_RESUME_LENGTH).messages({
    'string.min': MESSAGES.RESUMES.COMMON.CONTENT.MIN_LENGTH,
  }),
})
  .min(1)
  .messages({
    'object.min': MESSAGES.RESUMES.UPDATE.NO_BODY_DATA,
  });


  // 이력서 수정 유효성 검사 함수로 지정합니다. 
export const updateResumeValidator = async (req, res, next) => {
  try {
    //조이 라이브러리로 만든 스키마 유효성 감사를 req.body 값으로 받는 부분을 확인합니다
    await schema.validateAsync(req.body);
    next();
  } catch (error) {
    next(error);
  }
};

여기서 schema를 선언하여 조이 오브젝트를 생성하게 된다. 생성된 오브젝트 안에는 내가 입력할 부분 

즉 위의 코드에서는 title,과 content 가 된다 

해당 부분들에 이제 조건을 할당하게 되는데  string()은 문자열이어야 한다는 조건이고,.min은 문자의 최소길이 .message는 만약 조건에 실패하였다면 어떠한 메시지를 응답하는지 작성하게 된다.

 

-----------------------------------

코드는 여기까지 보도록하고 이제 joi라이브러리를 왜 유효성 검사 패키지로 사용하여야 하는가에 대하여 알아보겠다.

Joi 라이브러리는 JavaScript에서 데이터 유효성 검사를 수행할 때 매우 유용한 도구다. 유효성 검사는 주로 사용자가 입력한 데이터가 올바른 형식과 값을 가지고 있는지 확인하는 과정으로, 웹 애플리케이션에서 중요하다. Joi는 이러한 유효성 검사 작업을 효율적이고 간단하게 처리할 수 있도록 돕는다.

Joi 라이브러리로 유효성 검사를 하는 이유는 다음과 같다:

 

  1. 명확한 데이터 구조 정의:
    Joi는 스키마 기반의 유효성 검사를 제공한다. 개발자는 입력 데이터가 가져야 할 정확한 구조(예: 문자열, 숫자, 배열 등)를 정의할 수 있다. 이로 인해 데이터를 명확하게 정의하고 검증할 수 있다.
  2. 다양한 검증 기능 제공:
    Joi는 다양한 데이터 타입에 대해 검증을 할 수 있는 메서드를 제공한다. 예를 들어, 문자열의 길이, 숫자의 범위, 이메일 형식, 날짜 범위 등 여러 가지 조건을 검증할 수 있다. 기본적으로 제공되는 검증 기능들이 매우 풍부해서 복잡한 검증을 간단히 처리할 수 있다.
  3. 체이닝을 통한 직관적인 사용:
    Joi는 체이닝(Chaining) 방식으로 조건을 이어서 작성할 수 있어 코드가 직관적이고 가독성이 좋다. 예를 들어, 여러 조건을 하나의 객체 내에서 손쉽게 조합하여 검증할 수 있다.
  4. 비즈니스 로직에서의 검증 수행:
    웹 애플리케이션에서는 서버로 전달되는 데이터의 유효성 검사를 통해 예상치 못한 오류나 보안 문제를 방지할 수 있다. Joi는 서버 측에서 클라이언트가 보낸 데이터를 검증하는 데 유용하며, 이를 통해 비즈니스 로직에서 발생할 수 있는 오류를 미리 예방할 수 있다.
  5. 확장성:
    Joi는 유효성 검사를 위한 다양한 메서드와 옵션을 제공하며, 커스터마이징이 용이하다. 예를 들어, 기존의 규칙을 기반으로 사용자 정의 검증 로직을 추가할 수 있기 때문에 애플리케이션에 맞는 맞춤형 검증을 구현할 수 있다.
  6. 예외 처리 용이:
    Joi는 유효성 검사 결과를 error 객체로 반환하여, 검증이 실패한 이유를 쉽게 알 수 있다. 이를 통해 사용자가 잘못된 데이터를 입력했을 때, 정확한 오류 메시지를 제공하고 적절한 피드백을 제공할 수 있다.
  7. 정규 표현식보다 더 유연하고 안전함:
    기존의 JavaScript에서 정규 표현식을 사용하여 유효성 검사를 하는 것보다, Joi는 더 직관적이고 안전한 방법을 제공한다. Joi의 검증 메서드는 내부적으로 데이터 타입과 값의 유효성을 체계적으로 체크해주므로 오류 가능성을 줄일 수 있다.

이러한 이유들로 가능하다면 Joi라이브러리를 활용하여 유효성 검사를 하면서 코드를 작성하는게 개발자로서 배워야할 마음가짐이 아닌가 싶다.