자세 피드백 정보 제공

wera4677·2025년 9월 2일

프로젝트

목록 보기
14/18

개요

AI 면접 서비스에서 사용자의 자세 피드백을 제공하려면 영상 기반 데이터가 필요하다.
하지만 어떤 방식으로 영상을 저장하고 관리할지 고민이 있었다.
→ 비용, 구현 난이도, 사용자 경험을 모두 고려해야 했다.


고려한 방법

(1) 전체 영상 저장 후 자동 삭제

  • 장점: 사용자가 요청 시 전체 영상을 제공할 수 있음
  • 단점: 1시간 분량 면접 영상을 모두 저장 → 사용자 증가 시 비용 부담 증가

(2) 자세가 나쁠 때만 클립 저장

  • 장점: 필요한 부분만 저장 → 스토리지 비용 절감
  • 단점: MediaRecorder 충돌 가능성, 구현 난이도 ↑ (특히 오디오·비디오 싱크 문제)

(3) 이미지 캡처 저장

  • 장점: 구현 매우 쉬움
  • 단점: 정적인 이미지라 피드백의 몰입감 부족

최종 선택

✅ 전체 영상 저장 + 수명 주기(Lifecycle Policy)로 자동 삭제

이유

  • 기본적으로 전체 영상을 저장하되, 24시간 후 자동 삭제하여 비용 최소화
  • 피드백용으로 필요한 구간만 잘라 클립 형태로 별도 보관
  • 사용자 경험(몰입감) + 비용 절감 → 가장 균형 잡힌 방식

구현 방법

(1) S3 수명 주기 설정

  • 원본 영상 저장 경로: s3://your-bucket/interview/raw/
  • 24시간 이후 자동 삭제 정책 적용

(2) 클립 저장 구조

  • 전체 영상 파일명: interview/raw/interview_{user}_{timestamp}.mp4
  • 클립 영상 파일명: interview/feedback-clips/{user}_{segment}.mp4

(3) 동작 플로우

  • [프론트엔드]
    • 전체 영상 업로드 → interview/raw/ 저장
    • 잘못된 자세 발생 시 타임스탬프를 /api/posture/segments로 전송
  • [백엔드]
    • 요청 수신 → S3 원본 영상 다운로드
    • FFmpeg로 해당 구간 잘라내기
    • 클립을 interview/feedback-clips/에 저장

환경 준비

  1. FFmpeg 설치

    • ffmpeg.org에서 다운로드
    • bin 경로를 환경 변수 PATH에 등록
  2. moviepy 설치

    pip install moviepy==1.0.3
    

    결과물

  • 면접 시작~종료까지 전체 영상은 knok-full-video에 저장 → 하루 뒤 자동 삭제

  • 잘못된 자세 구간은 클립 형태로 knok-clip-video에 별도 보관

  • 이후에는 이 클립을 기반으로 사용자 리포트에 피드백 제공 가능


  • 자세가 잘못된 부분이 있으면, 해당 부분의 타임 스탬프를 백엔드로 넘겨서 백엔드에서 해당 부분을 full-video에서 잘라서 clip으로 따로 보관
  • 해당 내용은 knok-clip-video에 저장됨

  • 이제 해당 내용을 레포트에서 사용자에게 제공만 해주면되는것이다.

마무리

  • 단순 이미지 캡처나 클립 방식은 비용은 줄일 수 있지만 현실성과 사용자 경험이 부족

  • 전체 영상 저장은 비용 부담이 있지만 Lifecycle Policy와 병행하면 해결 가능

  • 결국 “전체 영상 + 클립 병행 전략”이 가장 합리적이었다.

profile
클라우드 꿈나무🌳

0개의 댓글