콘텐츠로 이동

MSG-351 업로드 확정 전 하이라이트 선분석 API

티켓: MSG-351 · 작성일: 2026-08-10 · 작성: prd-writer 상태: 검토됨 (2026-08-10 성민 승인)

1. 문제 상황

업로드 위저드의 "AI 하이라이트 추천" 단계(디자인 웹 ver 9, 4단계 중 2단계)는 사용자가 영상을 확정하기 전에 추천 구간을 보여주고 고르게 하는 화면이다. 그런데 현재 파이프라인에서 하이라이트는 업로드 확정 뒤 블러 파이프라인[^1] 안에서만 계산된다. READY까지 웜 기준 약 4분이 걸리는데, 그 대부분은 하이라이트가 아니라 얼굴과 번호판 블러 추론이다. 하이라이트 계산만 떼면 30초 1080p 영상 기준 실측 3~5초다.

시점 말고 대상도 어긋난다. 디자인의 트리머[^2]는 30초 넘는 원본에서 올릴 구간을 고르는 용도인데, 서버는 이미 30초 이하로 잘린 확정본만 본다. 원본의 하이라이트는 지금 아무도 계산하지 않는다. 그래서 FE 추천 화면(MSG-303)은 mock 데이터로만 동작한다.

참고로 팀 위키 IA 문서에는 이 단계가 "미구현, MVP 여부 결정 필요"로 남아 있었다. 디자인 ver 9에 화면이 확정 반영됐고 이 PRD가 그 결정(MVP 편입)을 명문화한다.

2. 목적 · 목표

  • 목적: 업로드 위저드 안에서 사용자가 몇 초만 기다리면 AI 추천 구간을 받게 한다. 추천이 확정 후에야 나오는 지금 구조로는 위저드 화면 자체가 성립하지 않는다.
  • 목표:
  • 업로드 확정 전의 원본 영상(30초 초과 가능)에 대해 하이라이트 구간을 요청하고 받을 수 있다
  • 30초 1080p 원본 기준 요청부터 결과까지 수 초 안에 끝난다 (하이라이트 단계 실측 3~5초 근거)
  • 구간 출력이 FE의 영상 길이별 노출 티어를 지탱한다 (구간 최소 길이, 시작점 간격)
  • 비목표(스코프 제외):
  • 블러 처리는 지금처럼 업로드 확정 후 파이프라인에 남는다. 선분석은 하이라이트만 계산한다
  • 선분석 결과를 저장하거나 확정 업로드와 연결하지 않는다. 위저드가 소비하고 버리는 임시 결과다 (확정본의 하이라이트는 기존 파이프라인이 따로 계산해 저장하고, MSG-350이 노출한다)
  • 영상 길이별 카드 노출 개수(5초 이하 스킵, 5~10초 밴드만, 10~15초 2개, 15초 이상 3개)는 FE 정책이다. 서버는 계산된 구간을 전부 내려준다
  • 구간별 추천 사유 라벨은 만들지 않는다 (MSG-350 PRD에서 확정된 제외 사항 유지)

3. 기능 요구사항

ID 요구사항 우선순위
FR-1 인증된 사용자는 업로드 확정 전 원본 영상에 대해 하이라이트 추천을 요청할 수 있다 Must
FR-2 응답은 [[시작초, 끝초], ...] 최대 3구간, 초는 소수점 둘째 자리, 배열 순서는 추천 우선순위다 (MSG-350과 동일 표현 규약) Must
FR-3 각 구간은 최소 5초 길이이고, 구간 시작점끼리 5초 이상 벌어진다. 영상이 짧아 이 조건으로 3구간을 못 채우면 개수를 줄여 반환한다 (후보끼리 절반 이상 겹치면 선택이 무의미해진다는 FE 티어 근거) Must
FR-4 5초 미만 영상은 빈 결과를 반환한다 (AI 현행 경계 duration >= 5와 정합. FE는 이 경우 추천 단계를 스킵) Must
FR-5 원본이 1080p를 넘으면 다운스케일[^3] 후 분석한다 (4K 직분석은 실측 약 31초라 지연 목표가 무너진다) Must
FR-6 선분석이 실패해도(AI 서버 다운, 분석 오류) 위저드는 진행 가능해야 한다. FE가 직접 구간 지정으로 폴백할 수 있게 실패 응답 계약을 명시한다 Must
FR-7 블러 잡이 처리 중인 시간대에도 선분석 지연 목표가 유지된다 (현재 AI 워커 1개의 큐 뒤에 줄 세우면 수 초 목표가 수 분이 된다) Must
FR-8 서버는 3분 초과 원본의 선분석 요청을 거부한다. 1차 차단은 FE가 갤러리 선택 단계에서 하지만(3분 초과 원본은 선택 불가), 서버 검증이 방어선이다 Must

4. 비기능 요구사항

분류 요구사항
성능 30초 1080p 원본 기준 요청부터 결과까지 p50 5초 내외, p95 10초 안. 분석 시간은 원본 길이에 비례하므로 상한(3분) 원본은 최대 20~30초까지 허용한다. 근거 실측: 하이라이트 단계 2.9~4.7초(EC2 2코어), YOLO 모델 로드 불요라 콜드 페널티 없음
보안/인가 기존 JWT 인증 필수. AI 서버는 지금처럼 공개 인터넷에 노출하지 않는다 (현행 BE와 AI의 내부 통신 구조 유지)
운영 선분석용 임시 파일(원본, 잡 디렉터리)은 자동 정리된다. S3 pending 경로를 재사용하면 기존 1일 만료 라이프사이클(MSG-133)에 편승 가능
데이터 정합 선분석 결과와 확정본의 저장 하이라이트는 서로 독립이다. 사용자가 원본을 잘라 올리면 확정본 기준으로 파이프라인이 다시 계산하므로 두 값이 달라도 정상이다

5. 시퀀스 다이어그램

전달 경로(원본이 AI에 도달하는 방법)는 스펙 결정 사항이라 중립으로 그린다.

시퀀스 다이어그램
시퀀스 다이어그램

6. 클래스 다이어그램

전달 경로와 동기·폴링이 스펙에서 정해진 뒤에야 타입이 확정되므로 이 PRD에서는 그리지 않는다.

7. 변경 파일 목록

두 레포에 걸치며, AI 몫은 MSG-353으로 분리됐다 (미해결 질문 절 결정 기록 참조). 아래는 리서치 기반 예상 지점이고 확정은 스펙 몫이다.

파일 변경 담당 티켓
server.py 하이라이트 전용 잡 타입 또는 엔드포인트 신설, 워커 경합 해결 MSG-353 (FillMap-AI)
bench.py (detect_highlights) FR-3 구간 품질 보정 반영 MSG-353 (FillMap-AI)
src/main/java/com/msg/fillmap/video/... 선분석 요청 API (컨트롤러·서비스·AiClient 확장), 3분 상한 검증 MSG-351 (BE)

8. 미해결 질문

없음 (2026-08-10 성민 확인으로 모두 해소). 결정 기록:

  • [x] 원본 길이 상한 = 3분: 1차 차단은 FE다. 갤러리 선택 단계에서 3분 초과 원본을 선택할 수 없게 막는다 (FE 몫, FE 레포에 공유 필요). 서버는 같은 상한을 방어선으로 검증한다 (FR-8). 상한 안에서도 분석 시간이 길이에 비례하므로 성능 요구는 30초 기준 수 초, 3분 기준 최대 20~30초로 잡는다.
  • [x] 티켓 분해 = AI 몫 별도 티켓: AI 레포 작업(하이라이트 전용 잡, 구간 품질 보정)을 MSG-353으로 발행했고 MSG-351은 BE 몫만 남는다. 작업 순서는 MSG-353이 먼저다 (BE가 붙을 계약이 있어야 한다). MSG-159, MSG-284처럼 AI 레포 티켓을 따로 두는 기존 관례와 같다.

[^1]: 블러 파이프라인: 업로드 확정 후 도는 AI 처리 전체. 얼굴과 번호판 블러 추론이 약 90%를 차지하고 하이라이트 계산은 2% 수준이다. 선분석은 이 중 하이라이트만 떼어 확정 전에 돌리는 것. [^2]: 트리머: 긴 원본에서 업로드할 30초 이하 구간을 고르는 FE 슬라이더 UI. 선분석 결과가 추천 카드와 트리머 초기 위치에 쓰인다. [^3]: 다운스케일: 해상도를 낮춰 처리하는 것. 기존 파이프라인도 1080p 30fps 다운스케일이 전제다 (ADR). 하이라이트 계산이 1080p에서 3~5초, 4K 직분석이면 31초까지 늘어난다.