본문으로 건너뛰기

일정 (User Schedule)

문서 정보

  • 작성일: 2026-02-23
  • 최종 업데이트: 2026-03-02
  • 버전: v3.0.0

TL;DR

일정(UserSchedule)은 **"이 사용자가 이 녹화에 참여했는가?"**를 기록하는 엔티티이자, Spoclip 서비스의 **Hub(중심축)**입니다. 콕, 마이콕, 댓글, 앨범, 공유, 활동 보상, 영상 시청 등 거의 모든 핵심 기능이 일정을 통해 연결됩니다. GPS 기반 녹화 예약 시 OWNER로, 공유 링크 접근 시 SHARED로 생성되며, 생성 시점의 멤버십 상태에 따라 FREE 또는 PLUS 패스가 자동 적용됩니다.


목차

  1. 핵심 개념
  2. Hub 역할 — 왜 일정이 중심인가
  3. 생성 경로
  4. 소유권 (Ownership)
  5. 접근 상태 (Access Status)
  6. 패스 자동 적용
  7. 시간 정책
  8. FAQ

핵심 개념

일정이란?

체육관에서 녹화가 이루어지면, 그 녹화에 참여한(또는 공유받은) 각 사용자마다 **일정(UserSchedule)**이 하나씩 생성됩니다.

일정은 단순한 "예약 기록"이 아닙니다. 영상 시청, 콕 생성, 앨범 관리, 공유, 활동 보상 등 Spoclip의 거의 모든 기능이 일정을 기준으로 동작합니다. 일정이 없으면 해당 녹화의 어떤 콘텐츠에도 접근할 수 없습니다.

한 줄 비유

일정은 놀이공원 입장 팔찌와 같습니다. 팔찌(일정)가 있어야 놀이기구(영상, 콕, 앨범 등)를 이용할 수 있고, 팔찌 종류(FREE/PLUS)에 따라 이용할 수 있는 범위가 달라집니다.


Hub 역할 — 왜 일정이 중심인가

일정은 Spoclip 도메인에서 가장 많은 엔티티와 연결되는 중심 엔티티입니다. 아래 다이어그램은 일정을 중심으로 연결되는 모든 도메인을 보여줍니다.

Hub가 의미하는 것

일정을 조회하면 해당 녹화에 대한 모든 사용자 활동을 파악할 수 있습니다. 콕을 몇 개 찍었는지, 마이콕에 저장했는지, 영상을 다운로드했는지, 운동 컨디션을 기록했는지 — 모두 일정에 연결되어 있습니다.

연결되는 주요 기능

연결 도메인관계설명
콕 (Kok)1:N일정 내에서 생성한 콕 목록
마이콕 (MyKok)1:N콕을 영구 저장한 마이콕
운동 컨디션1:1해당 일정의 운동 상태 기록 (PLUS 전용)
활동 보상1:N콕 시청 리워드, 운동 컨디션 리워드 등
카메라 잠금해제1:N광고 시청으로 잠금해제한 카메라 기록
패스 스냅샷N:1적용된 패스 정책의 시점별 스냅샷
공유 링크N:1SHARED 사용자가 접근한 공유 링크
댓글1:NRecording에 작성한 댓글 (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 (공유자)
생성 시점녹화 예약 시공유 링크 접근 시
초기 접근 상태항상 ACCESSIBLELEVEL_1: ACCESSIBLE / LEVEL_2: REQUESTED
영상 시청가능가능 (ACCESSIBLE 상태일 때)
콕 생성가능 (녹화 중에만)불가 (녹화 완료 후 공유되므로)
공유 링크 관리생성 / 수정 / 삭제 가능불가
참여자 승인/거절가능불가
접근 권한 취소다른 사용자 취소 가능불가
댓글 작성가능가능 (ACCESSIBLE 상태일 때)
핵심 차이

OWNER는 일정의 관리자이고, SHARED는 시청자입니다. 단, 패스는 각자 독립적으로 적용되어 시청 품질은 본인의 멤버십에 따라 결정됩니다.


접근 상태 (Access Status)

접근 상태는 사용자가 해당 일정의 콘텐츠에 접근할 수 있는지를 나타냅니다.

상태 종류

상태의미사용자 경험
ACCESSIBLE접근 가능영상 시청, 콕, 앨범 등 모든 기능 사용 가능
REQUESTED승인 대기 중LEVEL_2 공유에서 OWNER의 승인을 기다리는 상태
REJECTED거절됨접근 불가. 재요청하여 다시 승인을 받을 수 있음

상태 전이 흐름

OWNER의 접근 상태

OWNER는 항상 ACCESSIBLE입니다. 위 상태 전이는 SHARED 사용자에게만 적용됩니다.


패스 자동 적용

멤버십 기반 자동 결정

일정이 생성될 때, 사용자의 멤버십(Entitlement) 상태를 확인하여 패스가 자동으로 결정됩니다.

  • 별도의 패스 선택 과정 없음 — 멤버십 상태에 따라 자동 적용
  • OWNER와 SHARED의 패스는 독립적 — 각자의 멤버십 상태에 따라 결정
  • 패스 정책은 **패스 스냅샷(PassSnapshot)**으로 저장되어 시점별 정책이 보존됨

트라이얼 (무료 체험)

신규 가입 시 14일간 PLUS 무료 체험이 자동으로 시작됩니다. 트라이얼 기간 중에 생성되는 모든 일정에는 PLUS 패스가 적용됩니다.

FREE vs PLUS 패스 비교

기능FREEPLUS
시청 지연녹화 시작 후 3시간 대기즉시 시청 가능
콘텐츠 접근 기간녹화 종료 후 24시간녹화 종료 후 48시간
스트리밍 품질480p / 30fps4K / 30fps
광고있음없음
카메라 접근제한 (일부 카메라)전체 카메라
카메라 전환 속도일반 (NORMAL)빠름 (FAST)
영상 다운로드불가가능 (10회/1결제)
운동 컨디션 기록불가가능
콕 생성 제한-30회 / 일정
마이콕 저장불가가능 (최대 30개)
콕 시청 리워드불가가능

멤버십 구독

PLUS 패스를 받으려면 멤버십 구독이 필요합니다.

항목내용
구독 가격월 7,900원
적용 범위구독 기간 중 생성되는 모든 일정
트라이얼신규 가입 시 14일 무료 체험
이미 생성된 일정은 변경되지 않음

패스는 일정 생성 시점에 결정되어 스냅샷으로 고정됩니다. 이후 멤버십을 구독하거나 해지해도 이미 생성된 일정의 패스는 변경되지 않습니다. 새로 생성되는 일정부터 변경된 멤버십이 반영됩니다.


시간 정책

일정에는 콘텐츠 접근 가능 여부를 결정하는 세 가지 시간 개념이 있습니다.

시간 개념 요약

시간 개념설명FREEPLUS
시청 지연녹화 시작 후 영상을 볼 수 있기까지 대기 시간3시간0시간 (즉시)
콘텐츠 접근 만료영상 시청이 가능한 마감 시점녹화 종료 + 24시간녹화 종료 + 48시간
시스템 만료일정 데이터가 시스템에서 정리되는 시점녹화 종료 + 48시간녹화 종료 + 48시간

타임라인 시각화

FREE 사용자

PLUS 사용자

구체적인 예시

녹화가 2026-02-27 14:40~15:00 (startTime 14:40, endTime 15:00)인 경우:

시점FREEPLUS
시청 시작 가능2/27 17:40 (+3h)2/27 14:40 (즉시)
콘텐츠 접근 만료2/28 15:00 (+24h)3/1 15:00 (+48h)
시스템 만료3/1 15:00 (+48h)3/1 15:00 (+48h)
FREE 사용자의 실질 시청 시간

FREE 사용자는 녹화 시작 후 3시간 지연이 적용되며, 콘텐츠 접근 만료는 녹화 종료 후 24시간입니다. 예를 들어 20분 녹화(14:40~15:00)의 경우, 17:40 ~ 다음날 15:00 사이에만 영상을 볼 수 있습니다.

시스템 만료 이후

  • 일정이 목록에서 제외됩니다
  • 연결된 리소스(영상, 클립, 앨범 등)가 정리됩니다
  • 만료된 일정은 복구할 수 없습니다

FAQ

Q: OWNER와 SHARED의 패스가 다를 수 있나요?

네. 각 사용자의 멤버십 상태에 따라 독립적으로 결정됩니다. 예를 들어 OWNER가 PLUS 구독 중이고 공유받은 사용자가 미구독이면, OWNER는 PLUS, SHARED는 FREE 패스가 적용됩니다.

Q: 공유받은 사용자의 만료 시간은 어떻게 계산되나요?

OWNER와 동일하게 녹화 종료 시간 기준으로 계산됩니다. 공유 접근 시점이 아닙니다. 따라서 녹화 종료 후 시간이 많이 지나서 공유받으면, 남은 시청 시간이 짧을 수 있습니다.

Q: 멤버십을 중간에 구독하면 기존 일정의 패스가 바뀌나요?

아닙니다. 패스는 일정 생성 시점에 결정되어 패스 스냅샷으로 고정됩니다. 이미 FREE로 생성된 일정은 이후 멤버십을 구독해도 변경되지 않습니다. 구독 이후에 새로 생성되는 일정부터 PLUS가 적용됩니다.

Q: 콘텐츠 접근 만료(accessibleUntil)와 시스템 만료(expiresAt)의 차이는?

콘텐츠 접근 만료가 지나면 영상 시청은 불가하지만, 일정 데이터는 시스템 만료 시점까지 남아 있습니다. 목록에는 표시될 수 있으나 콘텐츠에 접근할 수 없는 상태입니다. 시스템 만료가 지나면 목록에서도 완전히 제외됩니다.

Q: 한 사용자가 같은 녹화에 대해 여러 일정을 가질 수 있나요?

아닙니다. (userId, scheduleId) 유니크 제약이 있어 한 사용자는 한 스케줄에 대해 하나의 일정만 가질 수 있습니다. 이미 OWNER로 일정이 있는 상태에서 공유 링크로 접근하면, 기존 일정이 유지됩니다.

Q: 거절(REJECTED)된 후 다시 접근할 수 있나요?

네. REJECTED 상태에서 공유 링크에 다시 접근하거나 재요청할 수 있습니다. LEVEL_1 공유 링크라면 즉시 ACCESSIBLE로, LEVEL_2라면 REQUESTED(승인 대기)로 상태가 변경됩니다.

Q: 만료된 일정은 복구할 수 있나요?

현재 만료된 일정의 복구 기능은 없습니다. 시스템 만료(expiresAt) 이후에는 관련 리소스가 정리되므로 데이터 복구가 불가능합니다.


관련 문서


변경 이력

버전날짜변경 내용
v1.0.02026-02-23초기 문서 작성
- UserSchedule 도메인 개념 정의
- 생성 플로우 (OWNER / SHARED) 문서화
- 소유권 및 접근 상태 정리
- 패스 시스템 (Entitlement 기반 자동 결정) 문서화
- 시간 정책 3종 정의 (시청 지연 / 콘텐츠 접근 / 시스템 만료)
v2.0.02026-02-27Hub 중심 리라이팅
- Hub 역할 섹션 추가 (연결 관계도 Mermaid 다이어그램)
- 생성 경로 3종으로 확장 (INDIVIDUAL, AUTO_SCHEDULED, SHARED)
- 패스 자동 적용 섹션 추가 (Entitlement 기반 흐름, 트라이얼 설명)
- FREE vs PLUS 비교표에 콕/마이콕/리워드 항목 추가
- 비개발자 친화적 용어로 전면 개편
- FAQ 확장 (유니크 제약, 재접근 플로우)
v3.0.02026-03-02정확성 개선
- 레거시 기능 제거 (클립, SPO AI, 자동 예약, 스포컵, 스케줄 앨범)
- QR 스캔 → GPS 기반 위치 검증으로 수정
- 댓글 권한: OWNER 전용 → OWNER/SHARED 모두 가능으로 수정
- 콕 생성: SHARED 불가 명시 (녹화 완료 후 공유되므로)
- 시청 지연 기준: 녹화 종료 → 녹화 시작으로 수정 (ADR-003 참고)
- Mermaid 다이어그램 \n<br> 렌더링 수정