이 가이드는 산업의 개념을 플랫폼에 현재 있는 객체(부케, 라인, 패키지, 파트너 계정, 노드, API)에 대응시킵니다. 이는 개념적 대응이며 산업 전용 기능이 아닙니다. 또한 파트너 계정은 위임 계정이며 격리된 테넌트가 아닙니다.
개념적 대응
패널에는 구독이나 POP라는 이름의 항목이 없습니다. 표는 어떤 객체가 어떤 역할을 하는지 보여주며, 아래 장들은 그 순서대로 설정합니다.
| 내 산업에서는 | 플랫폼에서는 | 패널에서의 위치 |
|---|---|---|
| 총판 또는 지역 파트너 계정 | 파트너 계정(리셀러): 크레딧, 권한, 자체 라인을 가진 위임 대시보드 | Users → 리셀러 추가, 권한은 Groups에서 설정 |
| 채널 등급 또는 부가 팩 | 부케: 패키지가 부여하는 채널, 영화, 시리즈의 이름 있는 묶음 | Bouquets, Streams와 Movies / Series에서 생성 |
| 텔레비전 채널 | 실시간 채널: 소스, EPG, 출력 형식을 가진 스트림 | Streams → 실시간 스트림 추가(소스 URL 또는 RTMP 푸시) |
| VOD 라이브러리 | VOD 카탈로그: 시즌과 에피소드가 있는 영화와 시리즈, 카테고리, 메타데이터 | Movies와 Series, 또는 VOD 인제스트 작업 |
| 가입자의 텔레비전 액세스 | 라인: 패키지, 부케, 만료일, 연결 제한, 출력을 가진 하나의 액세스 | Lines → 추가, 또는 활성화 코드, 또는 Reseller API |
| 청구 기간 종료 | 라인의 만료일. 패키지, 크레딧 또는 API로 갱신됩니다 | 라인의 만료일과 패키지의 기간 |
| 구독당 화면 수 | 라인의 최대 연결 수: 동시에 시청할 수 있는 기기 수 | 라인의 최대 연결 수 |
| 청구·프로비저닝 연동 | Reseller API와 웹훅: 자체 시스템에서 수행하는 패널의 작업 | 리셀러 대시보드의 Reseller API 키와 웹훅 |
| POP 노드 | 스트리밍 노드: 패널에서 등록하는 엣지 서버. 현장 또는 건물당 하나 | Servers → 노드 추가(SSH로 설치) |
사전 준비
설치 전에 준비할 것.
- 코어 사이트의 서버(Ubuntu 22.04 또는 24.04), 설치 프로그램, 가입자가 접속할 수 있는 도메인 또는 주소, 노드용으로 각 POP의 서버.
- 라이선스를 받은 채널 피드, VOD 라이브러리, 구독을 관리하는 청구 시스템.
- 등급, 청구 기간의 길이, 어떤 총판에게 파트너 계정을 줄지에 대한 결정.
인프라 구축
코어 사이트, 그다음 POP.
- 코어 서버에서 설치 프로그램을 실행하고, 패널을 리버스 프록시 뒤에 두며 TRUSTED_PROXIES를 설정해 로그와 IP 규칙이 가입자의 실제 주소를 보게 합니다.
- 재생 기본 주소를 가입자가 접속하는 공개 주소로 설정하고, 서버에 라이선스 키를 설정합니다.
- Servers에서 POP마다 노드를 등록합니다. 패널이 SSH로 설치하거나 노드가 일회용 코드로 등록하며, 가까운 가입자를 그 노드로 보냅니다.
- 지원팀이나 청구팀용으로 라인 권한만 있는 파트너 계정(리셀러)을 만듭니다.
콘텐츠 정리
등급과 팩은 부케로.
- 채널을 Streams에, VOD 라이브러리를 Movies와 Series에 카테고리 및 EPG 소스와 함께 추가합니다.
- 기본 채널 구성, 프리미엄 채널, VOD 라이브러리용 부케를 만듭니다.
- 구독 등급마다 부여할 부케, 기간으로서의 청구 기간, 크레딧 가격을 가진 패키지 하나를 만듭니다.
- 프로모션이나 신규 고객용으로 짧은 체험 패키지를 만듭니다.
파트너(리셀러) 설정
크레딧을 가진 총판.
- 총판용으로 자기 라인 권한은 있고 카탈로그나 설정에는 접근할 수 없는 그룹을 만듭니다.
- 각 지역 총판을 그 그룹, 판매할 수 있는 패키지, 크레딧 잔액을 가진 파트너 계정으로 추가합니다. 총판은 최대 5단계까지 서브 리셀러를 둘 수 있습니다.
- 웹훅 credits.low와 크레딧 부족 알림이 판매가 멈추기 전에 총판에게 충전을 알립니다.
가입자 라인 설정
구독마다 라인 하나.
- 청구 시스템이 구독이 시작될 때 커넥터 또는 Reseller API의 action=create_line을 등급의 패키지와 요청 ID로 호출해 라인을 만듭니다.
- 등급별 최대 연결 수, 즉 한 가구가 동시에 쓸 수 있는 화면 수를 설정합니다.
- 상품이 자사 네트워크 전용이라면 라인을 가입자의 주소, 국가 또는 ISP에 묶습니다.
- 시범 운영이나 지원 건에는 Lines → 추가에서 라인을 추가하고 자격 증명을 전달합니다.
VOD 라이브러리
주문형 카탈로그.
- 영화와 시리즈를 시즌과 에피소드로 추가합니다. VOD 인제스트 작업으로 인제스트하거나 업로드하고, 포스터와 설명에는 TMDB 메타데이터를 사용합니다.
- 타이틀을 등급이나 부가 상품별로 부케에 묶어, 패키지가 구독에 포함된 것만 정확히 부여하게 합니다.
- 노드가 VOD 파일을 캐시하므로 인기 타이틀은 가입자와 가까운 POP에서 전송됩니다.
실시간 채널
채널 구성.
- 라이선스를 받은 각 채널을 Streams에서 피드와 함께 추가하고, 캐치업이나 타임시프트는 권리가 허용하는 곳에서만 활성화합니다.
- 앱과 박스에 편성표가 표시되도록 EPG 소스를 추가합니다.
- 각 노드는 실시간 채널을 오리진에서 한 번만 받아 자기 가입자에게 분배합니다.
만료, 갱신, 해지
청구 기간이 곧 라인의 유효 기간.
- 라인은 패키지 기간 동안 유지됩니다. 청구 시스템이 기간마다 action=renew_line 또는 커넥터로 갱신합니다.
- 구독이 만료되거나 해지되면 청구 시스템이 action=disable_line을 호출하고, 재개 시 라인을 다시 활성화합니다.
- 청구 시스템을 웹훅에 등록해 만료 임박 및 만료된 라인을 자체 기록과 대조합니다.
청구 시스템과의 연동
청구 시스템이 액세스를 제어하고 플레이어가 재생합니다.
- 청구 시스템 쪽에 해당 커넥터(WHMCS, Blesta, Odoo 등)를 설치하거나, 자체 시스템에서 키와 요청 ID로 Reseller API를 호출합니다.
- 시청자용 싱글 사인온은 없습니다. 가입자는 라인의 자격 증명으로 앱이나 박스에 로그인하며, 청구 시스템은 이를 고객 영역에 표시할 수 있습니다.
- 보고 도구에는 읽기 전용 플래그, IP 허용 목록, 만료일이 있는 Admin API 키를 사용합니다.
보안 고려 사항
서비스를 가입자를 위해 유지합니다.
- 패널을 TLS가 적용된 리버스 프록시 뒤에 두고 TRUSTED_PROXIES를 설정하며, 노드의 관리 트래픽은 사설 네트워크에 둡니다.
- 모든 패널 계정에 2단계 로그인을, 지원팀과 총판에는 권한 그룹을 적용하고, 로그인에는 reCAPTCHA 또는 Turnstile을 사용합니다.
- 서명되고 만료되는 재생 링크, 구독별 연결 제한, 적합한 경우 주소·국가·ISP 고정.
- 오프사이트 사본이 있는 암호화된 데이터베이스 백업과, 라인과 크레딧의 모든 변경을 기록하는 감사 로그.
문제 해결
가장 먼저 확인할 일반적인 항목.
- 가입자에게 텔레비전이 나오지 않음: 라인이 활성 상태이고 만료되지 않았는지 확인한 다음, Reseller API 호출 로그에서 청구 시스템의 호출을 확인합니다.
- 한 등급에서 채널이 없음: 그 등급 패키지의 부케를 확인합니다.
- 한 POP에서 버퍼링: 그 노드의 하트비트와 가입자가 그 노드로 연결되는지 확인합니다.
- 총판이 라인을 만들지 못함: 크레딧과, 해당 패키지가 판매 가능한 것인지 확인합니다.