유튜브가 동영상의 "가장 많이 재생된" 부분을 추적하는 방식 - Ruby on Rails로 구현

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

Ruby on Rails 개발자, 동영상 플랫폼 데이터 분석 기능 구현에 관심 있는 개발자

난이도: 중급 (모델 설계, API 구현, 데이터 처리 기초 지식 필요)

핵심 요약

  • videosvideo_interactions 두 테이블로 동영상 메타데이터와 사용자 상호작용을 저장
  • replay_heatmap 메서드로 각 타임스탬프의 재생 횟수를 집계하여 "가장 많이 재생된" 시점 도출
  • Chart.js, ApexCharts 등 프론트엔드 라이브러리를 활용해 시각화 가능

섹션별 세부 요약

1. 데이터베이스 모델 설계

  • videos 테이블: 동영상 제목(title), 길이(duration_seconds), 업로더(uploaded_by) 저장
  • video_interactions 테이블: interaction_type(재생/스크럽/일시정지), timestamp_in_video 기록
  • belongs_tohas_many 관계 설정, enum으로 interaction_type 정의

2. 사용자 상호작용 API 구현

  • video_interactions#create 엔드포인트: 사용자 행동(예: 재생 위치)을 JSON 형식으로 저장
  • interaction_params에서 video_id, user_id, timestamp_in_video 등 필수 파라미터 검증
  • 성공 시 201 Created 응답, 실패 시 오류 메시지 반환

3. "가장 많이 재생된" 시점 분석

  • replay_heatmap 메서드: interaction_type: 'replay' 필터링 후 timestamp_in_video별 카운트 집계
  • most_replayed_second 메서드: replay_heatmap에서 최대값 추출
  • 예시 결과: {5 => 3, 6 => 3, 7 => 14, 8 => 2} → 7초가 가장 많이 재생됨

4. 성능 최적화 전략

  • 인기 동영상의 경우 VideoReplaySummary 모델로 배경 작업(Sidekiq 또는 ActiveJob)을 통해 사전 집계
  • GET /videos/123/replay_heatmap 엔드포인트로 프론트엔드에 데이터 전달
  • Chart.js, D3.js 등 프론트엔드 라이브러리로 차트 시각화

결론

  • replay_heatmap 메서드를 통해 사용자 행동 패턴 분석 가능
  • 프론트엔드 차트 라이브러리 연동 시 실시간 시각화 구현
  • 배경 작업을 통한 사전 집계가 대규모 데이터 처리 시 필수적
  • curl 또는 Postman으로 API 테스트 가능 (예: curl -X POST /videos/123/video_interactions -d '{"interaction_type": "replay", "timestamp_in_video": 7}')