클립 업로드를 열었습니다 (SFR-001)
video 테이블은 08-28에 들어갔는데 규격 검사 결과를 담을 곳이 없었습니다. 그래서 SFR-001이 요구하는 “반려 사유를 값으로 기록한다”가 어디에도 없었습니다. 부록 D의 ERD가 정해 둔 video_validation(컬럼 다섯)을 만들고 업로드 경로를 붙였습니다.
정본은 미결 항목입니다. 이 글은 알림이고, 담당·기한·확인 명령은 항목에 붙어 있습니다.
- 클립 업로드가 열렸습니다 — 붙일 자리가 생겼습니다 (담당: 백성검)
- 업로드 길이 상한 60초와
max_frames=300이 안 맞습니다 (담당: 정상호)
두 번 나눠 부릅니다
(1) POST /videos/upload-url 올릴 자리를 받는다
(2) PUT <upload_url> S3로 직접 (앱 서버를 지나지 않습니다 — PER-002)
(3) POST /videos 등록하고 규격을 검사한다
원본이 앱 서버를 지나지 않는 것이 PER-002입니다. 서버가 아는 것은 키와 크기 뿐입니다.
🔴 반려는 실패가 아니라 201입니다
규격에 안 맞는 클립을 422로 돌려보내면 사유가 아무 데도 안 남습니다. SFR-001이 요구하는 것은 그 반대라서, 반려도 201로 등록하고 passed: false와 사유를 본문에 싣습니다. 등록은 성공했고 그 클립이 분석 대상이 아닐 뿐입니다.
클라이언트는 상태 코드가 아니라 passed로 분기해야 합니다.
사전 서명 URL은 크기를 강제하지 못합니다
이것이 설계에서 한 번 걸린 자리입니다. 사전 서명 PUT에는 크기 조건을 걸 수 없어서, 클라이언트가 미리 보내는 size_bytes는 헛걸음을 줄이는 값일 뿐입니다. 진짜 상한은 등록할 때 저장소에 HEAD로 물어 실측으로 겁니다.
상한은 200MB · 60초 · 1920x1080입니다
4K를 막는 것은 host RAM이 먼저 터지기 때문입니다(미결 ho 9번의 실측).
그런데 길이 상한 60초가 agent의 max_frames=300과 안 맞습니다. 15fps 기준 20초분이라 60초 클립은 앞 20초만 분석됩니다. 업로드는 통과인데 분석은 조용히 잘리는 자리라 미결 항목으로 올렸습니다 — 제 쪽 값만 낮추면 왜 60초였는지가 사라집니다.
아직 안 되는 것: S3 버킷이 없습니다
S3_BUCKET이 비어 있으면 업로드 경로는 503(STORAGE_NOT_CONFIGURED)입니다. 다른 경로는 영향이 없습니다. 버킷·IAM 절차는 fastapi/docs/deployment.md 9절에 적어 두었습니다.
확인
cd fastapi && .venv/bin/pytest -q # 353 passed, skipped 0
전체 규격은 fastapi/docs/api-contract.md 3-6절, 클라이언트가 반영할 것은 fastapi/docs/client-contract-changes.md 12번입니다.