Golang의 유효성 검사 라이브러리 탐색
Min-jun Kim
Dev Intern · Leapcell

Key Takeaways
validator
라이브러리는 간결하고 효율적인 유효성 검사를 위해 struct 태그를 사용합니다.ozzo-validation
라이브러리는 유연한 코드 기반 유효성 검사 접근 방식을 제공합니다.- 둘 중 하나를 선택하는 것은 프로젝트 복잡성과 유효성 검사 요구 사항에 따라 달라집니다.
데이터 유효성 검사는 소프트웨어 개발의 중요한 측면으로, 입력 데이터가 처리 전에 필요한 표준을 충족하는지 확인합니다. Go 프로그래밍 언어에서는 여러 라이브러리가 이 프로세스를 용이하게 하며, validator
와 ozzo-validation
이 가장 두드러집니다. 이 기사에서는 이러한 라이브러리의 기능, 사용법 및 차이점을 자세히 살펴봅니다.
validator
라이브러리
Go Playground 커뮤니티에서 개발한 validator
라이브러리는 Go에서 struct 필드 유효성 검사를 위한 널리 채택된 솔루션입니다. struct 태그를 사용하여 유효성 검사 규칙을 정의하여 코드를 간결하고 읽기 쉽게 만듭니다.
설치
validator
를 프로젝트에 통합하려면 다음 명령을 사용하십시오.
go get github.com/go-playground/validator/v10
기본 사용법
적절한 유효성 검사 태그로 struct를 정의합니다.
package main import ( "fmt" "github.com/go-playground/validator/v10" ) type User struct { Name string `validate:"required,min=3,max=32"` Email string `validate:"required,email"` Age int `validate:"gte=18,lte=100"` } func main() { validate := validator.New() user := &User{ Name: "Alice", Email: "alice@example.com", Age: 30, } err := validate.Struct(user) if err != nil { fmt.Println("Validation errors:", err) } else { fmt.Println("Validation passed!") } }
이 예제에서 User
struct는 struct 태그를 사용하여 지정된 유효성 검사 규칙이 있는 세 개의 필드를 가집니다.
Name
: 반드시 존재해야 하며(required
), 길이는 3~32자 사이여야 합니다.Email
: 반드시 존재해야 하며 유효한 이메일 형식을 따라야 합니다.Age
: 18세에서 100세 사이여야 합니다(포함).
일반적인 유효성 검사 태그
validator
라이브러리는 포괄적인 유효성 검사 태그 세트를 제공합니다.
required
: 필드가 비어 있지 않도록 합니다.len
: 문자열, 슬라이스, 배열 또는 맵의 정확한 길이를 지정합니다.min
및max
: 숫자 또는 문자열, 슬라이스, 배열 또는 맵의 길이에 대한 최소값 및 최대값을 정의합니다.eq
및ne
: 필드가 지정된 값과 같거나 같지 않음을 어설션합니다.lt
,lte
,gt
,gte
: 각각 보다 작음, 작거나 같음, 보다 큼, 크거나 같음 비교를 나타냅니다.oneof
: 필드가 지정된 값 중 하나와 일치하는지 확인합니다.
유효성 검사 태그 및 해당 사용법에 대한 포괄적인 목록은 공식 설명서를 참조하십시오.
사용자 정의 유효성 검사 함수
기본 제공 태그 외에도 validator
를 사용하면 사용자 정의 유효성 검사 함수를 만들 수 있습니다. 예를 들어 문자열이 "Go"로 시작하는지 확인하려면:
func startsWithGo(fl validator.FieldLevel) bool { return strings.HasPrefix(fl.Field().String(), "Go") } func main() { validate := validator.New() validate.RegisterValidation("startsWithGo", startsWithGo) type Language struct { Name string `validate:"startsWithGo"` } lang := &Language{Name: "Golang"} err := validate.Struct(lang) if err != nil { fmt.Println("Validation errors:", err) } else { fmt.Println("Validation passed!") } }
이 스니펫에서 사용자 정의 유효성 검사 함수 startsWithGo
는 Name
필드가 "Go"로 시작하는지 확인합니다.
ozzo-validation
라이브러리
Go 생태계의 또 다른 강력한 유효성 검사 라이브러리는 ozzo-validation
입니다. struct 태그에 의존하는 validator
와 달리 ozzo-validation
은 코드를 사용하여 유효성 검사 규칙을 정의하여 더 큰 유연성과 제어 기능을 제공합니다.
설치
ozzo-validation
을 프로젝트에 추가하려면 다음을 실행하십시오.
go get github.com/go-ozzo/ozzo-validation/v4
기본 사용법
다음은 ozzo-validation
을 사용하여 struct를 정의하고 유효성을 검사하는 방법입니다.
package main import ( "fmt" "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is" ) type User struct { Name string Email string Age int } func (u User) Validate() error { return validation.ValidateStruct(&u, validation.Field(&u.Name, validation.Required, validation.Length(3, 32)), validation.Field(&u.Email, validation.Required, is.Email), validation.Field(&u.Age, validation.Min(18), validation.Max(100)), ) } func main() { user := User{ Name: "Alice", Email: "alice@example.com", Age: 30, } err := user.Validate() if err != nil { fmt.Println("Validation errors:", err) } else { fmt.Println("Validation passed!") } }
이 접근 방식에서 User
struct는 validation
패키지의 함수를 사용하여 유효성 검사 규칙을 지정하는 Validate
메서드를 가집니다.
주요 기능
- Fluent API: 유효성 검사 규칙은 읽기 쉬운 fluent 인터페이스를 사용하여 정의됩니다.
- 조건부 유효성 검사: 다른 필드 값을 기반으로 조건부 유효성 검사 규칙을 지원합니다.
- 사용자 정의 유효성 검사기: 특정 요구 사항에 맞는 사용자 정의 유효성 검사 규칙을 만들 수 있습니다.
validator
와 ozzo-validation
중에서 선택
두 라이브러리 모두 Go에서 데이터 유효성 검사를 위한 강력한 도구이지만 접근 방식이 다릅니다.
validator
: 유효성 검사 규칙에 struct 태그를 활용하여 간결한 코드를 만듭니다. 널리 사용되며 Gin과 같은 프레임워크와 원활하게 통합됩니다. 그러나 복잡한 유효성 검사 논리는 struct 태그만으로는 번거로워질 수 있습니다.ozzo-validation
: 코드를 사용하여 유효성 검사 규칙을 정의하여 특히 복잡한 유효성 검사 시나리오에서 더 큰 유연성과 명확성을 제공합니다. 이 접근 방식은 컴파일 시간 검사의 이점을 누리고 잘못 구성된 태그로 인한 자동 오류 가능성을 줄입니다.
둘 중 하나를 선택하는 것은 프로젝트 요구 사항에 따라 달라집니다.
- 최소한의 논리로 간단한 유효성 검사의 경우
validator
는 깔끔하고 효율적인 솔루션을 제공합니다. - 조건부 논리 또는 사용자 정의 규칙이 필요한 복잡한 유효성 검사의 경우
ozzo-validation
이 더 적합할 수 있습니다.
결론
데이터 유효성 검사는 소프트웨어 애플리케이션의 무결성과 안정성을 보장하는 데 필수적입니다. Go의 생태계는 이 프로세스를 용이하게 하기 위해 validator
및 ozzo-validation
과 같은 강력한 라이브러리를 제공합니다. 해당 기능과 차이점을 이해하면 개발자가 특정 사용 사례에 가장 적합한 도구를 선택하여 유지 관리 가능하고 오류 없는 코드베이스를 만들 수 있습니다.
FAQs
validator
는 struct 태그를 사용하는 반면 ozzo-validation
은 코드에서 규칙을 정의합니다.
예, 기능을 확장하기 위해 사용자 정의 유효성 검사 함수를 허용합니다.
ozzo-validation
은 복잡하고 조건부 유효성 검사 규칙에 더 적합합니다.
Go 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하세요.
무제한 프로젝트를 무료로 배포하세요
- 사용량에 대해서만 비용을 지불하고 요청이나 요금은 없습니다.
탁월한 비용 효율성
- 유휴 요금 없이 사용한 만큼 지불하세요.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅
간편한 확장성과 뛰어난 성능
- 자동 확장을 통해 높은 동시성을 쉽게 처리합니다.
- 운영 오버헤드가 없으므로 구축에만 집중하세요.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ