서론

    FastAPI를 사용하다보면 Pydantic을 이용해 커스텀 class를 정의해야 할 일이 생긴다.

    아래는 Pydantic의 BaseModel class를 상속한 CorrectionRequest class를 정의하는 모습이다.
    실제 맞춤법 검사기에서 사용하는 클래스이다.

    class CorrectionRequest(BaseModel):
        text: str
        correction: str
        memo: str
        recaptcha_response: str

    그러면 Pydantic은 무엇이고 왜 사용하는 걸까?

     

    본론

    Pydantic의 공식 Docs의 서문을 인용하겠다.

    Pydantic is the most widely used data validation library for Python.

    Pydantic은 데이터 검증 라이브러리이다.
    즉 데이터를 담은 객체에 정한대로 데이터가 잘 정의되어 있는지 검사하는 라이브러리다.

    BaseModel을 상속한 class를 이용해 object를 하나 정의한다.

    request = CorrectionRequest(
        text='abcd',
        correction='abdc',
        memo='test',
        recaptcha_response='token'
    )

    이 때 데이터의 Type이나 Missing(누락) 등을 검사해주는 역할, JSON scheme로 변환해주는 역할 등을 담당하는 것이 Pydantic이다.

    try:
        request = CorrectionRequest(
            text='abcd',
            correction='abdc',
        )
    except ValidationError as e:
        println(e)

    다음 코드에서는 ValidationError로 memo field와 recaptcha_response field가 누락되었다는 메세지가 뜬다.
    타입에러도 ValidationError가 발생한다.

    결론

    FastAPI를 사용하다 보면 Pydantic을 많이 사용하게 된다.
    Serializer를 정의해 DB 쿼리까지 한 큐에 진행되는 Django Rest Framework와 다르게 Pydantic과 FastAPI는 데이터를 DB에 쿼리하는 부분은 직접 코드를 작성해줘야 한다.

    하지만 Django Rest Framework와 FastAPI를 모두 사용해 본 입장으로 자유도가 높은 FastAPI가 조금 더 개발하기 편하다는 느낌이 들었다.

    Posted by dalbodeule