Python Pydantic에 대해서
서론
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가 조금 더 개발하기 편하다는 느낌이 들었다.