[C# NuGet] C# 유효성 검증 FluentValidation NuGet 사용 방법

참조


소개

  • DDD(도메인 주도 설계) 학습을 통해 유효성 체크는 매우 기본이면서 중요하다는 점을 알게 되었습니다.
  • C# 에서 FluentValidation NuGet을 이용하여 유효성 체크를 보다 유연하고 정확하게 할 수 있다는 정보를 알게 되었습니다.
  • FluentValidation NuGet에 대해 간단히 정리해 보았습니다.

FluentValidation NuGet 이란?

  • FluentValidation은 강력한 형식의 유효성 검사 규칙을 빌드하기 위한 .NET 라이브러리 입니다.
  • Fluent 인터페이스와 람다식을 사용하여 유효성 검사 규칙을 제공합니다.
  • 유효성 검사 규칙은 깨끗한 도메인 코드를 유지 관리하고 더 통합하는데 도움이 됩니다.
  • 또한, 검증 로직을 찾을 수 있는 위치를 제공합니다.

FluentValidation 특징

  • FluentValidation에는 null 검사, 빈 문자열 유효성 검사, 최대 길이 및 최소 길이와 같은 수 많은 기본 제공 유효성 검사가 있습니다.
  • 또한, 속성 이름을 기반으로 유효성 검사 메시지를 사용자가 지정하고 현지화, 비동기 유효성 검사 등을 기반으로 메시지를 제공하는 사용자 지정 유효성 검사도 지원합니다.

FluentValidation 설치 방법

  • FluentValidation NuGet Package 설치 방법은 다음과 같습니다.

명령어 설치

Install-Package FluentValidation

Visual Studio 설치

  • 도구 -> NuGet 패키지 관리자 -> 솔루션용 NuGet 패키지 관리 옵션에 들어가 FluentValidation 입력 후, NuGet을 설치 진행합니다.


첫 번째 유효성 검사기 만들기

  • 앞서 FluentValidation NuGet Package를 설치 하였습니다.
  • FluentValidation 을 이용하여 첫 번째 유효성 검사기를 만들어 보도록 하겠습니다.
  • 특정 개체에 대한 유효성 검사 규칙 집합을 정의하려면 AbstractValidation<T> 에서 상속하는 클래스를 생성해야 합니다.
  • 여기서 T 는 유효성을 검사하려는 클래스 유형입니다.
  • 예를들어 Customer 클래스가 있다고 가정합니다.
public class Customer 
{
  public int Id { get; set; }
  public string Surname { get; set; }
  public string Forename { get; set; }
  public decimal Discount { get; set; }
  public string Address { get; set; }
}

  • AbstractValidator<Customer> 상속받아 해당 클래스에 대한 유효성 검사 규칙 집합을 정의합니다.
  • 유효성 검사 규칙 자체는 유효성 검사기 클래스의 생성자에 정의되어야 합니다.
  • 특정 속성에 대한 유효성 검사 규칙을 지정하려면 유효성 RuleFor 람다식을 이용하여 메서드를 호출합니다.
  • 예를들어 Surname 속성이 null이 아닌지 확인하기 위해 유효성 검사기 클래스는 아래와 같습니다.
using FluentValidation;

public class CustomerValidator : AbstractValidator<Customer>
{
  public CustomerValidator()
  {
    RuleFor(customer => customer.Surname).NotNull();
  }
}

  • 유효성 검사기를 실행하려면 유효성 검사기 객체를 인스턴스화 하고 Validate 메서드를 호출하여 유효성 검사할 객체를 전달합니다.
Customer customer = new Customer();
CustomerValidator validator = new CustomerValidator();

ValidationResult result = validator.Validate(customer);
  • Validate 메서드는 ValidationResult 객체를 반환합니다. 여기에는 두 가지 속성이 포함됩니다.
    • IsValid : 유효성 검사가 성공했는지 여부를 나타내는 속성
    • Errors - 유효성 검사 실패에 대한 세부 정보를 포함하는 ValidationFailure 객체 컬렉션 입니다.

FluentValidation 예제 코드

  • 위에서 작성한 내용의 전체 소스코드입니다.
using FluentValidation;
using FluentValidation.Results;
using System;

namespace interfaceTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Customer customer = new Customer();
            CustomerValidator validator = new CustomerValidator();

            ValidationResult results = validator.Validate(customer);

            if (!results.IsValid)
            {
                foreach (var failure in results.Errors)
                {
                    Console.WriteLine("Property " + failure.PropertyName + " failed validation. Error was: " + failure.ErrorMessage);
                }
            }
        }
    }

    public class CustomerValidator : AbstractValidator<Customer>
    {
        public CustomerValidator()
        {
            RuleFor(customer => customer.Surname).NotNull();
        }
    }

    public class Customer
    {
        public int Id { get; set; }
        public string Surname { get; set; }
        public string Forename { get; set; }
        public decimal Discount { get; set; }
        public string Address { get; set; }
    }
}

실행 결과

  • 현재 Customer 객체의 속성인 Surname 이 아무것도 입력되지 않았기 때문에 유효성 검사에서 위배되었고 다음과 같이 에러 메시지가 출력된 것을 확인할 수 있습니다.
Property Surname failed validation. Error was: 'Surname'은(는) 반드시 입력해야 합니다.

정리

  • FluentValidation NuGet Package를 이용하여 보다 유연하고 정확한 유효성 검증을 진행할 수 있습니다.
  • FluentValidation 가이드 해당 링크를 통해 보다 자세한 내용이 있으니 참고하면 좋을 듯 합니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY