유튜브가 동영상의 "가장 많이 재생된" 부분을 추적하는 방식 - Ruby on Rails로 구현
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
Ruby on Rails 개발자, 동영상 플랫폼 데이터 분석 기능 구현에 관심 있는 개발자
난이도: 중급 (모델 설계, API 구현, 데이터 처리 기초 지식 필요)
핵심 요약
videos
와video_interactions
두 테이블로 동영상 메타데이터와 사용자 상호작용을 저장replay_heatmap
메서드로 각 타임스탬프의 재생 횟수를 집계하여 "가장 많이 재생된" 시점 도출- Chart.js, ApexCharts 등 프론트엔드 라이브러리를 활용해 시각화 가능
섹션별 세부 요약
1. 데이터베이스 모델 설계
videos
테이블: 동영상 제목(title
), 길이(duration_seconds
), 업로더(uploaded_by
) 저장video_interactions
테이블:interaction_type
(재생/스크럽/일시정지),timestamp_in_video
기록belongs_to
와has_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}'
)