한국의 개발자들을 위한 Google for Developers 국문 블로그입니다.
Android에서의 최신 백그라운드 실행 방법을 알려드립니다
2018년 12월 3일 월요일
<원문 링크는
이곳
에서 확인할 수 있고 번역 리뷰에는 이승민(Android GDE)님이 도움주셨습니다.>
게시자: 파트너 개발자 어드보케, 파트너 DevRel, Luiz Gustavo Martins
지난 수년 동안 Android에서의 백그라운드 작업 실행은 진화해 왔습니다.
최신 앱을 만들기
위해서는 최신 유행에 따른 백그라운드 작업 실행 방법을 학습하는 것은 중요합니다.
앱은 언제 백그라운드에 있게 되는가?
백그라운드 실행이 무엇인지 알아보기 전에, Android가 앱이 포그라운드에 있다고 판단하는 시점에 대해 분명히 이해할 필요가 있습니다. 다음 조건 중 하나라도 참일 경우 앱이 포그라운드에 있는 것으로 간주합니다.
액티비티가 시작되든 일시 중지되든 상관없이, 앱에 보이는 액티비티가 있는 경우.
앱에
포그라운드 서비스
가 있는 경우.
또 다른 포그라운드 앱이
앱의 서비스 중 하나에 바인드하거나
앱의
콘텐츠 제공자
중 하나를 사용하는 경우. 예를 들면 다른 앱 또는 시스템이 다음을 바인드할 경우 앱은 포그라운드에 있게 됩니다.
IME
배경화면 서비스
알림 리스너
음성
또는
텍스트
서비스
차량에 음악을 스트리밍 중일 경우 음악 앱 (Android Auto-특수한 경우)
위의 어떤 조건에도 해당하지 않는 경우 앱이 백그라운드에 있는 것으로 간주됩니다.
백그라운드 실행 변경 사항
백그라운드에서 작업 실행은 RAM 이나 배터리 같은 기기의 한정 리소스를 소모하게 됩니다. 이는 사용자 환경에 부정적으로 작용할 수 있습니다. 예를 들면 백그라운드 작업은 기기의 배터리 수명을 저하시킬 수 있으며 사용자는 동영상 시청, 게임 실행, 카메라 사용 등을 할 때 기기 성능이 저하됨을 경험할 수 있습니다.
배터리 수명을 향상시키고 더 나은 사용자 환경을 제공하기 위해 Android는 여러 번의 출시를 거쳐 점차적으로 백그라운드 실행에 대한 제한을 설정했습니다. 이러한 제한에는 다음 사항이 포함되어 있습니다.
잠자기 및 앱 대기
(화면이 꺼져있고 기기가 유휴 상태이며 충전 중이지 않은 경우 앱 행동을 제한)
백그라운드
위치 제한
(백그라운드 앱이 사용자의 현재 위치를 검색할 수 있는 빈도를 제한)
백그라운드 서비스 제한 사항
(숨겨지거나 보이지 않는 상태에서 CPU/네트워크를 실행하고 소비하지 않도록 제한)
최신 제한 사항에는 사용자가 사용하지 않은 앱에서 사용 가능한 기기 리소스를 제한할 수 있는
앱 대기 버킷
, 앱이 잘못된 동작을 나타내는 경우 앱이 백그라운드의 시스템 리소스에 접근하는 것을 제한하도록 시스템이 사용자에게 알리는
앱 제한
, 그리고 다수의
배터리 세이버 개선 사항
이 있습니다.
사용 사례 및 해결 방법
백그라운드 실행을 구현하는 데 사용할 도구를 결정하려면 개발자가 수행하고자 하는 사항과 제한 사항에 대해 명확히 이해해야 합니다. 다음 플로차트는 판단에 도움이 될 수 있습니다.
WorkManager
는 모든 OS 백그라운드 실행 제한을 감안하여 백그라운드 실행에 권장되는 솔루션입니다. 작업이 지연되어도 반드시 실행되어야 하는 경우 WorkManager를 사용해야 합니다. 이 API를 사용하면 작업(
일회성
또는
반복적
작업)을 예약할 수 있으며
작업을 묶고 결합
할 수 있습니다. 또한 기기가 유휴 상태 또는 충전 중인 경우 트리거하거나 콘텐츠 공급자 변경 시의 실행과 같이 실행
제한 사항
을 적용할 수도 있습니다.
로그를 압축하여 서버에 업로드해야 하는 경우를 예로 들 수 있습니다. 이를 위해서 다음 두 개의
작업 요청
을 생성할 수 있습니다.
첫째, 파일을 압축합니다. 이 단계에서는 기기를 충전해야 한다는 제한 사항을 추가할 수 있습니다.
둘째, 파일을 서버에 업로드 합니다. 이 요청의 경우 연결이 올바를 때만 작업이 트리거되도록 네트워크 연결 제약 조건을 추가해야 합니다.
두 가지 작업을 모두 큐에 넣고 WorkManager는 앱이 필요한 리소스에 액세스할 수 있을 때 작업을 수행합니다.
WorkManager의 또 다른 장점은 전력 관리 기능들을 고려한다는 것입니다. 지정된 시간에 작업이 실행되도록 예약하고 그 시간에 장치가 잠자기 상태에 있는 경우, WorkManager는 제약 조건이 충족되거나 잠자기가 해제된 후
유지관리 기간
동안 작업 실행을 시도하게 됩니다.
새로운 온라인 콘텐츠에 대한 동기화 같은 외부 이벤트에 대응하여 장기 실행 작업을 예약하려면
Firebase 클라우드 메시징
을 사용하여 앱에 이를 알린 후 WorkManager에서 컨텐츠 동기화를 위한 작업 요청을 생성합니다. "
FCM으로 사용자에게 알리기
"에서 이에 대해 더 자세히 알아볼 수 있습니다.
음악/동영상 재생 또는 탐색 등의 경우 사용자가 앱을 종료하거나 화면을 끄더라도 사용자 시작 작업을 지연없이 완료해야 하는 경우
포그라운드 서비스
를 사용해야 합니다. (이 시리즈의 다음 블로그 게시물에서 이러한 사용 사례에 대해 자세히 다룹니다.)
행동을 유도하고 사용자 상호 작용을 포함하며 지연될 수 없는
정확한
시점에 작업을 실행해야 하는 경우
AlarmManager
를 사용하십시오(더 구체적으로는
setExactAndAllowWhileIdle
방식). 다음은 시간 알람의 예시입니다.
약 복용 시간 알림
TV 프로그램 시작 시간 알림
알람이 트리거되는 경우 작업을 완료할 수 있는 시간은 수 초에 불과하며 앱이 네트워크에 액세스하지 못할 수도 있습니다(예:
잠자기
실행 중 또는 앱 대기 버킷으로 인해) 네트워크 또는 장기 작업 실행이 반드시 필요한 경우, WorkManager를 사용하십시오.
절전 모드 해제
알람이 트리거될 때마다 기기는 저전력 모드에서 해제되어 시간 경과에 따라 배터리 수명에 상당한 영향을 미칠 수 있는
부분 가동 잠금
상태를 유지합니다. 이는
Google Play Console
를 통해 제공되는
Android Vitals
에 강조된 과도한 절전 모드 해제 통계를 통해 모니터링할 수 있습니다.
요약:
사용 사례
예
해결 방법
지연 가능한 작업의 실행 보장
서버에 로그 업로드
암호화/업로드할 콘텐츠 복호화/다운로드
WorkManager
외부 이벤트에 대한 대응으로 시작된 작업
이메일과 같은 새로운 온라인 콘텐츠 동기화
FCM
+WorkManager
사용자가 앱을 종료하더라도 즉시 실행해야 하는 사용자 시작 작업 지속
Music player
활동 추적
대중교통 네비게이션
포그라운드 서비스
정확한 시간에 알려야 하는 작업 같이 사용자 상호작용이 포함된 행동의 유도.
알람 시계
약 복용 시간 알림
TV 프로그램 시작 시간 알림
AlarmManager
사용자가 배터리를 절약하면서 즐길 수 있는 멋진 앱을 만들 수 있도록 백그라운드 실행을 신중하게 사용하십시오. Android의 백그라운드 작업 실행에 대해 더 알고 싶으시면
Android 개발자 사이트
의 다양한 콘텐츠를 참조하십시오.
참고: WorkManager는 아직 미리보기로 공개 중입니다. 지금 당장 다른 해결 방법이 필요한 경우, WorkManager 적용에 제한이 있기는 하지만
JobScheduler
를 사용해야 합니다. Jobscheduler는 Android 프레임워크의 일부로, Android API 21 이상에서 사용 가능하며, WorkManager는
API 14
이상에서 구동합니다.
감사의 말: 이 블로그 게시물은 Android Framework와 DevRel 팀 간의 협업으로 제작됩니다.
Firebase 인앱 메시지부터 Crashlytics 통합까지 수많은 즐거운 Firebase업데이트들을 전부 소개합니다
2018년 11월 30일 금요일
<원문 링크는
이곳
에서 확인할 수 있고 번역 리뷰에는 김태호(Google)님이 도움주셨습니다.>
작성자: Francis Ma
, 제품 책임자
Firebase에서는 모바일 앱 팀의 성공을 돕겠다는 걸 미션으로 삼고 있습니다. 이 팀의 성공이란 곧 규모와 복잡성에 상관없이 모든 회사와 팀을 지원할 만한 탁월한 능력을 갖추는 것을 뜻합니다. 지난 2, 3년간 실시간 데이터베이스에서 출발해 완전한 모바일 앱 개발 플랫폼으로 상당한 성장을 이루었습니다. Firebase는 Google Cloud를 기반으로 하므로 수많은 Google 제품의 탄탄한 토대가 되는 모든 기술적 규모, 엔터프라이즈급 액세스 제어와 관리, 머신러닝의 강점 등을 그대로 누릴 수 있습니다. 더 나은 앱을 빌드하고 앱 품질을 개선하고 비즈니스가 성장하도록 도와줄 몇 가지 새로운 제품과 기능을 오늘 이렇게 소개하게 되어 설렙니다.
비즈니스 성장
Firebase는 사용자와 관계를 맺고 비즈니스를 성장시키는 데 도움이 되는 여러 가지 제품이 있습니다.
Firebase 예측
은 머신러닝을 기반으로 타게팅을 할 수 있게 도와주며, Remote Config를 사용하여 앱 업데이트 없이 앱을 최적화 하거나
클라우드 메시징
을 사용하여 앱 사용이 뜸하거나 떠난 사용자가 다시 앱을 사용하게끔 하는 등 다양한 제품이 다양한 역할을 합니다. 이러한 다양한 제품들에 더불어, Firebase 인앱 메시지라는 새로운 제품이 더 추가되었습니다.
Firebase 인앱 메시지 소개
알림 기능은 사용자를 다시 앱으로 돌아오게 해주는 훌륭한 도구입니다. 그런데 사용자가 의미 있는 액션을 취하지 않은 채 여러 화면을 넘기다가 우연히 앱을 실행한 것이 아니라 앱을 사용하려는 분명한 의도를 가지고서 올바른 방법으로 앱과 상호 작용하고 있음을 어떻게 확인할 수 있을까요? 어떻게 앱 사용 환경을 통해 사용자를 자연스럽게 앱으로 안내할 수 있을까요?
앱을 능동적으로 사용 중인 앱 사용자에게 대상이 분명히 지정되고 상황에 맞는 메시지를 보냄으로써 그들을 올바르게 안내하는 데 도움이 되는
Firebase 인앱 메시지
를 출시합니다. 이 제품을 통해 이제는 개발자가 가장 소중한 사용자, 즉 이미 앱과 활발히 상호 작용하고 있는 사용자와 적절히 소통하고 이러한 사용자가 앱을 사용할 때 사용자와 관련성 높은 정보, 쿠폰, 도움말 등을 노출함으로써 사용자의 참여도를 더욱 끌어올릴 수 있을 것입니다.
형식, 색상 및 CTA(Call-to-action)을 맞춤설정할 수 있으므로, 개발자가 앱을 사용해 브랜드에 관한 메시지를 계속 노출할 수 있습니다. 인앱 메시지는 Firebase용 Google 애널리틱스 및 Firebase 예측과도 통합되므로, 앱 버전과 같은 사용자 프로필, 버튼 클릭과 같은 현재 동작 또는 앱을 제거할 위험과 같이 예측되는 미래의 행동을 기반으로 메시지를 보낼 대상을 쉽게 지정할 수 있게 해줍니다. 인앱 메시지는 오늘 출시되기 시작하며, 자세한 내용은
관련 문서를 확인
해 보세요.
FCM 콘솔과 API에 대한 보고 기능 향상
FCM(Firebase 클라우드 메시징) 콘솔과 API를 사용하여 iOS, Android 및 웹을 통해 사용자에게 알림 및 데이터 메시지를 보낼 수 있지만, 이처럼 다양한 모든 플랫폼에서 알림이 얼마나 효과를 발휘하는지 파악하기 어렵습니다. 새로운 FCM 보고 대시보드는 여러 팀이 전송, 노출 횟수, 열기와 같은 주요 메시징 통계를 중앙에서 볼 수 있는 공간을 제공하므로, 메시지가 얼마나 효과를 발휘하는지 쉽게 이해할 수 있습니다. 이 모든 통계를 집계하는 일 외에, 보고 대시보드는 최초로 콘솔에서 API 전송에 대한 정보도 제공합니다.
개발자는 이 정보를 사용하여 새로운 업데이트를 발표한 후 전송 현황을 살펴보는 등, 알림 기능의 상태를 모니터링할 뿐만 아니라 알림 전송과 전송된 알림을 사용자가 열어봤는지에 관한 정보를 이용해 알림 메시지 제목이 메시지를 열어본 비율에 미치는 영향을 모니터링하는 등 알림 전략을 개선할 수도 있습니다. FCM 보고 대시보드를 사용하면 날짜, 플랫폼(iOS 또는 Android) 및 유형(데이터 메시지 또는 알림)을 기준으로 알림 전송을 필터링할 수 있으므로 찾으려는 데이터를 수월하게 찾을 수 있습니다.
원격 구성용 변경 내역
과거에는 어떤 원격 구성 값을 사용했는지 확인하려면 이를 수동으로 추적해야 했습니다. 한 명으로 구성된 팀에서는 이 작업이 그저 좀 번거로운 일일 뿐이었지만, 다양한 역할을 맡은 다수의 개발자가 한꺼번에 프로젝트의 원격 구성을 변경할 수도 있는 규모가 큰 팀에서는 거의 불가능한 일이었습니다.
원격 구성에 변경 내역 기능을 추가해 개발자에게 큰 도움을 줄 수 있게 되어 무척 기쁩니다. Firebase는 최장 90일 동안 한 프로젝트에 대해 300가지의 원격 구성 버전을 저장합니다. 각종 매개변수와 조건이 시간이 흐르면서 어떻게 변화했는지 알 수 있고, 이전 버전으로 롤백하고 싶을 경우에도 롤백 버튼만 클릭하면 되므로 너무나 간편해졌습니다.
이제 원격 구성용
변경 내역
기능을 배포하기 시작할 것이며, 이틀 정도면 모든 프로젝트에 완벽히 적용할 수 있을 것입니다.
기술 문서
를 클릭해 자세한 내용을 살펴보세요.
원격 구성의 변경 내역
앱 품질 개선
작년에 Fabric 팀이 Firebase에 합류했을 때 우리 비정상 종료 보고와 디버깅을 위한 도구의 빌드에 관한 Fabric 팀의 전문 지식을 배울 수 있게 되어 무척 고무되었습니다. 지난 18개월 동안 Firebase를 앱 품질 개선을 위해 사용할 수 있는 플랫폼으로 만드는 데 있어 큰 진전을 이루었고, 여기에는 Fabric의 Crashlytics를 Firebase에 접목하는 성과도 포함됩니다. 기쁜 마음으로 Crashlytics의 여러 가지 개선 사항을 발표합니다. 이처럼 개선된 기능 덕분에 Crashlytics를 개발자 팀에서 사용하는 기존 도구와 더욱 원활하게 통합할 수 있습니다.
Crashlytics 통합으로 생산성 대폭 향상
그 동안 개발자들로부터 비즈니스의 성공을 위해 다양한 도구에 의존한다는 얘기를 자주 들어왔습니다. 개발자 여러분이 개발에 몰두하고 있는 곳에서 개발자와 만나서 개발 작업에 최상의 도구를 사용할 수 있도록 해드리고 싶습니다. 그것이 바로 우리가
Firebase Crashlytics
를 위한 두 가지 새로운 통합을 선보이는 이유입니다.
무엇보다도 먼저, 이제는 Firebase에서
BigQuery
로 Crashlytics 데이터를 내보낼 수 있습니다. 따라서 사용자설정 키와 값, 로그, 사용자 ID 등의 모든 메타데이터를 포함하여, 혼동을 일으킬 만한 요소를 제거한 비정상 종료 보고서에 대해 자체 분석을 실행할 수 있습니다. 그런 다음,
Data Studio
또는 개발자가 사용하는 다른 비즈니스 분석 도구로 데이터를 시각화하고 추세를 확인할 수 있습니다. 또한 자체적인 보존 및 삭제 정책을 설정하여 BigQuery에 있는 데이터의 소유권을 확보할 수도 있습니다.
둘째, Firebase에서 보고된 비정상 종료를 바탕으로 Jira 이슈를 생성할 수 있게 해주는 Jira 와의 통합 기능을 선보입니다. Slack과의 기존 통합과 결합하면 개발 팀에서 이미 사용 중인 도구를 이용해 해결책을 연구 중인 비정상 종료를 추적할 수 있습니다. 앞으로 몇 주일에 걸쳐 Jira 통합 기능을 배포할 예정이며, 지금 바로 Firebase 통합을 관리하고 싶으시면
콘솔의 설정 탭
으로 이동해 보세요.
더 나은 앱 빌드
Firebase의 DNA에 핵심이 되는 요소는 여러분과 같은 개발자가 모바일 백엔드 인프라를 빠르고 쉽게 빌드하도록 도와주는 일련의 제품입니다. 어쨌든, 실시간 데이터베이스가 그 출발점이었습니다. Google Cloud Platform과 긴밀히 협력하여 Cloud Firestore 및 Cloud Functions와 같은 차세대 서버리스 백엔드 도구를 구축했으며, 이러한 제품을 계속 개선해 나갈 것입니다. 또한 Firebase Hosting에 대해서도 두어 가지 향상된 기능을 선보일 예정인데, 웹사이트를 더 효율적으로 빌드하는 데 도움이 되시길 바랍니다.
훨씬 더 안정적이고 확장 가능한 서버리스 백엔드
몇 주 전에 열린 Cloud Next 2018에서 Firebase용 Cloud Firestore와 Cloud Functions의 여러 가지 개선된 기능을 소개한 바 있습니다. 이제는 Cloud Firestore를 사용해 초당 최대 쓰기 횟수 10,000회와 동시 사용자 수 1백만 명까지
데이터베이스를 확장
하여 그 어떤 트래픽 급증도 원활하게 처리할 수 있습니다.
Cloud Functions는 현재 GA 단계
로, 프로덕션 환경에서 사용할 준비가 완료되었고
SLA
로 예측 가능한 서비스를 보장해 드립니다. 전 세계 어떤 지역에 인프라를 구축하려고 생각 중이시라면 Cloud Firestore와 Cloud Functions를 고려해 보세요. 앞으로 몇 개월만 지나면 이 둘 모두 유럽과 아시아에서 새로운 지역을 지원할 예정입니다.
여러 웹사이트를 수월하게 호스트하고 업데이트
우리가 개발자로부터 늘 들어온 또 한 가지 피드백 사항은 Firebase 프로젝트와 호스트된 웹사이트 사이에 일대일 관계가 늘 성립하는 건 아니라는 점입니다. 앞으로 Firebase Hosting에 개선된 기능을 배포할 예정이며, 이를 통해 개발자 여러분은
한 프로젝트 내에 여러 웹사이트를 호스트
할 수 있을 것입니다.
그 밖에도, 사이트로 업데이트를 푸시할 때 이제는 Firebase CLI(v4.1.0부터)가 출시 버전 사이에 변경된 파일만 업로드합니다. 이에 따라 업데이트 프로세스 속도가 크게 빨라지므로 더 효율적으로 작업할 수 있게 되었습니다.
더욱 정교해진 콘솔
콘솔의
Project Overview
페이지에 중요 업데이트가 이루어졌는데, Firebase의 모든 다양한 부분에서 가져온 데이터를 함께 묶어 앱, 서비스 및 비즈니스의 상태를 한 번에 볼 수 있도록 기능이 향상되었습니다. 항상 존재했던 분석 및 비정상 종료 데이터 외에, 이제는 성능 문제, 알림, A/B 테스트 상태 그리고 다른 무엇보다도 Functions, Hosting 및 Storage와 같은 다른 Firebase 서비스에 대한 사용 및 상태 데이터도 볼 수 있습니다.
콘솔의 Latest Release 섹션에 이제는 라이브 데이터가 있다는 점도 아시게 될 겁니다. 이 점은 콘솔의 분석 기능에 대해 개선해달라는 요청이 가장 많았던 사항 중 하나였는데, 드디어 개발자 여러분께 이 기능을 제공할 수 있게 되어 무척 뿌듯합니다.
이처럼 개선된 모든 기능이 오늘 배포되기 시작하며 2주일 정도 내에 모든 개발자가 이용할 수 있게 될 것입니다.
Firebase 커뮤니티에 참여해주세요
배경이나 소속 회사, 개발 능력의 수준과는 무관하게 모든 개발자를 따뜻하게 환영하는 커뮤니티를 만들어 가기 위해 노력하고 있습니다. 여러분의 피드백과 의문 사항은 Firebase의 미래를 만들어가는 데 더 없이 소중한 자양분이므로, 역시 늘 그렇듯이
지원 채널
을 통해 저희에게 소중한 말씀 많이 들려주시기 바랍니다.
지금 DevFest OnAir 등록하실 수 있습니다!
2018년 11월 29일 목요일
게시자: Erica Hanson, Dev-rel팀 프로그램 매니저
최초의 공식 DevFest OnAir를 발표하게 되어 무척 기쁩니다! DevFest OnAir는 2018년 12월 11일에 열리는 온라인 컨퍼런스로, 전 세계 곳곳에서 진행되는 DevFest 이벤트의 다양한 세션으로 구성됩니다. 커뮤니티의 주도로 열리는 이러한 개발자 세션은 Google 기술에 관한 커뮤니티, 네트워킹 및 학습에 중점을 둔
GDG(Google Developer Groups)
가 주관합니다. 전 세계적으로 500여 개의 커뮤니티가 참가하고 곳곳에서 DevFest 이벤트가 열리는 DevFest OnAir에서는 이러한 글로벌 이벤트를 최초로 온라인으로 전달하게 됩니다!
독점 콘텐츠
DevFest OnAir는 DevFest 커뮤니티의 콘텐츠 외에 Google의 독점 콘텐츠도 포함합니다. 언제든 다음과 같이 최대 세 가지 트랙에서 콘텐츠를 시청하실 수 있습니다.
클라우드
모바일
음성, 웹 등
세션에서는 Android, Google Cloud Platform, Firebase, Google Assistant, Flutter, TensorFlow를 이용한 머신러닝, 모바일 웹 등의 여러 가지 제품을 다룹니다.
시간대에 맞는 세션을 골라 참가하세요.
어디에 계시든 상관없이, 누구라도 참가하실 수 있습니다. 24시간 내내 전 세계적으로 위와 같은 세 가지 방송을 주관해 내보낼 예정이므로, 자택이든 직장이든 어디서나 각자 편리한 시간에 참가하실 수 있습니다.
실시간으로 저희에게 질문해주세요.
활발한 대화를 이끌어내고 필요한 대답을 받을 수 있도록 온라인 이벤트 내내 라이브 Q&A 포럼이 열립니다.
🎁 참석자 선물
DevFest OnAir 중에 대화식 퀴즈에 참가하면 특별한 선물을 받을 수 있는 재미도 함께 누릴 수 있습니다!
12월 11일에 라이브로 방송을 보는 모든 참가자께는 1개월 무료
Qwiklabs
학습권을 드립니다.
지금 등록하세요
무료로 등록하실 수 있습니다.
여기
에서 등록하세요. DevFest 2018에 대한 자세한 내용은
여기
에서 알아보실 수 있고 근처에서 열리는 DevFest 이벤트 정보는
여기
에서 찾아보실 수 있습니다.
GDG는 Google 제품과 API에 관심이 있는 지역별 개발자 그룹입니다. 각 GDG 그룹은 최신 Google Developers 동영상을 시청하기 위해 몇 명이 함께 모이는 소규모 모임부터 데모, 기술 강좌 또는 해커톤을 포함한 대규모 모임까지, 개발자를 위한 다양한 기술 활동을 주관할 수 있습니다. GDG에 대한 자세한 사항은
여기
에서 알아보세요.
Twitter
와
YouTube
에서 저희를 팔로우 해주세요.
20세기 폭스에서 ML을 사용해 영화 관람객을 예측하는 방법
2018년 11월 29일 목요일
<원문은
이곳
에서 확인하실 수 있고 리뷰에는 강재욱(Machine Learning GDE) 님이 도움주셨습니다.>
영화 산업에서의 성공은 영화 팬을 끌어들이는 스튜디오의 능력에 달렸지만, 때로는 이것은 말처럼 쉽지 않은 일입니다. 그 이유는 영화 팬들은 관심사와 취향을 저마다 다양하게 가지는 그룹이기 때문입니다. 역사적으로, 영화 스튜디오는 특정 영화 시나리오에 투자 결정을 할 때 경험에 대한 의존도가 높았습니다. 하지만 이는 자칫 막대한 투자 리스크로 이어질 수 있으며, 특히 새롭게 등장한 원작에 투자할 때는 더욱 그러합니다. 이러한 스토리와 관람객을 매칭하는 반복적이고 복잡한 투자 프로세스를 20세기 폭스(20th Century Fox)의 사장이자 최고 데이터 전략가 겸 미디어 책임자인 Julie Rieger와 데이터 사이언스 SVP인 Miguel Campo-Rembado가 데이터를 이용하여 명확히 해보기로 결심했습니다.
머신러닝에 적합한 데이터 문제
영화 관람객의 시장 세분화에 대한 이해는 영화 스튜디오의 핵심 업무 중 하나입니다. 영화 스튜디오는 고객군을 정밀하게 분류하고 앞으로 만들 영화의 흥행을 예측하기 위해 오랫동안 고수준 데이터 프로세스에 투자해왔습니다. 하지만 기술 및 제도적 장벽 때문에 고객 레벨은 말할 것도 없고 세그먼트 레벨의 세부적인 예측도 여전히 난해한 영역으로 머물러 있었습니다. Miguel과 그가 이끄는 팀은 Google Cloud와 같은 파트너와 협력함으로써 이러한 장벽 중 일부를 걷어내기 위한 시도를 하였습니다. 이와 함께, 우리는 영화 팬에 대한 이해도를 높이기 위해 세분화된 고객 데이터와 영화 시나리오를 바탕으로 훈련된 사내 딥 러닝 모델을 개발했습니다. 이것은 개인정보가 철저히 보호되는 데이터 제휴 관계를 맺고, 다양한 유형의 영화에 대한 선호도 패턴을 파악하기 위한 것이었습니다. 18개월이 흐르면서 이러한 모델은 이제 중요한 비즈니스 결정을 할 때 당연히 고려하는 요소가 되었습니다. 이 딥러닝 모델은 영화의 톤, 핵심 관람객 및 확장 관람객과의 어피니티, 영화의 잠재적 재무 성과를 평가하기 위한 가장 객관적이고 데이터 기반이며 효과적인 지표 중 하나를 제공합니다.
이제 딥러닝 모델에 대해 더 자세히 알아봅시다! 대본텍스트 분석은 영화 관람객을 유인할 수 있는 추가적인 역동적 기제 없이 스토리의 주요 골격만 제시하였기 때문에 많은 정보를 얻기 어려웠습니다.
팀에서는 영화의 전체적 마케팅 캠페인에 있어 가장 중심적이고 단 하나의 요소로 남아 있는 영화 예고편을 연구하기 위해 첨단 컴퓨터 비전 기술을 사용할 방법이 있을지 궁금해했습니다. 신작 영화의 예고편 공개는 흥행 성공 여부를 가늠하는 데 도움이 될 수 있는 무척 기대되는 이벤트이므로, 회사로서는 예고편이 영화 팬의 호기심과 흥미를 제대로 돋우도록 해야합니다. 이 목표를 달성하기 위해, 20세기 폭스 데이터 사이언스 팀은 Google의
Advanced Solutions Lab
과 손잡고 영화 예고편의 밀도 높은 표현을 학습하여 특정 예고편의 미래 영화 관람객을 예측하도록 도와주는 컴퓨터 비전 도구인
Merlin Video
를 만들었습니다.
데이터 파이프라인 디자인
팀에서 진행한 첫 단계는 이 도구를 뒷받침할 기술을 파악하는 작업이었습니다.
TensorFlow
딥 러닝 프레임워크와 함께
Cloud Machine Learning Engine
(Cloud ML Engine)을 선택해야 한다는 점은 분명했습니다. 관리형 서비스인 Cloud ML Engine은 모든 리소스 프로비저닝과 모니터링을 자동으로 처리해 주므로, 팀은 인프라 구성보다는 Merlin을 위한 딥 러닝 모델의 빌드에 집중할 수 있었습니다. Merlin은
Cloud Dataflow
와도 통합되므로
Data Studio
에서 완벽하게 보고서를 생성할 수 있습니다. 따라서 팀은 프로세스의 작동 방식을 더 깊이 이해할 수 있었습니다. 시스템의 일상적인 유지 관리(주로 데이터의 내재화)는 단순하고도 수월하여, 다른 사업 부문의 엔지니어가 개입할 필요 없이 데이터 사이언티스트가 전적으로 처리할 수 있습니다.
Merlin의 아키텍처 흐름도
팀은 알맞은 인프라를 갖춰 놓고 공개 YouTube 동영상 데이터세트인
YouTube 8M
에 대한 분석 작업을 시작했습니다. 이 데이터세트는 Google에서 미리 훈련한 모델을 포함하는데, 이 모델은 색상, 조명, 수많은 유형의 표정, 수천 가지의 물체, 여러 가지 풍경과 같은 동영상의 구체적 특징을 분석할 수 있습니다. 위 그림에서 보듯이, Merlin 아키텍처에서 첫 단계는 예고편에서 영화 선호도를 가장 정확히 예측할 수 있게 해주는 요소 결정에 대한 전처리로서, 이는 미리 정의된 특성을 파싱하는 작업입니다. 예를 들어 이전에 남성 액션 주연배우가 등장하는 영화를 주로 본 영화 팬이라면 역시 다음에도 비슷한 류의 영화를 볼 가능성이 더 높지 않을까요? 휴 잭맨(Hugh Jackman)이 울버린(Wolverine)으로 나온 20세기 폭스의 액션 영화
로건(Logan)
을 심층적으로 다루어봅시다. 아래에서 이 영화의 공식 예고편 중 12초 부분의 스냅샷을 볼 수 있습니다.
로건 공식 예고편, 12초
이 스냅샷에 대해 Merlin은 'facial_hair, beard, screenshot, chin, human, film'(얼굴_머리카락, 턱수염, 스크린샷, 턱, 사람, 영화)이라는 라벨을 반환합니다. Merlin은 전체 예고편을 초 단위로 분석한 후, 로건에 대한 최상위 라벨을 다음과 같이 표시합니다.
Fox의 도구 Merlin에서 캡처한 스크린샷: 태그 지정된 라벨(빈도를 내림차순으로 정렬)
20세기 폭스의 데이터 사이언스 팀은 로건의 라벨 분석이 할당된 후 다른 영화 예고편에서 이전에 생성된 라벨과 새로 분석한 결과를 비교하여 유사한 영화를 식별하고 싶었습니다. 아마도 로건의 관람객과 다른 액션 영화의 관람객 사이에 겹치는 부분이 있겠지만, 여기서의 도전과제는 두 가지 입니다.첫 번째 도전 과제는 예고편에서 라벨의 시간적 위치입니다. 즉, 예고편에서 특정 라벨이 발생하는 시점이 중요하다는 의미입니다. 두 번째 도전 과제는 이 데이터의 높은 차원성입니다. 특정 영화의 예고편에는 관람객의 관심사를 예측할 수 있는 수많은 요소가 있을 수 있으며, Merlin은 이 모든 요소를 동시에 분석하는 것이 목표입니다. Cloud ML Engine은 탄력성이 뛰어나므로, 데이터 사이언스 팀은 딥 러닝 모델의 무결성을 해치지 않고 신속히 반복 및 테스트를 수행할 수 있었습니다. 그 덕분에 Merlin은 몇 개월이나 몇 년이 아니라 단 며칠 만에 바로 프로덕션 단계로 진행 가능한 도구가 되었습니다.
특히, 분석 파이프라인은 이러한 개별 컴포넌트(라벨)를 데이터 사이언스 팀이 개발한 커스텀
신경망
으로 입력합니다. 이 맞춤 모델은 영화 예고편에서 라벨의 시간적 시퀀스를 학습합니다. 시간적 시퀀스(예: 어떤 대상에 대한 롱 테이크 대비 단속적인 숏 테이크)는 영화 유형, 영화 플롯, 주연배우의 역할, 영화 제작자의 영화 촬영술 관련 선택 사항에 대한 정보를 전달할 수 있습니다. 시퀀스 분석 데이터를 과거 고객 데이터와 결합하여 사용하면 고객의 행동을 예측할 수 있습니다. 분석 파이프라인은 거리 기반 협업 필터링(CF, collaborative filtering) 모델 과 로지스틱 회기 계층도 포함합니다. 이것은 모든 모델 출력을 함께 결합하여 영화 관람 확률을 생성합니다. 이 모델은 end-to-end로 훈련되며, 로지스틱 회귀의 손실함수 값이 훈련 가능한 모든 컴포넌트로 역전파 됩니다(가중치).
Merlin의 데이터 파이프라인은 새로 공개되는 예고편을 반영하기 위해 매주 새로 고쳐집니다. 파이프라인의 구조는 아래 다이어그램에 나와 있습니다.
데이터 사이언스 팀에서는 최종 단계를 위해
BigQuery
와 BigQueryML을 사용하여 Merlin이 수행한 수백만의 고객 예측 데이터를 다른 데이터 소스와 병합하여 유용한 보고서를 만들고 마케팅 캠페인을 위한 미디어 계획의 원형을 빠르게 작성합니다.
모델의 유효성 검사
다시 로건의 사례로 돌아가 '터프한' 남성 주연배우가 등장하는 액션 영화를 본 적 있는 영화 팬이 로건도 볼 가능성이 높을 것이라는 우리의 직관을 데이터로 확인 할 수 있을지 살펴봅시다. 우리는 영화 개봉 후에 특정 관람객이 이전에 본 영화에 관한 데이터를 처리할 수 있습니다. 아래 표에는 실제 영화 관람객 수 기준 상위 20개 영화(Comp ACT)와 예측 관람객 수 기준 상위 20개 영화(Comp PRED)를 비교한 결과가 나와 있습니다. 실제 영화 중 최상위 5개 영화(아래에서 녹색으로 표시)에 초점을 맞춰 이들 영화가 예측 열에도 나와 있는지 확인해봅시다. 실제 최상위 5개 영화가 전부 예측 결과에 포함되어 있는 걸 알 수 있습니다.
Merlin Video에서 얻은 실제 관람객 대비 예측 관람객의 분석 결과
표면적으로는 우리의 직관이 옳았습니다. 로건을 본 관람객 중 가장 큰 비중을 차지하는 계층은 실제로는 슈퍼히어로(우리가 이미 알고 있었던 부분)와 '터프한 남성 액션 주연배우'(우리가 확실히 알지는 못했던 부분)의 조합이었습니다. 매그니피센트 7(위에서 파란색으로 표시), 존 윅(위에서 녹색으로 표시), 터미네이터 제니시스(위에서 파란색으로 표시)처럼 예측 결과에서 '터프한 남성 액션 주연배우'가 등장하는 영화로 꼽힌 영화들은 실제 관람객 수를 기준으로 한 20대 영화 목록에도 포함되었습니다. 이러한 결과는 핵심 슈퍼히어로 관람객에 새로운 관람객이 '추가'되는 것이므로 윈-윈의 결과로서, 핵심 관람객을 뛰어넘어 영화의 타깃 관람객 범위를 확장하는 데 활용할 수 있습니다.
이러한 딥러닝 기반 도구가 20세기 폭스의 마케팅 및 데이터 팀에 미치는 영향은 상당합니다. 개괄적인 상황만 파악할 수 있는 상위 레벨 관람객 설문조사 결과에만 의존하는 대신, 이제는 더욱 정밀한 측정 기준을 배포하고 적용하여 고객의 관람 의향을 확인할 수 있기 때문입니다. 이러한 통계는 20세기 폭스가 의존해왔던 이전의 분석 기법에 따른 분석 결과의 상세도보다 최소한 두 자릿수 이상 더 상세합니다. 20세기 폭스는 2017년에
위대한 쇼맨
을 개봉한 이후로 이 도구를 사용해오고 있으며, 앞으로도 계속 사용해 최신 개봉 영화에 대한 정보를 제공할 것입니다. 또한 홈 엔터테인먼트 소스에서 수집한 구매 및 대여 데이터도 통합하여 잠재고객과 그들이 시청한 타이틀 사이의더 강력한 상관관계도 식별하고 있습니다.
마지막으로, 데이터가 더욱 세분화되어, 팀에서는 실제 흥행 성적과 내부 예측 결과를 비교 검토하여 어떤 세그먼트 레벨의 예측이 현실을 더 정확히 반영하는지 확인할 수 있습니다. Miguel이 이끄는 데이터 사이언스 팀은 현재 매주 월요일 아침에 스코어카드를 작성해 사내 다른 조직으로 이메일을 보내줍니다.
Merlin의 기초를 이루는 연구에 대해 더 자세히 알아보고 싶으면
여기
에서 연구 논문 원본을 확인하실 수 있습니다.
Contents
ML/Tensorflow
Android
Flutter
Web/Chrome
Cloud
Google Play
Community
Game
Firebase
검색
Tag
인디게임페스티벌
정책 세미나
창구프로그램
AdMob
AI
Android
Android 12
Android 12L
Android 13
Android 14
Android Assistant
Android Auto
Android Games
Android Jetpack
Android Machine Learning
Android Privacy
Android Studio
Android TV
Android Wear
App Bundle
bootcamp
Business
Chrome
Cloud
Community
compose
Firebase
Flutter
Foldables
Game
gdg
GDSC
google
Google Developer Student Clubs
Google I/O
Google Play
Google Play Games
Interview
Jetpack
Jetpack Compose
kotlin
Large Screens
Library
ma
Material Design
Material You
ML/Tensorflow
mobile games
Now in Android
PC
Play Console
Policy
priva
wa
wear
Wearables
Web
Web/Chrome
Weeklyupdates
WorkManager
Archive
2026
9월
8월
7월
6월
5월
4월
3월
2월
1월
2025
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2024
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2023
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2022
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2021
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2020
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2019
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2018
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2017
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2016
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2015
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2014
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2013
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2012
12월
11월
10월
9월
8월
7월
6월
5월
3월
2월
1월
2011
12월
11월
Feed