[python] Peewee에서의 데이터 유효성 검사 방법 비교

Peewee는 Python으로 작성된 간단하고 가벼운 ORM(Object-Relational Mapping) 라이브러리입니다. 데이터 유효성 검사(validation)는 ORM을 사용하는 애플리케이션에서 매우 중요한 요소 중 하나입니다. 이번 기사에서는 Peewee에서 데이터 유효성 검사를 어떻게 수행할 수 있는지에 대해 비교해 보겠습니다.

1. 필드 유효성 검사 (Field Validation)

Peewee에서 필드 유효성 검사를 수행하는 가장 일반적인 방법은 해당 필드에 대한 제약 조건을 설정하는 것입니다. 예를 들어, 문자열 필드에 대해 최대 길이를 지정하거나, 숫자 필드의 범위를 제한할 수 있습니다.

from peewee import *

db = SqliteDatabase('my_database.db')

class Person(Model):
    name = CharField(max_length=50)  # 최대 길이 50
    age = IntegerField(minimum=0, maximum=150)  # 범위 0-150 사이

    class Meta:
        database = db

위의 예시에서 name 필드는 최대 50글자까지 허용되고, age 필드는 0에서 150 사이의 값을 허용합니다.

2. 모델 유효성 검사 (Model Validation)

Peewee는 모델 또는 레코드 자체에 대한 유효성 검사를 수행하는 기능도 제공합니다. 이를 통해 여러 필드의 상호 의존성을 검사하거나, 특정 필드 조건을 확인할 수 있습니다.

from peewee import *

db = SqliteDatabase('my_database.db')

class Person(Model):
    name = CharField(max_length=50)
    age = IntegerField()

    def validate(self):
        if self.age < 0 or self.age > 150:
            raise ValueError("나이는 0에서 150 사이여야 합니다.")

    class Meta:
        database = db

위의 예시에서 validate 메서드를 사용하여 Person 모델의 유효성을 검사합니다. 나이(age)가 0보다 작거나 150보다 큰 경우 ValueError 예외를 발생시킵니다.

3. 커스텀 유효성 검사 (Custom Validation)

Peewee를 사용하여 커스텀한 유효성 검사를 수행할 수도 있습니다. 이 경우, 필드나 모델 클래스를 서브클래싱(subclassing)하여 사용자 정의 검사 메서드를 추가해야 합니다.

from peewee import *

db = SqliteDatabase('my_database.db')

class Person(Model):
    name = CharField(max_length=50)
    age = IntegerField()

    def validate(self):
        self.validate_name()

    def validate_name(self):
        if not self.name.isalpha():
            raise ValueError("이름은 알파벳 문자만 포함해야 합니다.")

    class Meta:
        database = db

위의 예시에서 validate_name 메서드를 사용하여 name 필드의 유효성을 검사합니다. 이름이 알파벳 문자로만 구성되지 않으면 ValueError 예외가 발생합니다.

결론

Peewee에서 데이터 유효성 검사는 필드 제약 조건, 모델 유효성 메서드, 커스텀 유효성 검사와 같은 다양한 방법을 통해 수행할 수 있습니다. 애플리케이션의 요구 사항에 따라 적절한 방법을 선택하여 데이터의 무결성을 보장할 수 있습니다.