본문으로 건너뛰기

녹화 예약

사용자의 WebSocket 예약과 영상 매칭 과정

문서 정보

  • 작성일: 2026-03-02
  • 최종 업데이트: 2026-03-02
  • 버전: v1.0.0
  • 관련 코드: src/modules/recording/

개요

사용자는 앱에서 체육관 녹화를 예약합니다. 예약은 WebSocket 기반으로 동작하며, 예약 시 Recording과 일정(Schedule, UserSchedule) 엔티티가 생성됩니다.

Recording은 두 가지 경로로 생성될 수 있습니다:

생성 경로설명
사용자 예약WebSocket으로 녹화 예약 시 생성
Webhook 자동 생성R2 webhook 수신 시 해당 시간대의 Recording이 없으면 자동 upsert

WebSocket 예약 흐름

네임스페이스

/recordings

이벤트

이벤트 상세

이벤트방향설명
FETCH_INFOClient → Server체육관 코드로 체육관/코트 정보 조회, 위치 검증 포함
RESERVEClient → Server녹화 예약 (Recording + Schedule + UserSchedule 생성)
CHECK_STATUSClient → Server현재 예약 상태 조회
CANCELClient → Server활성 예약 취소

관련 코드: src/modules/recording/gateways/recording.gateway.ts


위치 검증

사용자가 실제로 체육관 내에 있는지 검증합니다.

방식환경변수검증 방법
GPSLOCATION_VALIDATION_TYPE=GPSHaversine 거리 계산, 체육관 좌표 + 반경
IPLOCATION_VALIDATION_TYPE=IPIP 화이트리스트 매칭

Recording과 Video의 관계

하나의 Recording에 여러 Video(10분 단위)가 연결됩니다.

Recording (14:00 ~ 15:00 녹화 세션)
├── Video (14:00 ~ 14:10) - timeSlot 0
├── Video (14:10 ~ 14:20) - timeSlot 1
├── Video (14:20 ~ 14:30) - timeSlot 2
├── Video (14:30 ~ 14:40) - timeSlot 3
├── Video (14:40 ~ 14:50) - timeSlot 4
└── Video (14:50 ~ 15:00) - timeSlot 5

각 Video는 다시 멀티카메라 영상을 포함합니다:

Video (14:00 ~ 14:10)
└── metadata.videoResources[]
├── CAM-FRONT: { r2: {...}, stream: {...} }
└── CAM-SIDE: { r2: {...}, stream: {...} }

KokSync

녹화 종료 시점에 BullMQ 작업이 트리거됩니다. KokSync는 사용자가 녹화 중 생성한 콕(Kok) 데이터를 Firestore에서 PostgreSQL로 동기화하여, 콕과 해당 시간대의 Video를 매칭합니다.


변경 이력

버전날짜변경 내용
v1.0.02026-03-02초기 문서 작성
- WebSocket 예약 흐름
- 위치 검증 (GPS/IP)
- Recording-Video 관계
- KokSync 개요