피드로 돌아가기
Dev.toBackend
원문 읽기
DB 없이 posix_fallocate와 flock으로 구현한 ASGI 기반 TUS 업로드 서버
Stop reimplementing file uploads for your Python ASGI app. Meet tussi.
AI 요약
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 미들웨어 구조 설계 검토