pydantic - BaseModel 사용 시 int로 설정 후 큰값을 넣으면 ex)660273741208465277 JSON으로 변환하는 과정에서 660273741208465300으로 반올림되면서 들어가짐
원인:
Pydantic의 BaseModel은 기본적으로 Python의 int 타입을 사용하지만, JSON으로 변환할 때 JavaScript의 Number 타입으로 변환되며, 이 타입은 2^53 - 1 (즉, 9007199254740991) 이상의 정수를 정확하게 표현할 수 없기 때문에 큰 정수가 손실되거나 반올림되는 문제가 발생함.
해결 방법:
큰 정수를 처리하기 위해 Pydantic의 BaseModel에서 Decimal 타입을 사용하거나, JSON 변환 시 json.dumps()의 default 인자를 사용하여 사용자 정의 직렬화 함수를 제공하여 큰 정수를 문자열로 변환하도록 설정할 수 있음.
예를 들어, from decimal import Decimal을 사용하여 모델 필드를 Decimal로 정의하거나, JSON 변환 시 json.dumps(obj, default=str)를 사용하여 모든 객체를 문자열로 변환할 수 있음.