2025년 1월 9일

김동환·2025년 1월 9일

오늘의 코드

import Joi from 'joi';
import { MESSAGES } from '../../constants/message.constant.js';
import { MIN_PASSWORD_LENGTH } from '../../constants/auth.constant.js';

// 조이 오브젝트라는 메서드 이용해서 이메일과 비밀번호, 비밀번호확인, 이름을 검증할 스키마를 만든다.
const schema = Joi.object({
  email: Joi.string().email().required().messages({
    'any.required': MESSAGES.AUTH.COMMON.EMAIL.REQUIRED,
    'string.email': MESSAGES.AUTH.COMMON.EMAIL.INVALID_FORMAT,
  }),
  password: Joi.string().required().min(MIN_PASSWORD_LENGTH).messages({
    'any.required': MESSAGES.AUTH.COMMON.PASSWORD.REQURIED,
    'string.min': MESSAGES.AUTH.COMMON.PASSWORD.MIN_LENGTH,
  }),
  passwordConfirm: Joi.string().required().valid(Joi.ref('password')).messages({
    'any.required': MESSAGES.AUTH.COMMON.PASSWORD_CONFIRM.REQURIED,
    'any.only': MESSAGES.AUTH.COMMON.PASSWORD_CONFIRM.NOT_MACHTED_WITH_PASSWORD,
  }),
  name: Joi.string().required().messages({
    'any.required': MESSAGES.AUTH.COMMON.NAME.REQURIED,
  }),
});

// signUpValidator 를 진짜로 실행할 수 있는 벨리데이트 함수를 만들었다.
export const signUpValidator = async (req, res, next) => {
  try {
    await schema.validateAsync(req.body);
    next();
  } catch (error) {
    next(error);
  }
};

TIL: Joi를 이용한 회원가입 입력값 검증 코드

오늘은 Joi 라이브러리를 사용하여 회원가입 요청에서 입력받은 데이터를 검증하는 코드를 작성했습니다. 주요 내용은 아래와 같습니다.


1. Joi 객체를 활용한 스키마 정의

  • 이메일, 비밀번호, 비밀번호 확인, 이름을 검증하기 위한 스키마를 정의했습니다.
  • 각각의 필드에 대해 조건과 커스텀 에러 메시지를 설정했습니다.

스키마 세부사항:

  • 이메일 (email)
    • 이메일 형식이어야 하며(string.email), 필수 항목입니다(any.required).
    • 유효하지 않은 경우 커스텀 메시지를 반환합니다.
      • MESSAGES.AUTH.COMMON.EMAIL.REQUIRED
      • MESSAGES.AUTH.COMMON.EMAIL.INVALID_FORMAT
  • 비밀번호 (password)
    • 최소 길이 조건(min(MIN_PASSWORD_LENGTH))을 만족해야 하며 필수 항목입니다.
    • 에러 메시지:
      • MESSAGES.AUTH.COMMON.PASSWORD.REQURIED
      • MESSAGES.AUTH.COMMON.PASSWORD.MIN_LENGTH
  • 비밀번호 확인 (passwordConfirm)
    • password와 동일해야 하며(valid(Joi.ref('password'))), 필수 항목입니다.
    • 에러 메시지:
      • MESSAGES.AUTH.COMMON.PASSWORD_CONFIRM.REQURIED
      • MESSAGES.AUTH.COMMON.PASSWORD_CONFIRM.NOT_MACHTED_WITH_PASSWORD
  • 이름 (name)
    • 필수 항목입니다.
    • 에러 메시지:
      • MESSAGES.AUTH.COMMON.NAME.REQURIED

2. 회원가입 검증 함수 signUpValidator

  • schema.validateAsync 메서드를 사용해 req.body 데이터를 검증합니다.
  • 검증이 성공하면 next()를 호출해 다음 미들웨어로 넘어갑니다.
  • 검증이 실패하면 errornext(error)로 전달하여 에러 핸들링 미들웨어에서 처리할 수 있도록 합니다.

배운 점

  • Joi는 데이터 검증을 간결하고 효과적으로 처리할 수 있는 도구입니다.
  • 에러 메시지를 커스터마이징하여 사용자 친화적인 피드백을 제공할 수 있습니다.
  • validateAsync를 활용하면 비동기적으로 검증이 이루어지므로 비동기 환경에서도 활용하기 적합합니다.
  • 구조화된 에러 메시지를 상수화하면 코드의 유지보수성과 재사용성을 높일 수 있습니다.

이 코드는 회원가입 입력값 검증과 관련된 서버의 안정성과 사용자 경험 향상에 큰 기여를 할 수 있다고 생각합니다.


2번째 코드

import Joi from 'joi';
import { MESSAGES } from '../../constants/message.constant.js';

// 조이 오브젝트라는 메서드 이용해서 이메일과 비밀번호를 검증할 스키마를 만든다.
const schema = Joi.object({
  email: Joi.string().email().required().messages({
    'any.required': MESSAGES.AUTH.COMMON.EMAIL.REQUIRED,
    'string.email': MESSAGES.AUTH.COMMON.EMAIL.INVALID_FORMAT,
  }),
  password: Joi.string().required().messages({
    'any.required': MESSAGES.AUTH.COMMON.PASSWORD.REQURIED,
  }),
});

// signInValidator 를 진짜로 실행할 수 있는 벨리데이트 함수를 만들었다.
export const signInValidator = async (req, res, next) => {
  try {
    await schema.validateAsync(req.body);
    next();
  } catch (error) {
    next(error);
  }
};

TIL: Joi를 이용한 로그인 입력값 검증 코드

오늘은 Joi 라이브러리를 사용하여 로그인 요청에서 입력받은 데이터를 검증하는 코드를 작성했습니다. 주요 내용은 아래와 같습니다.


1. Joi 객체를 활용한 스키마 정의

  • 로그인 시 입력받는 이메일비밀번호를 검증하기 위한 스키마를 정의했습니다.
  • 각 필드에 대해 검증 조건과 커스텀 에러 메시지를 설정했습니다.

스키마 세부사항:

  • 이메일 (email)
    • 이메일 형식이어야 하며(string.email), 필수 항목입니다(any.required).
    • 에러 메시지:
      • MESSAGES.AUTH.COMMON.EMAIL.REQUIRED
        (이메일이 입력되지 않은 경우)
      • MESSAGES.AUTH.COMMON.EMAIL.INVALID_FORMAT
        (이메일 형식이 유효하지 않은 경우)
  • 비밀번호 (password)
    • 필수 항목입니다(any.required).
    • 에러 메시지:
      • MESSAGES.AUTH.COMMON.PASSWORD.REQURIED
        (비밀번호가 입력되지 않은 경우)

2. 로그인 검증 함수 signInValidator

  • schema.validateAsync:
    • 요청 본문(req.body) 데이터를 비동기적으로 검증합니다.
    • 검증이 성공하면 next()를 호출해 다음 미들웨어로 넘어갑니다.
    • 검증이 실패하면 error 객체를 next(error)로 전달하여 에러를 처리할 수 있도록 합니다.

배운 점

  • Joi를 활용하면 입력값 검증 로직을 간결하게 작성할 수 있습니다.
  • 커스텀 에러 메시지를 정의하여 사용자가 이해하기 쉬운 피드백을 제공할 수 있습니다.
  • 비동기 검증을 통해 유연하게 미들웨어를 구성할 수 있으며, 코드 가독성과 유지보수성을 크게 향상시킬 수 있습니다.
  • 검증 로직을 모듈화하면 재사용 가능하며, 코드 중복을 줄일 수 있습니다.

이 코드는 로그인 요청 데이터의 유효성을 보장하여 서버의 안정성을 높이고, 사용자 입력값 오류에 대해 명확한 피드백을 제공할 수 있도록 설계되었습니다.

profile
Node.js 7기

0개의 댓글