일정 (User Schedule)
문서 정보
- 작성일: 2026-02-23
- 최종 업데이트: 2026-03-02
- 버전: v3.0.0
일정(UserSchedule)은 **"이 사용자가 이 녹화에 참여했는가?"**를 기록하는 엔티티이자, Spoclip 서비스의 **Hub(중심축)**입니다. 콕, 마이콕, 댓글, 앨범, 공유, 활동 보상, 영상 시청 등 거의 모든 핵심 기능이 일정을 통해 연결됩니다. GPS 기반 녹화 예약 시 OWNER로, 공유 링크 접근 시 SHARED로 생성되며, 생성 시점의 멤버십 상태에 따라 FREE 또는 PLUS 패스가 자동 적용됩니다.
목차
핵심 개념
일정이란?
체육관에서 녹화가 이루어지면, 그 녹화에 참여한(또는 공유받은) 각 사용자마다 **일정(UserSchedule)**이 하나씩 생성됩니다.
일정은 단순한 "예약 기록"이 아닙니다. 영상 시청, 콕 생성, 앨범 관리, 공유, 활동 보상 등 Spoclip의 거의 모든 기능이 일정을 기준으로 동작합니 다. 일정이 없으면 해당 녹화의 어떤 콘텐츠에도 접근할 수 없습니다.
한 줄 비유
일정은 놀이공원 입장 팔찌와 같습니다. 팔찌(일정)가 있어야 놀이기구(영상, 콕, 앨범 등)를 이용할 수 있고, 팔찌 종류(FREE/PLUS)에 따라 이용할 수 있는 범위가 달라집니다.
Hub 역할 — 왜 일정이 중심인가
일정은 Spoclip 도메인에서 가장 많은 엔티티와 연결되는 중심 엔티티입니다. 아래 다이어그램은 일정을 중심으로 연결되는 모든 도메인을 보여줍니다.
일정을 조회하면 해당 녹화에 대한 모든 사용자 활동을 파악할 수 있습니다. 콕을 몇 개 찍었는지, 마이콕에 저장했는지, 영상을 다운로드했는지, 운동 컨디션을 기록했는지 — 모두 일정에 연결되어 있습니다.
연결되는 주요 기능
| 연결 도메인 | 관계 | 설명 |
|---|---|---|
| 콕 (Kok) | 1:N | 일정 내에서 생성한 콕 목록 |
| 마이콕 (MyKok) | 1:N | 콕을 영구 저장한 마이콕 |
| 운동 컨디션 | 1:1 | 해당 일정의 운동 상태 기록 (PLUS 전용) |
| 활동 보상 | 1:N | 콕 시청 리워드, 운동 컨디션 리워드 등 |
| 카메라 잠금해제 | 1:N | 광고 시청으로 잠금해제한 카메라 기록 |
| 패스 스냅샷 | N:1 | 적용된 패스 정책의 시점별 스냅샷 |
| 공유 링크 | N:1 | SHARED 사용자가 접근한 공유 링크 |
| 댓글 | 1:N | Recording에 작성한 댓글 (OWNER/SHARED 모두 가능) |
생성 경로
일정이 생성되는 경로는 크게 두 가지입니다.
1. 개별 예약 (INDIVIDUAL) — OWNER
사용자가 체육관에서 GPS 위치 검증을 통해 녹화를 예약하는 경우입니다.
- 사용자 앱에서 GPS 위치 검증 → WebSocket 연결 → 예약 요청
- 하나의 트랜잭션으로 Recording + Schedule + UserSchedule 동시 생성
- 일정의 소유권은 OWNER, 접근 상태는 ACCESSIBLE
- 사용자의 멤버십 상태에 따라 FREE 또는 PLUS 패스 자동 적용
- GPS 위치 검증에 대한 자세한 내용은
docs/maintained/recording/adr/001-gps-location-validation.md참고
2. 공유 (SHARED)
다른 사용자가 공유 링크를 통해 접근하여 생성되는 경우입니다.
- OWNER가 생성한 공유 링크(토큰 + 비밀번호)를 통해 접근
- 일정의 소유권은 SHARED
- 접근 상태는 보안 레벨에 따라 결정:
- LEVEL_1: 비밀번호 확인 후 즉시 ACCESSIBLE
- LEVEL_2: 비밀번호 확인 후 REQUESTED (OWNER 승인 필요)
- 공유받은 사용자 본인의 멤버십 상태에 따라 패스 자동 적용
어떤 경로로 생성되든, 일정이 생성되는 시점에 사용자의 멤버십 상태를 확인하여 FREE 또는 PLUS 패스가 자동으로 적용됩니다. 별도의 패스 선택 과정은 없습니다.
소유권 (Ownership)
모든 일정에는 소유권 유형이 지정됩니다. OWNER(소유자)와 SHARED(공유자) 두 가지가 있습니다.
OWNER vs SHARED 비교
| OWNER (소유자) | SHARED (공유자) | |
|---|---|---|
| 생성 시점 | 녹화 예약 시 | 공유 링크 접근 시 |
| 초기 접근 상태 | 항상 ACCESSIBLE | LEVEL_1: ACCESSIBLE / LEVEL_2: REQUESTED |
| 영상 시청 | 가능 | 가능 (ACCESSIBLE 상태일 때) |
| 콕 생성 | 가능 (녹화 중에만) | 불가 (녹화 완료 후 공유되므로) |
| 공유 링크 관리 | 생성 / 수정 / 삭제 가능 | 불가 |
| 참여자 승인/거절 | 가능 | 불가 |
| 접근 권한 취소 | 다른 사용자 취소 가능 | 불가 |
| 댓글 작성 | 가능 | 가능 (ACCESSIBLE 상태일 때) |
OWNER는 일정의 관리자이고, SHARED는 시청자입니다. 단, 패스는 각자 독립적으로 적용되어 시청 품질은 본인의 멤버십에 따라 결정됩니다.
접근 상태 (Access Status)
접근 상태는 사용자가 해당 일정의 콘텐츠에 접근할 수 있는지를 나타냅니다.
상태 종류
| 상태 | 의미 | 사용자 경험 |
|---|---|---|
| ACCESSIBLE | 접근 가능 | 영상 시청, 콕, 앨범 등 모든 기능 사용 가능 |
| REQUESTED | 승인 대기 중 | LEVEL_2 공유에서 OWNER의 승인을 기다리는 상태 |
| REJECTED | 거절됨 | 접근 불가. 재요청하여 다시 승인을 받을 수 있음 |
상태 전이 흐름
OWNER는 항상 ACCESSIBLE입니다. 위 상태 전이는 SHARED 사용자에게만 적용됩니다.
패스 자동 적용
멤버십 기반 자동 결정
일정이 생성될 때, 사용자의 멤버십(Entitlement) 상태를 확인하여 패스가 자동으로 결정됩니다.
- 별도의 패스 선택 과정 없음 — 멤버십 상태에 따라 자동 적용
- OWNER와 SHARED의 패스는 독립적 — 각자의 멤버십 상태에 따라 결정
- 패스 정책은 **패스 스냅샷(PassSnapshot)**으로 저장되어 시점별 정책이 보존됨
트라이얼 (무료 체험)
신규 가입 시 14일간 PLUS 무료 체험이 자동으로 시작됩니다. 트라이얼 기간 중에 생성되는 모든 일정에는 PLUS 패스가 적용됩니다.
FREE vs PLUS 패스 비교
| 기능 | FREE | PLUS |
|---|---|---|
| 시청 지연 | 녹화 시작 후 3시간 대기 | 즉시 시청 가능 |
| 콘텐츠 접근 기간 | 녹화 종료 후 24시간 | 녹화 종료 후 48시간 |
| 스트리밍 품질 | 480p / 30fps | 4K / 30fps |
| 광고 | 있음 | 없음 |
| 카메라 접근 | 제한 (일부 카메라) | 전체 카메라 |
| 카메라 전환 속도 | 일반 (NORMAL) | 빠름 (FAST) |
| 영상 다운로드 | 불가 | 가능 (10회/1결제) |
| 운동 컨디션 기록 | 불가 | 가능 |
| 콕 생성 제한 | - | 30회 / 일정 |
| 마이콕 저장 | 불가 | 가능 (최대 30개) |
| 콕 시청 리워드 | 불가 | 가능 |
멤버십 구독
PLUS 패스를 받으려면 멤버십 구독이 필요합니다.
| 항목 | 내용 |
|---|---|
| 구독 가격 | 월 7,900원 |
| 적용 범위 | 구독 기간 중 생성되는 모든 일정 |
| 트라이얼 | 신규 가입 시 14일 무료 체험 |
패스는 일정 생성 시점에 결정되어 스냅샷으로 고정됩니다. 이후 멤버십을 구독하거나 해지해도 이미 생성된 일정의 패스는 변경되지 않습니다. 새로 생성되는 일정부터 변경된 멤버십이 반영됩니다.
시간 정책
일정에는 콘텐츠 접근 가능 여부를 결정하는 세 가지 시간 개념이 있습니다.
시간 개념 요약
| 시간 개념 | 설명 | FREE | PLUS |
|---|---|---|---|
| 시청 지연 | 녹화 시작 후 영상을 볼 수 있기까지 대기 시간 | 3시간 | 0시간 (즉시) |
| 콘텐츠 접근 만료 | 영상 시청이 가능한 마감 시점 | 녹화 종료 + 24시간 | 녹화 종료 + 48시간 |
| 시스템 만료 | 일정 데이터가 시스템에서 정리되는 시점 | 녹화 종료 + 48시간 | 녹화 종료 + 48시간 |