본문 바로가기
python

FastAPI에서 UploadFile 타입 검증 시 isinstance()가 동작하지 않는 문제

by 니나노뭉 2025. 3. 31.

✅ 문제 발생

개발 중 fastapi UploadFile 타입으로 받은 파일 데이터를 다루는 부분이있었다.
그곳에서 type을 확인 해야되는 일이 생겼는데 isinstance가 작동하지 않는 문제가 발생했다.

디버깅을 위해 type을 찍어보니 starlette.datastructures.UploadFile이라고 나온다.

 


🔍 원인 분석(chat gpt)

  1. FastAPI와 Starlette의 UploadFile 참조 차이
    •   fastapi.UploadFile은 사실 starlette.datastructures.UploadFile의 **별칭(alias)**일 뿐, 직접 정의된 클래스가 아님.
    •  실행 환경에 따라 fastapi.UploadFile과 starlette.datastructures.UploadFile이 서로 다른 객체로 인식될 가능성이 있음.
    •  즉, isinstance()가 예상대로 동작하지 않을 수 있음.
  2. 모듈 import 방식 차이
    •  Python에서는 같은 이름의 클래스라도 import 경로가 다르면 다른 객체로 인식됨.
    •  fastapi.UploadFile과 starlette.datastructures.UploadFile이 다르게 취급되면서 isinstance() 검사가 실패할 가능성이 있음.

from fastapi import FastAPI, UploadFile


app = FastAPI()

@app.post("/upload")
async def upload_file(file: UploadFile):
	return isinstance(file, UploadFile)  # False

 

그 말인즉 해당 객체가 직접적으로 해당 클래스의 인스턴스가 아니라, 
FastAPI 내부적으로 wrapping 되어 있어서 발생한다는 이야기다.

그래서 starlette에서 UploadFile을 직접 import 하였다.

 

from fastapi import FastAPI
from starlette.datastructures import UploadFile


app = FastAPI()

@app.post("/upload")
async def upload_file(file: UploadFile):
	return isinstance(file, UploadFile)  # True