DRM·라이선스
라이선스를 내주는 순간
고객사 서버가 재생 여부를 답합니다
패키징된 영상은 인증 서버에서 라이선스 키를 받아야 열립니다. 키를 내주기 전에 고객사 서버가 이 사용자의 권한을 판정하고, 내려받은 파일에는 오프라인에서 열리는 기한이 따로 붙습니다. 보안 담당자가 승인 전에 짚을 구성 요소, 판정 결과, 단계별 오류를 정리했습니다.
최종 수정
보호된 파일이 재생되기까지
담당이 셋으로 나뉩니다. 콘텐츠 담당은 파일을, 서비스 운영자는 키를, 서버 개발자는 권한 판정을 맡습니다.
-
파일 암호화
콘솔에서 받은 DRM 패키징 도구 ndrm-pkg로 영상을 패키징해 미디어 서버에 올립니다. 실행 파일 옆에는 ndrmconfig 파일이 함께 있어야 합니다.
-
App과 키 발급
콘솔에서 서비스용 App을 만들면 App ID와 App Key가 생깁니다. 둘 다 라이선스 키 발급 요청에 쓰이니 보안 자산 목록에 올려 관리하세요.
-
재생 요청에 신원 싣기
플레이어를 열 때 DRM 설정에 App ID와 사용자 ID를 넣습니다. 둘은 빠질 수 없는 값이고, 강좌 번호처럼 판정에 쓸 정보는 userData에 담습니다.
-
권한 판정
라이선스 발급 시점에 고객사 서버로
CheckAccessRights가 호출됩니다. 서버가 돌려준 result에 따라 플레이어의 동작이 정해집니다. -
재생과 세션
인증 서버는 키 발급과 함께 재생 세션을 관리합니다. 세션을 찾지 못하거나 세션이 닫히면 플레이어는 세션 오류를 받습니다.
구성 요소별 역할과 검토 포인트
보안성 검토 문서의 시스템 구성도에 그대로 옮길 수 있게 정리했습니다. 오른쪽 칸은 권장 확인 항목입니다.
| 구성 요소 | 하는 일 | 검토 때 볼 점 |
|---|---|---|
| DRM 패키징 도구 | 미디어 파일을 DRM 콘텐츠로 패키징. macOS·Windows·Linux용 빌드 7종 | 도구를 돌리는 PC나 서버에 누가 접근하는지, 원본 보관 위치 |
| PlaynPlay 인증 서버 | 재생용 라이선스 키 발급, 세션 관리 | 라이선스 통신이 사내 방화벽에서 막히지 않는지 |
| App ID·App Key | 콘솔에서 App을 만들 때 발급. 라이선스 키 발급 요청에 사용 | 열람 권한자와 교체 절차 |
| Callback URL 서버 | 고객사가 운영. 접근 권한 검사에 응답하고 재생 보고를 받음 | 가용성, Authorization 문자열 검증 여부 |
| 플레이어 | PlaynPlay App, Android SDK, iOS SDK. DRM 설정의 App ID·사용자 ID로 재생 요청 | 배포 중인 앱과 SDK의 버전 |
접근 권한 검사 요청에는 App ID, 사용자 ID, 기기 ID, 미디어 URL, userData, 다운로드 여부가 실립니다. 콘솔에 Authorization 값을 넣어 두면 서버는 요청 헤더의 Bearer 토큰으로 호출한 쪽을 확인할 수 있습니다. 필드별 판정 규칙과 시험 사례는 접근 권한 서버 설계에서 이어집니다.
판정 결과 네 가지가 사용자에게 닿는 모습
result에 넣는 값은 넷입니다. 허용할 때는 접근 만료 일시(expiresOn)를 Unix epoch time 형식으로 붙여야 합니다.
| result | 문서의 뜻 | 사용자 쪽 결과 |
|---|---|---|
| Ok | 접근 권한 있음 | 재생이 진행됩니다. 함께 보낸 만료 일시가 그 권한의 끝입니다. |
| Expired | 접근 권한 만료됨 | 이름이 대응하는 권한 만료 오류를 받으니 기간 연장 안내를 붙입니다. |
| NoRights | 접근 권한 없음 | 권한 없음 오류를 받으니 수강 신청이나 구매 화면으로 안내합니다. |
| DeviceLimitExceeded | 디바이스 제한 초과 | 기기 제한 초과 오류를 받으니 기기 정리 방법을 안내합니다. |
응답 본문은 result와 expiresOn 두 필드로 된 JSON이며, 형식 원문은 Callback URL 문서의 접근 권한 검사 항목에서 볼 수 있습니다. 재생 도중에는 진행 상태 보고 응답으로 PlaybackLimitExceeded를 돌려줄 수 있습니다. 배수 제한이나 재생 횟수 같은 한도를 넘겼을 때 쓰며, 재생 제한 초과 오류로 처리됩니다. 한도 설계는 재생 정책, 기기 기준은 계정 공유 방지에 있습니다.
내려받은 파일에 걸리는 세 겹의 기한
다운로드 파일은 발급 때의 판정, 기기 안의 오프라인 기한, 만료 일시로 묶입니다. 세 값이 서로 어긋나지 않게 정해야 합니다.
-
offline: true
발급 단계의 구분
접근 권한 검사 요청의 offline 값이 true면 다운로드 콘텐츠에 대한 요청입니다. 서버는 스트리밍과 다운로드를 다른 기준으로 판정할 수 있습니다.
-
offlineAccessPeriod
기기 안에서 열리는 기간
웹·PC의 Agent 설정은 초 단위입니다. 값을 비워 두면 기한 없이 열리고, 0을 넣으면 오프라인에서 열리지 않습니다. Android·iOS SDK는 같은 이름의 값을 Duration 형식으로 받습니다.
-
expiresOn
기기에서 읽는 만료 일시
재생 정보 저장소(PlaybackInfoRepository)를 쓰면 Android·iOS 앱이 미디어별 만료 일시를 꺼낼 수 있습니다. 다운로드 목록에 남은 기간을 띄워 두면 만료 직후의 문의가 줄어듭니다.
-
2026.02.02
키 저장 방식 개선
이날 Android·iOS SDK에서 다운로드 파일의 DRM KEY 저장 방식이 개선됐습니다. 다운로드를 여는 서비스라면 이후 버전으로 보안 점검을 하세요.
기한이 지나거나 권한이 없으면 Android·iOS 앱은 오프라인 접근 권한 만료, 오프라인 접근 권한 없음 오류를 따로 받습니다. 저장 위치와 다운로드 화면은 다운로드·오프라인에서 다룹니다.
단계별로 보는 라이선스·권한 오류
오류가 어느 단계에서 났는지 알면 고객센터와 개발팀 중 누가 먼저 볼지 정할 수 있습니다.
| 단계 | 오류 이름 (PC 커스텀 페이지 / Android / iOS) | 먼저 볼 곳 |
|---|---|---|
| 라이선스 받기 | LicenseServerConnectionFailed (PC), LicenseNotFound / LicenseNotFoundException / licenseNotFound, iOS noLicenseData | 사용자 네트워크, 앱 버전 |
| 라이선스 확인 | LicenseCheckFailed / LicenseCheckFailedException·LicenseCheckFailureException / licenseCheckFailed | 재시도 뒤에도 반복되면 기술 지원 |
| 권한 판정 | NoAccessRights, AccessRightsExpired, Unauthorized (세 환경) | 고객사 서버의 응답 기록 |
| 세션 | SessionNotFound, SessionClosed (세 환경) | 콘솔 세션 관리 |
| 오프라인 | Android NoOfflineAccessRightsException·OfflineAccessRightsExpiredException, iOS noOfflineAccessRights·offlineAccessRightsExpired | 다운로드 때 넣은 오프라인 기한 |
(세 환경)으로 적은 이름은 PC 기준이며, Android는 뒤에 Exception이 붙고 iOS는 첫 글자가 소문자입니다(예: noAccessRights). PC 커스텀 페이지는 onSessionError의 type 값으로 받습니다. Android는 다운로드 실패 사유에도 권한 만료·권한 없음·Unauthorized를 구분해 남깁니다. 학습자 문구와 담당 배정은 오류 처리 가이드에 있습니다.
승인 회의에서 고객사가 정할 네 가지
제품이 정해 주지 않는 값입니다. 오픈 전에 결정 내용을 문서로 남겨 두기를 권합니다.
-
User ID
사용자 ID 체계
사용자 ID는 모든 Callback 요청에 실려 고객사 서버로 갑니다. 이메일이나 전화번호 대신 회원 고유번호처럼 그 자체로 개인정보가 드러나지 않는 값을 쓰세요.
-
expiresOn
만료 일시의 기준
수강 종료일, 대여 종료 시각, 계약 만료일 중 무엇을 넣을지 상품별로 정합니다. 기한이 없는 소장 상품에 넣을 값도 미리 합의합니다.
-
Offline
오프라인 기한
남은 수강 기간보다 길게 잡으면 권한이 끝난 뒤에도 파일이 열릴 수 있습니다. 대외비 영상은 0으로 두어 다운로드본을 오프라인에서 열지 못하게 합니다.
-
Server
Callback 서버 운영
권한 판정이 고객사 서버에 있으므로 이 서버의 가용성이 곧 재생 가용성입니다. 장애 때의 동작과 응답 지연 기준은 벤더와 확인하고, 개강일처럼 요청이 몰리는 날의 용량도 계산해 두세요.
유출 경로 전체에서 이 단계가 차지하는 자리는 보안 기능 개요, 검토 질문 목록은 보안 검토 가이드에 있습니다.
DRM·라이선스 FAQ
-
암호화하지 않은 파일도 같은 플레이어로 내보낼 수 있나요?
됩니다. PlaynPlay 설정 안내는 DRM을 적용하지 않은 파일의 서비스도 허용합니다. 공개 강의는 일반 파일로, 유료·내부 영상은 패키징 대상으로 나누는 기준을 먼저 세우세요.
-
서비스가 여러 개면 키도 나눠야 하나요?
서비스마다 App을 만들면 요청마다 appId가 달라져 서버가 서비스를 구분합니다. 콘솔은 2개 이상의 서비스를 한곳에서 관리합니다.
-
수강 기간을 연장하면 파일을 다시 만들어야 하나요?
파일은 그대로 둡니다. 기간은 판정 응답이 정하므로, 서버의 수강 기록을 고친 뒤 다음 라이선스 발급 때 새 만료 일시와 함께 Ok를 돌려주면 됩니다.
-
판정 기록은 어디에 남겨야 하나요?
콘솔의 세션 관리와 사용자 관리에서는 재생 기록을 봅니다. 왜 허용하거나 거절했는지는 고객사 서버만 알기 때문에, 요청마다 userId, mediaUrl, deviceId, 돌려준 result와 시각을 서버 로그로 남기세요.
-
패키징을 외부 제작사에 맡겨도 되나요?
패키징 도구는 콘솔에서 내려받아 ndrmconfig 파일과 함께 씁니다. 도구와 설정 파일을 사외로 넘기기 전에 취급 기준을 벤더와 확인하고, 가능하면 고객사가 관리하는 PC나 서버에서 돌리기를 권합니다.
-
환불하거나 퇴사한 사람은 언제부터 못 보나요?
판정 요청은 라이선스 발급 때 오므로, 회수 결과는 그 사용자의 다음 발급 요청에 NoRights를 돌려주는 시점부터 반영됩니다. 이미 받아 둔 파일은 오프라인 기한을 짧게 잡아 대비합니다.
PlaynPlay 도입을 위한
기술적 지원과 서비스를 제공합니다.
제품 문의부터 데모 시연까지, 모든 지원을 위해 세일즈 및 기술 지원 팀이 준비되어 있습니다.
-
제품 및 도입 문의
도입 범위, 일정, 견적을 상담합니다. 서비스 형태와 사용자 규모를 알려주시면 맞는 연동 방식과 보안 설정을 제안합니다.
-
Trial 신청
PlaynPlay의 기능을 먼저 테스트해 보세요. 트라이얼 기간 동안 귀사의 제품과 PlaynPlay를 연동하고 성능과 기능을 직접 검증할 수 있습니다.
-
PlaynPlay 기술 문의
SDK 연동, Callback URL 설계, DRM 패키징 중에 생기는 질문에 기술팀이 답합니다. 공개된 개발 문서와 샘플 프로젝트도 함께 확인하세요.
가이드
가이드
기능