피드로 돌아가기
Stop reimplementing file uploads for your Python ASGI app. Meet tussi.
Dev.toDev.to
Backend

DB 없이 posix_fallocate와 flock으로 구현한 ASGI 기반 TUS 업로드 서버

Stop reimplementing file uploads for your Python ASGI app. Meet tussi.

Thomas Bartscherer2026년 5월 14일3intermediate

Context

대용량 파일 업로드 시 네트워크 단절 대응을 위한 Resumable Upload 필요성 증대. 기존 Python TUS 구현체들은 DB 의존성, 별도 데몬 프로세스 요구, Multi-worker 환경의 동시성 제어 부족으로 인해 도입 비용이 높은 한계점 존재.

Technical Solution

  • TUS 1.0.0 프로토콜을 ASGI-native하게 구현하여 프레임워크 종속성 제거
  • DB 대신 FilesystemStorage를 채택하여 상태 관리 오버헤드 최소화
  • posix_fallocate를 통한 디스크 공간 사전 할당으로 업로드 중 Disk Full 에러 방지
  • fcntl.flock 기반의 배타적 잠금 메커니즘을 적용하여 Multi-worker 환경의 데이터 무결성 보장
  • async context manager 기반의 wait_for_file 인터페이스로 완료된 파일의 안전한 Claim 및 처리 구조 설계
  • Event hook 시스템을 도입하여 UploadCreated, Completed 등 상태 변화에 따른 비동기 후처리 가능 구조 구축

1. 대용량 파일 업로드 설계 시 TUS 프로토콜 도입 검토

2. Multi-worker 환경에서 파일 쓰기 작업 시 fcntl.flock 등 OS 레벨 잠금 기법 적용 여부 확인

3. 디스크 공간 부족으로 인한 런타임 에러 방지를 위해 pre-allocation 전략 고려

4. 특정 프레임워크에 종속되지 않는 ASGI-native 미들웨어 구조 설계 검토

원문 읽기