소개
파이썬의 Cerberus 모듈은 강력하면서도 가볍고 유연한 데이터 검증(Validation) 기능을 제공하는 라이브러리입니다. 다양한 애플리케이션과 커스텀 검증 규칙으로 손쉽게 확장할 수 있도록 설계되어 있어, 소규모 프로젝트부터 대규모 데이터 파이프라인까지 폭넓게 활용할 수 있습니다.
Cerberus의 핵심 작동 방식은 간단합니다. 먼저 스키마(Schema)를 정의한 뒤, 검증하고자 하는 데이터를 해당 스키마와 비교하여 조건에 부합하는지 확인합니다. 만약 조건을 충족하지 못하면, 어느 필드에서 어떤 문제가 발생했는지 정확한 오류 메시지를 통해 알려줍니다.
또한 하나의 데이터 필드에 여러 개의 검증 조건을 동시에 적용할 수 있어, 타입 검사뿐 아니라 길이 제한, 값 범위, 필수 여부 등 복합적인 규칙도 손쉽게 처리할 수 있습니다.
시작하기: Cerberus 설치 및 임포트
Cerberus는 파이썬에 기본 포함되어 있지 않으므로, 사용 전에 반드시 설치해야 합니다. pip 패키지 관리자를 이용해 간단히 설치할 수 있습니다.
터미널을 열고 아래 명령어를 실행하세요.
pip install Cerberus
설치가 완료되면 파이썬 스크립트에서 Validator 모듈을 임포트합니다.
from cerberus import Validator
이것으로 준비는 끝입니다. 바로 데이터 검증을 시작할 수 있습니다.
딕셔너리 데이터 검증하기
먼저 검증의 기준이 될 스키마를 생성해야 합니다.
schema = {'numbers': {'type': 'integer'}}
v = Validator(schema)위 코드는 파이썬 딕셔너리에서 'numbers' 필드에는 반드시 정수(integer)만 들어가야 한다는 규칙을 의미합니다.
이제 검증할 데이터를 준비합니다.
data = {'numbers': 5}준비된 데이터를 앞서 만든 스키마로 검증하는 코드는 다음과 같습니다.
if v.validate(data):
print("데이터가 유효합니다")
else:
print("데이터가 유효하지 않습니다")
전체 예제 코드
from cerberus import Validator
schema = {'numbers': {'type': 'integer'}}
v = Validator(schema)
data = {'numbers': 5}
if v.validate(data):
print("Data is valid")
else:
print("Data is invalid")
실행 결과
Data is valid
'numbers' 필드의 값 5가 정수이므로 검증을 통과했습니다.
다양한 규칙 적용 및 오류 메시지 출력하기
Cerberus는 단순 타입 검사 외에도 required(필수 여부) 같은 다양한 규칙을 지원합니다. 검증에 실패하면 v.errors를 통해 구체적인 오류 내용을 확인할 수 있습니다.
from cerberus import Validator
v = Validator()
v.schema = {'ID': {'required': True, 'type': 'number'},
'age': {'type': 'integer'}}
if v.validate({'age': 60}):
print('Data is valid')
else:
print('Data is invalid')
print(v.errors)
실행 결과
Data is invalid
{'ID': ['required field']}
'ID' 필드는 필수(required)로 지정되었지만 입력 데이터에 존재하지 않기 때문에 검증에 실패하고, 그 사실이 오류 메시지로 출력됩니다.
최솟값과 최댓값 범위 설정하기
문자열 길이나 숫자 값의 허용 범위도 지정할 수 있습니다. 문자열에는 minlength/maxlength, 숫자에는 min/max 규칙을 사용합니다.
from cerberus import Validator
v = Validator()
v.schema = {'name': {'type': 'string', 'minlength': 5},
'age': {'type': 'integer', 'min': 18, 'max': 65}}
if v.validate({'name': 'VJ', 'age': 16}):
print('Data is valid')
else:
print('Data is invalid')
print(v.errors)
실행 결과
Data is invalid
{'age': ['min value is 18'], 'name': ['min length is 5']}
이 예제에서는 두 가지 오류가 동시에 감지되었습니다. 이름 'VJ'는 최소 길이 5자 미만이고, 나이 16은 최솟값 18보다 작기 때문입니다. 이처럼 여러 필드의 오류를 한 번에 확인할 수 있는 것도 Cerberus의 장점입니다.
같은 방식으로 딕셔너리, JSON 파일 등 다양한 형태의 데이터를 자유롭게 검증할 수 있습니다.
마무리
이번 가이드에서는 Cerberus 라이브러리를 사용해 직접 만든 커스텀 스키마로 데이터를 검증하는 방법을 배웠습니다.
이 방법을 활용하면 JSON 파일, API로부터 받아온 응답 데이터 등 실무에서 접하는 거의 모든 데이터를 체계적으로 검증할 수 있습니다. 데이터 검증은 데이터베이스 구축 시 오류를 사전에 방지하고, 데이터 분석 작업의 신뢰성을 높이는 데 필수적인 과정입니다.
나아가 데이터 검증 과정을 자동화하면, 잘못된 데이터가 시스템에 유입되는 것을 막는 동적 웹사이트나 백엔드 API를 더욱 견고하게 구축할 수 있습니다.