이 가이드는 산업의 개념을 플랫폼에 현재 있는 객체(부케, 라인, 패키지, 파트너 계정, 노드, API)에 대응시킵니다. 이는 개념적 대응이며 산업 전용 기능이 아닙니다. 또한 파트너 계정은 위임 계정이며 격리된 테넌트가 아닙니다.
개념적 대응
패널에는 프로그램이나 후원자라는 이름의 항목이 없습니다. 표는 어떤 객체가 어떤 역할을 하는지 보여주며, 아래 장들은 그 순서대로 설정합니다.
| 내 산업에서는 | 플랫폼에서는 | 패널에서의 위치 |
|---|---|---|
| 스튜디오의 채널 | 실시간 채널: 소스, EPG, 출력 형식을 가진 스트림 | Streams → 실시간 스트림 추가(소스 URL 또는 RTMP 푸시) |
| 프로그램 라이브러리 | VOD 카탈로그: 시즌과 에피소드가 있는 영화와 시리즈, 카테고리, 메타데이터 | Movies와 Series, 또는 VOD 인제스트 작업 |
| 구독 등급 | 부케: 패키지가 부여하는 채널, 영화, 시리즈의 이름 있는 묶음 | Bouquets, Streams와 Movies / Series에서 생성 |
| 후원자 액세스 | 라인: 패키지, 부케, 만료일, 연결 제한, 출력을 가진 하나의 액세스 | Lines → 추가, 또는 활성화 코드, 또는 Reseller API |
| 결제 주기 | 라인의 만료일. 패키지, 크레딧 또는 API로 갱신됩니다 | 라인의 만료일과 패키지의 기간 |
| 제휴 파트너 또는 총판 계정 | 파트너 계정(리셀러): 크레딧, 권한, 자체 라인을 가진 위임 대시보드 | Users → 리셀러 추가, 권한은 Groups에서 설정 |
| 쇼핑몰 또는 멤버십 연동 | Reseller API와 웹훅: 자체 시스템에서 수행하는 패널의 작업 | 리셀러 대시보드의 Reseller API 키와 웹훅 |
사전 준비
설치 전에 준비할 것.
- 공개 주소 또는 도메인이 있는 서버(Ubuntu 22.04 또는 24.04)와 예상 시청자에게 충분한 업스트림 대역폭.
- 완성된 에피소드, 채널용 스튜디오의 플레이아웃 또는 인코더, 커넥터가 있는 플랫폼의 쇼핑몰 또는 HTTP API를 호출할 수 있는 환경.
- 등급과 제휴 파트너에 대한 결정. 각 구독이 무엇을 부여하는지, 누가 판매할 수 있는지.
인프라 구축
먼저 서버 하나, 시청자가 늘면 노드.
- 관리 서버에서 설치 프로그램을 실행하고 패널을 TLS가 적용된 리버스 프록시 뒤에 둡니다. 신뢰할 프록시를 설정해 IP 규칙이 시청자의 실제 주소를 보게 합니다.
- 재생 기본 주소를 시청자가 접속하는 공개 주소로 설정합니다.
- 후원자가 많이 시청하는 지역에 Servers에서 노드를 등록합니다. 패널이 SSH로 설치하고 그 지역의 시청자를 노드로 보냅니다.
- 카탈로그나 후원자를 운영하는 직원마다 자체 권한 그룹을 가진 파트너 계정(리셀러)을 만듭니다.
콘텐츠 정리
프로그램은 시리즈로, 등급은 부케로.
- 장르별로 카테고리를 만들고, 프로그램마다 시리즈 하나, 공개 묶음마다 시즌 하나, 영상마다 에피소드 하나를 만듭니다.
- 실시간 채널용 부케, 무료 또는 입문 콘텐츠용 부케, 상위 등급마다 부케를 하나씩 만듭니다.
- 등급마다 청구 기간을 기간으로 하는 패키지 하나를 만들고, 필요하면 신규 방문자용 체험 패키지와 제휴 파트너용 크레딧 가격도 설정합니다.
- 백 카탈로그는 별도 카테고리에 두어, 시리즈를 건드리지 않고 등급 사이에서 옮길 수 있게 합니다.
파트너(리셀러) 설정
제휴 파트너와 총판.
- 제휴 파트너용으로 라인 권한만 있는 그룹을 만들어 카탈로그를 변경할 수 없게 합니다.
- 각 제휴 파트너를 그 그룹과 크레딧 잔액을 가진 리셀러로 추가합니다. 패키지 가격은 스튜디오가 정합니다.
- 하위 제휴 파트너를 둔 총판은 자기 계정 아래에 서브 리셀러를 최대 5단계까지 만들 수 있습니다.
후원자 액세스 설정
후원자마다 라인 하나.
- 쇼핑몰의 커넥터(예: WooCommerce)를 설치하고 Reseller API 키와 각 상품에 대응하는 패키지를 입력합니다.
- 구독 시 커넥터가 패키지와 요청 ID로 create_line을 호출합니다. 청구 기간이 패키지의 기간입니다.
- 최대 연결 수를 후원자가 쓸 수 있는 기기 수(보통 2~3개)로 설정합니다.
- 경품 행사나 런칭에는 활성화 코드를 일괄 생성하거나 Lines → 추가에서 체험 패키지로 라인을 추가합니다.
프로그램 라이브러리
에피소드를 주문형으로.
- 각 에피소드를 소스로 업로드하거나 VOD 인제스트 작업으로 인제스트합니다. 제목, 시즌, 에피소드 번호를 입력하고, 프로그램에 TMDB 메타데이터가 있으면 함께 입력합니다.
- 각 시리즈를 시청할 수 있는 등급의 부케에 연결합니다.
- 공개를 알리기 전에 각 등급의 테스트 라인으로 재생을 확인합니다.
스튜디오의 채널
24시간 방송되는 채널.
- 스튜디오의 플레이아웃용 실시간 스트림(RTMP 푸시)을 추가하고, 채널을 포함하는 모든 등급의 부케에 넣습니다.
- 채널의 편성표를 XMLTV로 불러와 후원자가 방송 내용을 볼 수 있게 하고, 다시 볼 만한 프로그램에는 캐치업을 활성화합니다.
- 공개 사이사이에도 스튜디오 자체의 편성 콘텐츠로 플레이아웃을 계속 돌립니다. 패널은 스트림을 중계할 뿐입니다.
구독 만료
액세스는 결제를 따릅니다.
- 라인은 패키지 기간이 끝나면 만료됩니다. 다음 결제가 들어오면 쇼핑몰이 renew_line으로 갱신합니다.
- 쇼핑몰을 웹훅에 등록해 line.expiring 시 알림을 보내고 line.expired 시 후원자의 등급을 낮춥니다.
- 해지한 후원자는 쇼핑몰이 disable_line으로 비활성화하며, 라인은 새 계정 없이 나중에 다시 갱신할 수 있습니다.
쇼핑몰과의 연동
쇼핑몰이 판매하고 플레이어가 재생합니다.
- 커넥터가 주문에 맞춰 라인을 생성, 갱신, 비활성화합니다. 다른 쇼핑몰은 Reseller API와 웹훅을 사용합니다.
- 제휴 파트너는 자신의 대시보드에서 자기 라인을 볼 수 있고, Reseller API로 자동화할 수 있습니다.
- 시청자용 싱글 사인온은 없습니다. 후원자는 쇼핑몰이 보내준 라인의 자격 증명으로 플레이어에 로그인합니다.
보안 고려 사항
서버뿐 아니라 구독을 보호합니다.
- 패널과 재생 기본 주소는 TLS로 제공하고 TRUSTED_PROXIES를 리버스 프록시로 설정합니다.
- 모든 패널 계정에 2단계 로그인을 적용하고, 제휴 파트너가 카탈로그를 변경할 수 없도록 권한 그룹을 둡니다.
- 서명되고 만료되는 재생 링크와 라인별 연결 제한을 사용하고, 라이선스가 지역 한정이면 라인을 국가에 묶습니다.
- 오프사이트 사본이 있는 암호화된 데이터베이스 백업과, 라인과 카탈로그의 모든 변경을 기록하는 감사 로그.
문제 해결
가장 먼저 확인할 일반적인 항목.
- 새 후원자가 결제 후 시청하지 못함: Reseller API 로그에서 쇼핑몰 커넥터의 호출과 라인의 만료일을 확인합니다.
- 후원자에게 상위 등급의 콘텐츠가 보임: 라인의 패키지와 그것이 부여하는 부케를 확인합니다.
- 플레이아웃 주기 끝에서 채널이 멈춤: 인코더에서 실시간 스트림으로의 푸시와 스트림의 프로브 상태를 확인합니다.
- 제휴 파트너의 판매가 나타나지 않음: 크레딧과, 사용한 패키지가 그 그룹에 속하는지 확인합니다.