본문으로 건너뛰기

안티 패턴 (자주 하는 실수)

모바일 앱 내에서 JWT URL 직접 생성

안티 패턴

보안 키가 포함된 JWT 서명 로직을 모바일 클라이언트 앱(Android) 소스 코드에 직접 구현하는 경우

  • 문제점: 보안 키가 외부로 유출될 수 있어 심각한 보안 취약점이 발생합니다.
  • 올바른 방법: JWT는 반드시 고객사의 서버에서 발급한 후, 모바일 앱에 전달하는 구조로 구현해야 합니다.

unload(mck) 메서드를 일시 중단 목적으로 오용

안티 패턴

콘텐츠 다운로드를 일시적으로 중단하기 위해 unload 메서드를 호출하는 경우

  • 문제점: unload는 다운로드를 취소하는 동작이므로, 다운로드 재개 시 처음부터 다시 다운로드됩니다.
  • 올바른 방법: 부분 재개(이어받기) 기능이 필요하다면 별도의 진행 상태 추적과 함께 SDK의 resume 동작을 직접 확인하세요.

DRM 만료 콘텐츠 재생 시 파일 전체를 자동 재다운로드

안티 패턴

DRM 라이선스가 만료되었을 때, 영상 파일 자체를 다시 다운로드하도록 구현하는 경우

  • 문제점: 불필요한 네트워크 트래픽이 발생하고 사용자 다운로드 대기 시간이 길어집니다.
  • 올바른 방법: 영상 파일 재다운로드 없이, updateDownloadDRMInfo 메서드를 호출하여 DRM 라이선스만 갱신하면 됩니다. 자세한 사항은 6. DRM 라이선스 갱신 문서를 참고하세요.

Android 10(API 29) 이상에서 FOREGROUND_SERVICE_TYPE_DATA_SYNC 누락

안티 패턴

Android 10 이상 환경을 타깃팅하면서 백그라운드 다운로드 서비스에 포그라운드 서비스 타입을 명시하지 않는 경우

  • 문제점: 다운로드 중 앱이 백그라운드로 진입할 때 SecurityException이 발생하며 다운로드가 강제 중단됩니다.
  • 올바른 방법: startForeground()를 호출할 때 포그라운드 타입을 명시하고, AndroidManifest.xml의 서비스 선언부에도 아래와 같이 타입을 추가해야 합니다. 자세한 사항은 1. 다운로드 준비 문서를 참고하세요.

콜백 리스너(Listener) 등록 및 해제 누락

안티 패턴

Activity 또는 Service의 라이프사이클에 맞춰 콜백 리스너의 등록과 해제를 짝지어 처리하지 않는 경우

  • 문제점: 메모리 누수가 발생하거나, 이미 파괴된(Destroyed) 컴포넌트로 콜백이 전달되어 앱이 크래시(Crash)될 수 있습니다.
  • 올바른 방법: 라이프사이클에 맞춰 onCreate()에서 register*Listener를 호출했다면, 반드시 onDestroy()에서 unregister*Listener를 호출하여 해제해 주어야 합니다.

가용 용량 확인 없이 콘텐츠 다운로드 시작

안티 패턴

사용자 디바이스의 남은 저장 공간을 확인하지 않고 큰 용량의 콘텐츠 다운로드를 시작하는 경우

  • 문제점: 다운로드 진행 도중 저장 공간이 가득 차면 ERROR_WRITE_FILE 에러와 함께 다운로드가 실패합니다.
  • 올바른 방법: 다운로드를 시작하기 전에 Utils.getAvailableMemorySize(path) 값이 콘텐츠 파일 크기와 최소 여유 공간의 합산 값 이상인지 확인하는 것을 권장합니다.

다운로드 진행률을 setDownloadPercent로 직접 임의 설정

안티 패턴

앱 코드에서 임의로 KollusContent.setDownloadPercent() 등의 Setter 메서드를 직접 호출하여 진행률을 강제 변경하는 경우

  • 문제점: 해당 메서드는 SDK 내부 콜백 흐름에서 데이터를 가공하기 위해 사용하는 내부 호출용 메서드입니다. 외부에서 임의로 수정하면 SDK 데이터 일관성이 깨지고 오작동을 유발할 수 있습니다.
  • 올바른 방법: 다운로드 진행률은 SDK가 제공하는 공식 콜백 리스너를 통해 전달받은 값만 전송 및 표기해야 하며, 앱에서 직접 수정해서는 안 됩니다.