[go: up one dir, main page]

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 김태호(Google)님이 참여해 주셨습니다.>
게시자: Jonathan Karmel

올해 Google I/O에서 인스턴트 앱을 공식 출시한 이후로 우리는 개발자 여러분이 개발하는 앱을 사용자들이 직접 설치하지 않고도 즉시 실행할 수 있도록 인스턴트 앱을 지원하는 기기의 수를 늘리고, 인스턴트 앱의 가용성을 증진시키기 위해 노력해왔습니다. 우리는 Google Play가 운영되고 있는 모든 국가에서 인스턴트 앱을 이용할 수 있는 안드로이드 사용자 수가 현재 5억 명에 달한다는 사실을 발표하게 되어 기쁘게 생각합니다.

이미 많은 Google Play 앱 및 게임 업체가 인스턴트 앱으로 빌드하기 시작했습니다. 이들 업체는 인스턴트 앱을 출시한 후 사용자 참여, 확보 및 유지 측면에서 탁월한 성과를 거두고 있습니다.
Vimeo: 전 세계 5천만 명이 넘는 제작자와 2억 4천만 명이 넘는 시청자를 확보하고 있는 Vimeo는 사람들이 친구들과 동영상을 손쉽게 공유할 수 있는 플랫폼을 빌드했습니다. 이 회사는 안드로이드 인스턴트 앱을 구현하여 잠재고객이 기본 앱 환경을 통해 쉽게 콘텐츠에 몰입하도록 하고 싶었습니다. Vimeo는 인스턴트 앱으로 세션 지속 시간을 130% 늘렸습니다. Vimeo가 인스턴트 앱으로 사용자 참여도 어떻게 높였는지 확인해 보세요.
Jet: 미국에 본사를 둔 Jet는 고객이 지출액을 줄일 수 있는 기회를 발굴하기 위해 실시간 비용 절감 엔진을 사용하는 쇼핑 플랫폼을 제공합니다. 이 회사는 기존 앱의 사용 기반을 넓히고자 인스턴트 앱을 지원하도록 기존 앱을 업데이트했습니다. 인스턴트 앱을 출시한 이후 Jet는 전환율이 27% 증가한 것을 확인했습니다. Jet에서 어떻게 인스턴트 앱을 출시했는지 알아보세요.
NYTimes Crosswords: NYTimes Crosswords 인스턴트 앱은 뉴욕타임즈 일간 신문에 게재되는 십자말 풀이 코너를 그대로 앱을 통해 사용자에게 제공합니다. 잠재고객에게 더욱 고유한 느낌의 환경을 만들어 앱 참여도를 높이는 것이 목표였습니다. 인스턴트 앱은 사용자당 세션의 수를 2배로 증가하는 성과를 거두고 있습니다. 초기에 얻은 결과를 바탕으로, 이 회사는 더욱 효과적인 사용자 확보, 전환 및 장기 유지 성과도 누리고 있습니다. NYTimes가 어떻게 앱 세션을 늘렸는지 알아보세요.
dotloop: dotloop는 부동산 중개업자가 주택 구매자 및 판매자와 더욱 쉽게 연락을 주고받으면서 거래쌍방이 시간과 장소에 구애받지 않고 서류에 서명할 수 있도록 지원하는 부동산 거래 플랫폼입니다. 이 회사는 더 많은 사용자에게 서류 서명 절차를 위한 기본 앱 환경을 제공할 목적으로 인스턴트 앱을 도입했습니다. dotloop는 서류에 서명하는 사용자 수 62% 증가라는 주요 지표 개선 효과를 보았습니다. dotloop에서 안드로이드 인스턴트 앱을 지원하고 사용자 참여도를 높인 방법을 확인해 보세요.
Onefootball: 베를린에 본사를 둔 이 회사의 앱은 230개가 넘는 리그에 대해 15개 언어로 뉴스, 실시간 점수, 경기 일정, 결과, 순위표 및 통계 데이터를 제공합니다. Onefootball은 다른 업데이트와 함께 APK 크기를 줄임으로써 인스턴트 앱을 빌드했습니다. 인스턴트 앱에서 뉴스를 읽고 콘텐츠를 공유하는 사용자의 수가 55% 늘어났습니다. Onefootball이 출시 후 사용자 참여도를 어떻게 높였는지 자세히 알아보세요.
Realtor.com: 매달 거의 6천 만에 가까운 고유한 방문자를 데스크톱 플랫폼 및 모바일 플랫폼으로 끌어들이는 선도적인 온라인 부동산 사이트입니다. Realtor.com은 12MB 크기의 앱을 인스턴트 앱 모듈에 모듈화함으로써 안드로이드 인스턴트 앱을 지원했습니다. Realtor.com은 인스턴트 앱을 통해 부동산 목록 상세 정보 페이지뷰당 가망 고객의 수가 2배로 증가함에 따라 주요 전환 지표가 높아지는 성과를 이루었습니다. Realtor.com이 인스턴트 앱의 APK 크기를 어떻게 줄였는지 확인해 보세요.

안드로이드 인스턴트 앱을 사용하여 다운로드 크기를 관리하기 위한 모범 사례를 더 알아보고 g.co/instantapps 사이트에서 빠른 실행 앱을 빌드하는 방법에 대한 자세한 내용도 살펴보시기 바랍니다. 오늘 바로 시작해 보세요!

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다.>

게시자: Tom Grinsted, 제품 관리자
구독(Subscription)은 지속 가능한 수익원입니다. 안정적인 수익 흐름을 바탕으로 장기적인 비즈니스 성장에 보다 확신을 갖고 투자를 진행할 수 있습니다. 다양한 종류의 구독 기반 앱이 Google Play에서 빠르게 성장하고 있습니다. 구독자 수가 작년에 2배로 늘었고 구독에 지출한 금액은 지난 3년간 10배나 증가했습니다. 구독 비즈니스 성장을 돕고자 지난 I/O 2017에서 Google Play Console에 구독 대시보드가 새롭게 추가되었습니다. 추가로, 현황 데이터를 올바로 이해하고 정보에 입각한 비즈니스 결정을 내릴 수 있도록 구독자 확보, 유지 및 취소 현황에 관한 세 종류의 새로운 구독 보고서가 추가되었습니다. 아래 정보를 통해 새로운 기능과 구독 비즈니스 성장에 도움이 될 최신 모범 사례, 그리고 Google Play에서 성공을 거두고 있는 다른 개발자의 사례를 확인해 보시기 바랍니다.

Google Play Console에서 지원되는 새로운 구독 보고서

Google Play Console의 세 가지 새로운 구독 보고서

구독자 확보 보고서를 통해 애드워즈 및 UTM으로 태그가 지정된 캠페인을 비롯해, 다양한 구독자 확보 채널을 평가할 수 있습니다. 이를 통해 어떠한 채널과 캠페인이 새로운 구독자를 확보하는 데 가장 성공적인지 파악할 수 있습니다.

구독자 유지 보고서에서는 맞춤설정된 구독자 집단에 대한 평생 유지 현황을 표시합니다. 이 보고서는 여러 구독 제품을 손쉽게 비교할 수 있도록 하고, 무료 평가판 종료와 같은 주요 이벤트를 보여 줄 뿐만 아니라, 의사 결정을 보다 신속하게 할 수 있게 하는 예측 정보도 제공합니다.

마지막으로, 구독자 취소 보고서 가 있습니다. 사용자가 자발적으로(예: 스스로 취소하기로 선택한 경우) 또는 비자발적으로(예: 결제 오류가 발생한 경우) 취소할 때 이러한 세부적인 구독자 취소 데이터가 표시됩니다. 앱을 제거하면서 구독까지 취소한 것인지도 확인할 수 있습니다.

Google Play Console을 향상시키기 위해 계속 노력하겠습니다. 구독 기능을 개선할 수 있는 방법에 관한 아이디어나 의견이 있으시면 알려주시기 바랍니다.

새로운 Google Play Billing Library 활용

새로운 기능을 잘 활용하려면 Google Play Billing을 통해 앱 구독 결제를 지원해야합니다. 새로운 Google Play Billing Library를 활용하면 Play Billing을 쉽게 구현할 수 있습니다. 또한, 개발자가 앱을 게시하는 시점이 아니라 구매자가 구매를 시작하려는 시점에 결제 권한이 적용되도록 Play Billing을 업데이트했습니다. 따라서 Play Billing이 지원되는 국가는 물론 지원되지 않는 국가에서도 단일 APK를 게시할 수 있습니다. 즉, 지원되지 않는 국가를 위해 결제 권한을 사용하지 않는 별도의 APK를 유지할 필요가 없습니다. 인앱 구매를 제공하려고 하기 전에 결제가 지원되는지 먼저 확인해야 합니다.

'구독 우선' 업체가 되어 Google Play에서 성공을 거두시기 바랍니다.

Google Play에 구독 제품이 고도화 되고, 구독을 통해 큰 성공을 이룬 파트너는 어떤 것이 효과가 있고 어떤 것이 효과가 없는지에 대해 많은 점을 배울 수 있었습니다. 구독 앱에 대한 전문적인 지식을 갖추고 있는 파트너 관리자인 Niko Schröer는 성공적인 구독 업체가 되는 데 도움이 되는 새 게시물을 Medium에 게시했습니다. 이 게시물에는 2017년 6월에 게시된 안드로이드 구독자에 대한 사용자 조사[PDF]라는 상세 보고서로 연결되는 링크가 포함되어 있습니다. 이 보고서를 통해 사용자가 구독 제품에서 기대하는 점에 대한 통찰력 있는 유용한 정보를 확인하실 수 있습니다. 또한, 구독에 대한 새로운 모범 사례도 몇 가지 게시했으므로 Playbook 앱에서 Google Play를 통해 성공을 이루기 위한 다른 팁과 함께 읽어보시기 바랍니다.

Play에서 구독과 관련하여 성공을 거두고 있는 다른 개발자의 사례

싱가포르 기반 동영상 앱 개발자인 Viki는 구독 기능을 사용하여 지속 가능하고 예측 가능한 수익 흐름을 만들어냅니다. 이를 통해 오리지널 콘텐츠에 투자하고 사용자를 위한 더 나은 고급 환경을 제공할 수 있습니다. 구독으로부터 얻는 총 수익이 한 해 동안 200% 넘게 증가했으며 중동 및 라틴 아메리카와 같은 신흥 시장에서는 700% 증가했습니다. Viki의 제품 및 엔지니어링 수석 부사장인 Alex Chan 씨가 이 사례에 대해 이야기하는 동영상을 시청해 보세요.

중동 및 북아프리카에서 인기 있는 음악 서비스인 Anghami의 개발업체는 사용자 인터페이스 시험 및 출시 기념 특가 정책을 통해 앱의 구독자 수를 늘렸습니다. 한 프로모션 기간 중에 Anghami는 출시 기념 특가 정책을 통해 일일 평균 가입 수에 비해 신규 가입 수를 400% 늘렸습니다. Anghami가 어떻게 구독 비즈니스 분야에서 성공을 거두고 있는지 자세히 알아보세요.

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다.>
게시자: Dave Burke, 엔지니어링 부사장

베타 프로그램에 참가한 개발자 여러분의 협력과, 1년여의 개발 작업, 수개월에 걸친 테스팅 과정을 지나 안드로이드 8.0 오레오가 공식 출시 되었습니다. 안드로이드 8.0은 PIP(Picture in Picture), 자동완성, 인스턴트 앱 통합, Google Play Protect, 더욱 빠른 부팅 시간 등 여러가지 뛰어난 기능을 갖고 있습니다.

공식 출시와 함께 AOSP(Android Open Source Project)에 안드로이드 O 소스가 추가되었습니다. 이동통신사에서 Pixel 및 Nexus 5X/6P 용 시스템를 테스트 하고 있으며, 향후 몇 주에 걸쳐 단계적으로 출시될 것 입니다. 안드로이드 베타 사용자는 바로 최종 버전에 대한 업데이트를 받을 수 있습니다. 또는 시스템 이미지를 수동으로 다운로드해 바로 적용할 수도 있습니다. 지난 수개월 동안 주요 파트너와 안드로이드 O 적용 작업이 긴밀하게 진행되었습니다. 올해 말까지 Essential, Huawei, HTC, Kyocera, LG, Motorola, HMD Global Home of Nokia Phones, 삼성, Sharp, Sony를 비롯한 하드웨어 제조사는 안드로이드 8.0 오레오를 지원하는 새로운 기기를 출시하거나 기존 기기를 업그레이드할 예정입니다.

안드로이드 오레오에는 어떤 기능이 포함되어 있을까요?


안드로이드 오레오는 끊임 없이 자연스럽게 이어지는 사용자 환경을 만드는 데 주력했습니다. 덕분에, 안드로이드가 훨씬 더 강력하고 사용하기 쉬워졌습니다.
  • 사용자가 PIP를 통해 어떤 화면 크기에서도 두 가지 작업을 동시에 관리할 수 있으며, 앱에서 PIP를 쉽게 지원할 수 있습니다. (오른쪽에서 확인 가능)
  • 알림 도트는 앱 아이콘에 작은 점(도트) 형태로 읽지 않은 알림이 있는지 여부를 알려줍니다. 대부분의 앱에서 자동으로 작동하며, 심지어 도트 색상도 아이콘 색상에서 추출하므로 따로 지정할 필요도 없습니다.
  • 자동완성 프레임워크는 사용자가 새로운 기기를 설정하고 비밀번호를 동기화하는 방식을 간소화합니다. 양식 데이터를 사용하는 앱은 자동완성에 맞게 앱을 최적화할 수 있습니다. 비밀번호 관리 앱은 이 새로운 API를 사용하여 사용자가 즐겨 사용하는 다른 앱에서도 비밀번호 관리 기능을 제공할 수 있습니다. 자동완성은 Google Play 서비스에 업데이트의 일부로 향후 몇 주에 걸쳐 완전히 공개될 예정입니다.

안드로이드 오레오는 개발자가 앱의 상태를 더욱 효과적으로 파악할 수 있는 기능을 제공합니다. 배터리 수명, 시작 시간, 그래픽 렌더링 및 안정성의 최적화에 중점을 두는 안드로이드 바이탈 프로젝트에도 투자했습니다.
  • 시스템 최적화: 시스템 전반에 걸쳐 앱이 더욱 빠르고 원활하게 실행되는 데 도움이 되도록 하는 작업도 수행했습니다. 예를 들어, 런타임에 동시 압축 가비지 수집 (concurrent compacting garbage), 코드 위치 최적화(code locality)등 새로운 기능을 추가했습니다.
  • 백그라운드 제한: 백그라운드 위치 및 와이파이 스캔에 대한 제한을 새로 추가하고 백그라운드에서 앱 실행 방식을 변경했습니다. 이 변화는 모든 앱에 적용되며, 배터리와 메모리를 의도와는 달리 과다하게 사용하지 못하게 해줍니다. 개발자 여러분은 포그라운드와 백그라운드의 경계를 정확히 이해하고 앱에 어떠한 영향을 미치는지 고려해야 합니다.
  • 상호 보완적인 안드로이드 바이탈 대시보드와 IDE 프로파일러: Play Console에서는 이제 앱에 관한 종합적인 앱 성능 데이터를 볼 수 있습니다. 과도한 비정상 종료 비율, ANR 비율, 정지된 프레임, 느린 렌더링, 과도한 웨이크업 등, 자주 발생하는 문제를 정확히 찾는 데 도움이 될 것입니다. 안드로이드 스튜디오 3.0에는 성능 프로파일러가 새로 추가되었고, 플랫폼에서 새로운 계측 기능도 확인할 수 있을 것입니다.

안드로이드 8.0에서는 앱이 홈 화면에 앱 바로가기를 직접 추가 할 수 있습니다. (왼쪽). 알림 도트를 통해 사용자는 앱의 핵심 기능으로 바로 이동할 수 있습니다. (오른쪽).

안드로이드 오레오에는 개발자가 더욱 뛰어나고 효율적인 앱을 만드는데 도움이 되는 새로운 기능이 많이 포함되어 있습니다. 새로 추가된 기능 중 몇 가지만 소개하면 다음과 같습니다.
  • TextView 자동 크기 조절: TextView 자동 크기 조절을 사용하면 텍스트의 양에 상관없이 TextView에 텍스트를 자동으로 채울 수 있습니다. 미리 설정된 텍스트 크기 배열을 생성하거나 단계 세분성과 함께 최소 크기 및 최대 크기를 설정할 수 있습니다. 그러면 텍스트가 사용 가능한 TextView 공간에 맞게 늘어나고 줄어듭니다.
  • XML 폰트: 폰트는 이제 온전한 리소스 유형입니다. 이제는 XML 레이아웃에서 폰트를 사용하고 XML에서 폰트 패밀리를 정의할 수 있습니다.
  • 다운로드 가능한 폰트 및 그림 이모티콘: 다운로드 가능한 폰트를 사용하여 폰트를 APK에 포함하는 대신 공유되는 폰트 제공자로부터 폰트를 로드할 수 있습니다. 폰트 제공자 및 지원 라이브러리가 폰트 다운로드를 관리하고 앱 간에 폰트를 공유합니다. 다운로드 가능한 그림 이모티콘도 지원하므로, 기기에 내장된 그림 이모티콘으로 제한을 두지 않고 업데이트된 그림 이모티콘을 가져올 수 있습니다.
  • 어댑티브 아이콘: 이제 기기 제조업체에서 선택한 마스크를 기반으로 시스템에서 다른 모양으로 표시하는 어댑티브 아이콘을 생성할 수 있습니다. 또한, 시스템에서는 아이콘과의 상호작용에 애니메이션 효과를 주고 런처, 바로가기, 설정, 공유 대화상자 및 개요 화면에서 이런 아이콘을 사용합니다.

어댑티브 아이콘은 여러 기기 모델에 걸쳐 다양한 모양으로 표시됩니다.
  • 바로가기 고정: 앱 바로가기와 홈 화면 위젯은 사용자 참여를 촉진하는 데 아주 유용합니다. 사용자는 앱 내에서 홈 화면에 바로가기와 위젯을 추가하고 고정할 수 있습니다. 사용자의 바로가기 생성에 도움이 되도록 특화된 엑티비티를 추가할 수도 있습니다. 엑티비티를 통해 사용자설정 옵션을 제공하고, 사용자가 이를 확인하고 적용할 수 있습니다.
  • 앱의 폭넓은 색상 범위 (Wide-gamut color): 이제 이미징 앱이 폭넓은 색상 범위를 표시할 수 있는 새로운 기기를 충분히 이용할 수 있습니다. 폭넓은 색상 범위의 이미지를 표시하기 위해, 앱은 자체 매니페스트 파일에 있는 플래그를 사용하여(각 엑티비티마다) 폭넓은 색상 프로필(AdobeRGB, Pro Photo RGB, DCI-P3 등)이 삽입되어 있는 비트맵을 로드합니다.
  • WebView의 향상된 기능: 기본적으로 WebView 다중 프로세스 모드가 사용됩니다. API를 추가하여 앱에서 오류와 충돌을 처리할 수 있습니다. 또한, 앱의 WebView 객체를 옵트인하여 Google 세이프 브라우징을 통해 URL을 확인할 수도 있습니다.
  • Java 8 Language API 및 런타임 최적화: 이제 안드로이드는 새로운 java.time API를 비롯하여 여러 가지 새로운 Java Language API를 지원합니다. 또한, 안드로이드 런타임이 전보다 더 빨라졌고 일부 애플리케이션 벤치마크에서 속도가 최대 2배 향상되었습니다.

developer.android.com안드로이드 8.0 오레오 사이트를 방문하여 이러한 기능을 비롯한 새로운 기능에 대해 자세히 알아보시기 바랍니다. 또한, 안드로이드 오레오의 새로운 기능 동영상에서 개발자를 위한 새로운 기능도 간략히 살펴보시기 바랍니다.

앱이 준비되었는지 확인하세요


아직 준비되지 않았다면 오늘 바로 잠깐 시간을 내어 앱을 테스트하고 안드로이드 오레오로 업그레이드하는 사용자가 정상적으로 앱을 사용할 수 있는지 확인하시기 바랍니다.

Google Play에서 개발자 여러분이 현재 제공하는 앱을 안드로이드 오레오를 실행하는 기기나 에뮬레이터에 설치한 후 사용자 플로우를 테스트해보세요. 앱이 올바르게 실행되고 아무런 문제가 없어 보여야 하며 안드로이드 오레오의 변경된 동작을 제대로 처리해야 합니다. 특히, 백그라운드 위치 제한, 알림 채널, 그리고 네트워킹, 보안식별자 관련 변경 사항을 주의하여 확인해야 합니다.

문제를 모두 해결했으면 사용자에게 안드로이드 8.0 오레오가가 제공될 때, 바로 이를 이용할 수 있도록 Google Play에서 알파, 베타 또는 프로덕션 채널에 앱 업데이트를 게시하시기 바랍니다.

안드로이드 스튜디오로 개발 시간 단축

안드로이드 오레오의 새 API로 앱을 빌드할 준비가 되었으면 베타 채널에서 다운로드할 수 있는 안드로이드 스튜디오 3.0 최신 버전을 사용하는 것이 좋습니다. 안드로이드 스튜디오 3.0은 향상된 앱 성능 프로파일링 도구, Kotlin 프로그래밍 언어 지원 기능 및 Gradle 빌드 최적화 기능 외에도 인스턴트 앱, XML 글꼴, 다운로드 가능한 폰트 및 어댑티브 아이콘을 제공하므로 이를 통해 더욱 쉽게 개발할 수 있도록 지원합니다.
안드로이드 스튜디오 3.0에는 앱에서 XML 폰트 리소스 미리보기와 같은 안드로이드 오레오 기능으로 개발하기 위한 도구가 포함되어 있습니다.

또한, 안드로이드 지원 라이브러리 26.0.2(현재 Google Maven 저장소를 통해 제공) 및 최신 SDK, 도구 및 에뮬레이터 시스템 이미지(SDK Manager에서 사용 가능)로 업데이트하는 것이 좋습니다.

이제 막 안드로이드 오레오용 앱 빌드 작업을 시작하는 경우 먼저 마이그레이션 가이드를 읽어보시기 바랍니다. 이 가이드에는 개발자가 수행해야 하는 프로세스와 구성 변경 사항이 간략히 설명되어 있습니다.

프로젝트의 compileSdkVersion을 API 26으로 업데이트하여 공식 안드로이드 8.0 API에 대해 컴파일할 수 있습니다. 이와 더불어 앱의 targetSdkVersion을 API 26으로 업데이트하여 앱을 옵트인하고 안드로이드 오레오의 고유한 동작 변경 사항에 대해 테스트하는 것이 좋습니다. 안드로이드 오레오로 빌드하기 위한 자세한 환경 설정 방법은 마이그레이션 가이드를 참조하세요.

Google Play에 업데이트 게시

Google Play는 API 26 버전으로 컴파일되었거나 API 26을 대상으로 하는 앱을 지원합니다. 준비가 되었으면 알파, 베타 또는 프로덕션 채널에 APK 업데이트를 게시할 수 있습니다.

업데이트한 앱이 안드로이드 오레오는 물론 이전 버전에서도 제대로 실행되는지 확인하세요. Google Play의 베타 테스트 기능을 사용하여 소규모 사용자 그룹으로부터 조기에 피드백을 받은 후 단계별 출시를 진행하는 것이 좋습니다. 여러분의 앱 업데이트가 나오기를 손꼽아 기다리겠습니다!

안드로이드 오레오의 다음 단계는?

Developer Preview Issue Tracker를 곧 폐쇄할 예정이지만, 피드백은 계속해서 보내 주세요! AOSP Issue Tracker에 안드로이드 8.0에 관한 새로운 문제를 제출하실 수 있습니다.

다시 한 번 안드로이드 O 프리뷰와 공개 베타 버전에 참여해 주신 많은 개발자 및 얼리 어답터 여러분께 감사의 인사를 드립니다. 여러분은 아주 유용한 피드백을 제공해 주셨으며 수백 가지 문제들을 알려주셨습니다. 안드로이드 오레오 플랫폼을 소비자와 개발자 모두에게 적합하게 만드는 데 큰 도움이 되었습니다.

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 문현경(Web Technologies GDE)님이 참여해 주셨습니다.>

별도의 언급이 없는 한, 아래에 기술된 변경 사항은 Android, Chrome OS, Linux, Mac, Windows용 최신 Chrome 베타 채널 릴리스에 적용됩니다.

자바스크립트 모듈

개발자는 모듈을 사용하여 스크립트의 종속성을 선언할 수 있는데, 이러한 모듈은 타사 빌드 도구에서 필요한 스크립트만 번들로 포함할 목적으로 이미 널리 사용되고 있습니다. 이 릴리스에서는 새로운 <script type=module> 요소를 통해 자바스크립트 모듈을 기본 기능으로 추가했습니다.

기본 기능이란, 브라우저가 세분화된 종속 항목들을 동시에 가져와 캐싱을 활용하고 페이지 간 중복을 방지하고 스크립트가 올바른 순서대로 실행되도록 할 수 있는데, 빌드 단계 없이 이 모든 작업이 가능하다는 의미입니다.

시작하기 위해서 자바스크립트 모듈자바스크립트 언어에서 이 모듈의 영향을 받는 부분에 대해 자세히 알아보시기 바랍니다.

데스크톱 기반 Payment Request API

작년에 Android 지원을 발표한 데 이어, 이제는 이후 Windows, Mac, Linux 및 ChromeOS에서 Payment Request API를 사용할 수 있게 되었습니다. 이에 따라 개발자는 이제 여러 플랫폼에 걸쳐 보안이 유지되고 원활한 체크아웃 환경을 제공할 수 있습니다. Google에서 제공하는 통합 가이드를 '확인'하여 시작해 보시기 바랍니다.
트랜잭션 전반의 PaymentRequest 프로세스.


Web Share API

이전에는 사용자가 소셜 네트워크에서 손쉽게 콘텐츠를 공유할 수 있도록 하기 위해 개발자가 각각의 소셜 서비스용 사이트에 일일이 공유 버튼을 직접 통합해야 했습니다. 이는 사용자가 실제로 사용하는 서비스에서 콘텐츠를 공유할 수 없는 문제로 종종 이어지며, 타사 코드를 포함함으로써 페이지 크기가 지나치게 커지고 보안 위험을 유발할 수도 있습니다.

이제는 사이트가 Android용 Chrome에서 새롭게 제공되는 navigator.share API를 사용하여 기본 Android 공유 대화상자를 실행할 수 있습니다. 사용자는 이 대화상자를 통해 사용자가 설치한 어떠한 기본 앱과도 텍스트나 링크를 손쉽게 공유할 수 있습니다. 향후 릴리스에서는 설치된 웹 앱과도 공유가 가능하도록 이 API의 지원 범위를 확장할 예정입니다.

navigator.share API를 활용하면 사용자가 기본 Android 공유 대화상자를 통해 다양한 기본 앱과 콘텐츠를 공유하도록 할 수 있습니다.


WebUSB

키보드, 마우스, 프린터, 게임패드 등 대부분의 하드웨어 주변 장치가 고급 웹 플랫폼 API에서 지원됩니다. 전문화된 교육, 과학 또는 산업용 USB 주변 장치를 사용하려면 사용자가 시스템 수준 권한으로 안전하지 않을 가능성이 있는 드라이버와 소프트웨어를 찾아 설치해야 합니다.

Chrome에서는 이제 WebUSB API를 지원합니다. 이 API를 통해 웹 앱이 사용자 동의를 받아 주변 장치와 통신할 수 있습니다. 이에 따라 이러한 기기가 제공하는 모든 기능이 지원되는 동시에 웹 보안은 계속 보장됩니다.


이번 릴리스에 포함된 기타 기능

  • Network Information API를 이제 데스크톱뿐 아니라 Android에서도 사용할 수 있으므로, 사이트가 기기의 기본 연결 정보에 액세스할 수 있습니다
  • 이제는 개발자가 기존 Scroll API에서 새롭게 제공되는 옵션 매개변수를 통해서나 scroll-behavior CSS 속성을 사용하여 매끄러운 스크롤 동작을 지정할 수 있습니다.
  • CSSOM View Smooth Scroll APIscroll-behavior: smooth CSS 속성을 통해서나 window.scrollTo() DOM 스크롤 메서드를 사용하여 플랫폼에 기본적으로 매끄러운 스크롤 동작을 지원하므로 자바스크립트를 사용하여 이 동작을 따로 구현할 필요가 없습니다. 
  • CSS 색상 값은 이제 각각 #RRGGBBAA 형식과 #RGBA 형식의 8자리 및 4자리 16진수 색일 수 있습니다. 
  • 사이트가 이제 더 직접적인 방식으로 손가락 모으기 및 확대와 같은 복잡한 기능을 노출하는 Visual Viewport API를 사용하여 화면 콘텐츠의 상대 위치에 액세스할 수 있습니다. 
  • Device RAM API를 사용할 수 있습니다. 이 API는 사용자 기기의 RAM 크기를 사이트에 노출하여 웹 애플리케이션의 전반적인 성능을 최적화합니다. 
  • 설치된 웹 앱에서 초기 웹 앱의 범위 외부에 있는 사이트로 탐색하는 경우 이제는 새로운 사이트가 자동으로 사용자설정 Chrome 탭에 로드됩니다. 
  • 기본 컨트롤을 사용하는 동영상의 경우, 사용자가 기기를 화면에서 재생되고 있는 동영상과 일치하는 방향으로 회전하면 Chrome이 자동으로 동영상을 전체 화면으로 확장합니다. 
  • 이제 nextHopProtocolResource TimingNavigation Timing에서 사용할 수 있으므로 리소스를 가져오는 데 사용되는 네트워크 프로토콜에 액세스할 수 있습니다. 
  • 이제는 사이트가 <iframe> 요소에서 새롭게 제공되는 csp 속성을 통해 주어진 콘텐츠 보안 정책을 적용하는 데 삽입된 형식의 타사 콘텐츠를 요구할 수 있습니다. 
  • DOMTokenList 인터페이스가 이제는 replace()를 지원하므로, 모든 동일한 토큰을 새로운 토큰으로 손쉽게 변경할 수 있습니다(예: 만료 시 activeinactive로 변경). 
  • 요소의 속성 이름 목록에 액세스할 수 있도록 이제는 getAttributeNames()가 지원되므로 개발자는 속성 모음을 일일이 살펴볼 필요 없이 더욱 직접적인 메커니즘으로 속성 이름 목록을 확인할 수 있습니다. 
  • 보안을 강화하기 위해 자바스크립트 대화상자가 열리는 경우 이제는 사이트가 전체 화면을 자동으로 종료하게 됩니다. 
  • 이제는 사이트가 지정된 출처에서 사용되는 디스크 공간에 대한 추정값을 확인하고 Storage API에 새로 추가된 navigator.storage.estimate() 함수를 통해 바이트 단위의 할당량을 확인할 수 있습니다. 
  • 브라우저의 캐시 적중률을 향상시키기 위해 URLSearchParams가 저장된 이름-값 쌍을 전부 나열하는 sort()를 지원합니다. 
  • URLSearchParams 생성자가 다른 URLSearchParams 인스턴스만이 아니라 모든 객체를 매개변수로 받도록 업데이트되었습니다. 
  • 사이트가 새로운 Expect-CT HTTP 헤더를 사용하여 잘못 발급된 인증서 사용을 놓치는 일이 없도록 할 수 있습니다. 이 헤더를 통해 자동화된 보고 및/또는 인증서 투명성 요구 조건 적용이 가능합니다. 
  • Chrome에서는 더 이상 백그라운드 탭에서 미디어 소스를 사용하는 동영상의 프레임을 디코딩하지 않을 것입니다.
  • '비라이브' 카메라 설정(예: 사진 해상도, 적목 현상 방지, 플래시 모드)을 이제 ImageCapture.getPhotoSettings()로 불러올 수 있습니다.

지원 중단 및 상호 운용성 개선 사항

  • 보안을 강화하기 위해 \n 및 < 문자를 모두 포함하는 URL이 있는 리소스는 이제 차단됩니다. 
  • 보안 강화를 위해, 안전하지 않은 컨텍스트에 대해 Presentation API의 start 함수에 대한 지원이 중단 및 제거되었습니다. 
  • on<event> 속성 간 일관성을 향상시키기 위해 onwheel 속성이 Element에서 Window, Document, HTMLElement, 및 SVGElement로 이동되었습니다. 
  • 사양을 더욱 효과적으로 따르고 참조 콘텐츠 흐름을 더욱 세밀하게 제어할 수 있도록, Chrome은 이제 세 가지 새로운 참조 페이지 정책 값인 same-origin, strict-originstrict-origin-when-cross-origin을 지원합니다. 
  • 이렇게 사양이 변경됨에 따라 colSpan에 대한 최대값이 8,190에서 1,000으로 줄어들었습니다.

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다.>

Firebase 성능 모니터링을 아직 사용해본 적이 없으신가요? 이 기능을 서비스 중인 iOS 또는 안드로이드 앱의 성능 특성을 파악할 수 있습니다. 다만, 자동으로 수집되는 정보 이상의 세부 정보를 얻으려면 결국 사용자설정 추적(Custom Trace) 및 카운터를 작성해야 합니다. 추적은 앱에서 별개의 기간 내에서 성능 데이터를 보고하는 기능이고, 카운터는 추적 중에 성능 관련 이벤트를 측정할 수 있는 기능입니다. 이 포스트에서는 지나치게 많은 양의 코드를 작성할 필요가 전혀 없이 안드로이드 앱에 훨씬 더 많은 추적을 추가할 수 있는 방법을 제안합니다.

안드로이드 앱은 일반적으로 작업 또는 데이터를 사용자에게 제공하는 엑티비티 모음으로 구성됩니다. 잠재적인 성능 문제를 찾아내기 위해서는, 앱에서 이루어지는 모든 엑티비티 각각에 대해 추적을 정의하는 것이 편리할 수 있습니다. 그 후 Firebase 콘솔에서 그 결과를 조사할 수 있습니다. 앱에 포함된 엑티비티가 많은 경우 이러한 모든 엑티비티에 대한 코드를 작성하는 것이 무척 힘든 과정일 수 있습니다. 대신, 자체적인 추적 기능을 이용해 모든 엑티비티을 계측하는 약간의 코드를 작성할 수 있습니다.

안드로이드 플랫폼은 앱 내의 모든 엑티비티의 생명 주기 변화를 확인 할 수 있는 방법을 제공합니다. 이 리스너는 ActivityLifecycleCallbacks 인터페이스를 구현하여 생성 할 수 있습니다. 그 후, Application.registerLifecycleCallbacks() 메서드로 리스너를 등록할 수 있습니다. 성능을 측정하기 위해 onStart()onStop() 콜백 함 수 내부에 추적을 생성하면 좋습니다. 엑티비티가 '시작' 되어 화면에 보일 때와 엑티비티가 '중지'되어 더 이상 보이지 않을 때가 바로 엑티비티가 실제로 작업을 수행하는 동안 일어난 일들에 대해 추적하기 좋은 시점입니다. 다음은 각 엑티비티에 대한 추적을 유지하는 ActivityLifecycleCallbacks 구현의 시작 부분입니다. 먼저, 이를 싱글톤으로 만들어 어디서나 손쉽게 액세스할 수 있도록 하겠습니다. 또는 의존성 주입(Dependency Injection)의 형태를 사용할 수도 있습니다.

public class PerfLifecycleCallbacks
        implements Application.ActivityLifecycleCallbacks {

    private static final PerfLifecycleCallbacks instance =
        new PerfLifecycleCallbacks();

    private PerfLifecycleCallbacks() {}
    public static PerfLifecycleCallbacks getInstance() {
        return instance;
    }
}

그런 다음, 해당 클래스 내에서 각 엑티비티에 대한 사용자설정 추적을 관리하는 멤버를 추가하겠습니다.
    private final HashMap<Activity, Trace> traces = new HashMap<>();

    @Override
    public void onActivityStarted(Activity activity) {
        String name = activity.getClass().getSimpleName();
        Trace trace = FirebasePerformance.startTrace(name);
        traces.put(activity, trace);
    }

    @Override
    public void onActivityStopped(Activity activity) {
        Trace trace = traces.remove(activity);
        trace.stop();
    }


    // ...empty implementations of other lifecycle methods...

엑티비티가 시작될 때 추적이 시작되고 중지될 때 해당 추적이 중지됩니다. 추적의 이름으로는 엑티비티 객체의 간단한 클래스 이름, 즉 전체 자바 패키지를 포함하지 않는 클래스 이름만 사용합니다. (참고: 클래스 이름만 사용할 경우 활동이 자바 패키지 전체에 걸쳐 분산되어 있다면 엑티비티 클래스 이름이 고유한지 확인하세요.)

지정된 엑티비티 객체에 대한 추적을 반환하는 메서드를 클래스에 하나 더 추가하겠습니다. 어떤 엑티비티에서든 이 메서드를 사용하여 현재 추적 정보를 유지함으로써 클래스에 카운터를 추가할 수 있습니다.
    @Nullable
    public Trace getTrace(Activity activity) {
        return traces.get(activity);
    }

이 클래스는 엑티비티가 시작되기 전에 등록되어야 합니다. ContentProvider가 이를 수행하기 좋은 위치입니다. ContentProvider가 어떤 식으로 작동하는지 잘 모르는 경우 Firebase가 ContentProvider를 사용하여 초기화하는 방법을 읽어보시기 바랍니다.
public class PerfInitContentProvider extends ContentProvider {
    @Override
    public boolean onCreate() {
        context = getContext();
        if (context != null) {
            Application app = (Application) context.getApplicationContext();
            app.registerActivityLifecycleCallbacks(
                PerfLifecycleCallbacks.getInstance());
        }
    }
}

앱 매니페스트에 ContentProvider를 추가하는 것을 잊지 마세요! 앱 매니페스트에 추가하면 앱에서 엑티비티가 생성되기 전에 ContentProvider가 생성됩니다.

이 ContentProvider가 제대로 추가되었으면 앱이 자동으로 모든 엑티비티에 대해 추적을 생성합니다. 엑티비티 중 하나에 카운터를 추가하려면 현재 엑티비티 객체를 사용하는 PerfLifecycleCallbacks 싱글톤에서 getTrace() 메서드를 사용하면 됩니다. 예를 들면 다음과 같습니다.
private Trace trace;

@Override
protected void onCreate(Bundle savedInstanceState) {
    trace = PerfLifecycleCallbacks.getInstance().getTrace(this);
    // use the trace to tally counters...
}

로그에 기록하려는 카운터에 대해 신중히 생각해야 합니다! 일반적으로 사용자 환경을 개선할 수 있는 방법을 찾는데 도움이 되는 정보가 중요합니다. 예를 들어, 캐시에 사용할 메모리 양을 조정하는 데 도움이 되도록 캐시의 누락에 대한 적중 비율을 기록할 수 있습니다. Twitter에서 Firebase를 팔로우하여 더 많은 Firebase 성능 모니터링 관련 팁을 확인하시기 바랍니다.

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다.>

바로가기와 위젯을 사용해야 하는 이유?

안드로이드 O에서 즐겨 사용하는 기능 중 하나는 바로 딥 링크를 통한 앱 바로가기(Shortcut) 기능과 앱위젯(App Widget)을 바탕 화면에 고정하는 기능입니다.

사용자는 바로가기를 사용해 특정 작업을 신속하게 시작할 수 있습니다. 위젯을 사용하면, 앱에서 제공하는 특정 기능 및 정보에 즉각적으로 접근 할 수 있습니다. 사용자는 언제나 필요한 작업을 빠르게 수행하기를 원합니다. 바로가기와 위젯은 사용자에게 도움이 되고, 개발자가 제공하는 콘텐츠에 대한 사용자 참여도를 높일 수 있는 방법입니다.

바로가기 또는 위젯을 고정하기 위해 사용자는 앱 아이콘을 길게 눌러 옵션을 활성화하고 선택한 항목을 원하는 위치로 드래그 앤 드롭해야 합니다.


동적/정적 바로가기
고정된 바로가기







앱 내에서 바로가기와 위젯 추가



안드로이드 O에서는 앱 내에서 바로가기와 위젯을 추가할 수 있는 새로운 변화가 있습니다. 이 API는 모달 대화상자를 통해 사용자가 바로가기와 위젯을 바탕화면에 추가 할 수 있습니다. 비공식적으로 사용되던 브로드캐스트를 사용하는 이전의 방법은 지원이 중단되었습니다. 따라서 O 기기에서는 작동하지 않을 것입니다.

사용자 인터페이스 및 환경도 개선되었습니다. 이전에는 바로가기에 앱 아이콘이 없었으므로 사용자는 어떤 앱이 만든 바로가기 아이콘인지 알 수 없었습니다. 앱 아이콘을 이용해 바로가기를 생성하면 잠재적인 멀웨어로부터 사용자를 보호하는 동시에 더 효과적으로 브랜드를 표시할 수 있습니다.





이전의 바로가기
새로운 바로가기



사용자 맞춤 형식의 앱 바로가기 아이콘을 추가할 수록 설정 엑티비티를 제공할 수도 있습니다. 특정 인텐트를 수신하는 엑티비티를 추가하면, 사용자가 앱 바로가기 아이콘을 추가하려고 할 때, 개발자가 지정한 설정 엑티비티가 실행됩니다. 그 후, 사용자는 개발자가 제공하는 설정 중 원하는 값을 선택한 후, 완료 버튼을 눌러 맞춤형 앱 바로가기 아이콘을 생성 할 수 있습니다.




새롭게 추가되고 향상된 기능을 통해, 사용자가 바로가기와 앱위젯을 더 쉽게 사용할 수 있게 되었습니다. 이를 통해 더욱 의미 있고 영향력 있는 사용자 참여가 촉진되며, 더욱 즐겁고 생산적인 사용자 환경이 구현되길 기대합니다.

자세히 알아보려면 Android 개발자 웹사이트에서 바로가기 및 위젯 페이지를 살펴보시기 바랍니다.


<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 곽동현(Machine Learning GDE)님이 참여해 주셨습니다.>
게시자: Hui Fang, 기계 인식 팀 소프트웨어 엔지니어
ML(기계 학습)은 목표가 명확히 정해진 많은 영역에서 탁월한 성과를 냅니다. 정답과 오답이 존재하는 작업은 학습 과정을 도와주고, 이미지에서 객체를 올바르게 식별하는 것이든, 서로 다른 언어로의 적절한 번역을 제공하는 것이든, 알고리즘이 기대하는 목표를 달성할 수 있게 합니다. 하지만, 객관적인 평가가 불가능한 영역이 있습니다. 예를 들어, 사진이 아름다운지 여부는 사진의 미적 가치를 기준으로 측정되는데, 이는 매우 주관적인 개념입니다.
캐나다 재스퍼 국립공원의 풍경을 담은 전문가 수준(?)의 사진
ML이 주관적인 개념을 어떤 식으로 학습할 수 있는지를 살펴보기 위해, 예술적 콘텐츠 작성을 위한 실험적인 딥 러닝 시스템을 소개합니다. 이 시스템은 전문 사진작가의 작업 방식을 흉내냅니다. 즉, Google 스트리트 뷰에서 풍경 파노라마를 훑어보면서 가장 좋은 구도를 찾은 후 다양한 후처리 작업을 수행하여 미학적 즐거움을 주는 이미지를 만들어냅니다. 우리가 실험한 가상의 사진작가는 알프스, 캐나다의 밴프 및 재스퍼 국립공원, 캘리포니아 빅서, 옐로스톤 국립공원 등의 지역에서 촬영된 약 40,000장의 파노라마 사진을 '여행'하듯 샅샅이 살펴본 후 꽤나 인상적인 작품을 내놨습니다. 그중 몇몇은 전문 사진작가가 판단하기에도 전문가 수준의 품질에 가까웠습니다.


모델 학습

미학적 측면은 AVA와 같은 데이터셋을 사용하여 모델링이 가능하지만, 단순히 이런 모델을 사용하여 사진을 향상시킬 경우, 사진을 과채도 상태로 만들어버리는 등 미학적 측면을 일부 놓칠 수도 있습니다. 그런데 지도 학습을 사용하여 여러 미학적 측면을 제대로 학습하려면 레이블 수집이 불가능에 가까운 데이터셋이 요구됩니다.

우리의 접근 방식은 전/후 이미지 쌍 또는 추가적인 레이블이 없는, 오직 전문가 수준의 사진 컬렉션에만 의존합니다. 이는 미학적 요소를 여러 측면으로 자동 분할해주고, 이러한 각각의 측면은 결합 이미지 연산(coupled image operation)으로 생성된 나쁜 예제들을 통해 개별적으로 학습됩니다. 이러한 이미지 연산을 '반직교' 상태로 유지함으로써, 빠르고 분리 가능한 최적화를 통해 구도, 채도/HDR 수준 및 극적인 조명 측면에서 사진을 향상 시킬 수 있습니다.
파노라마 (a)가 (b)로 잘리고, (c)에서는 채도와 HDR 강도가 향상되고, (d)에서는 극적인 마스크가 적용되었습니다. 각 단계는 하나의 학습된 미학적 측면을 기준으로 수행됩니다.
채도, HDR 디테일 및 구도에 대한 잘못된 학습 예제를 생성하는 데는 전통적인 이미지 필터가 사용되었습니다. 극적인 마스크라고 하는 특수한 연산도 도입하는데, 이는 극적인 조명 개념을 학습하는 동안에 함께 만들어진 연산입니다. 이런 잘못된 예제는 전문가 수준의 사진에서 무작위로 명암을 수정하여 모양새를 저하시키는 이미지 필터들의 조합을 적용하여 생성되었습니다. 학습에서는 GAN(Generative Adversarial Network)을 사용합니다. 여기서 생성 모델은 잘못된 예제의 조명을 고치기 위한 마스크를 만드는 반면, 판별 모델은 실제 전문가가 촬영한 사진과 향상된 결과의 구별을 시도합니다. 비네트 효과와 같은 형태-수정 필터와 달리, 극적인 마스크는 사진의 콘텐츠를 인식한 명도 조절 효과를 더해줍니다. GAN 학습의 경쟁적 특성은 이러한 방법을 좋은 변화의 방향으로 이끌어냅니다. 저희가 작성한 논문에서 학습에 대한 자세한 내용을 더 확인하실 수 있습니다.

결과

우리가 개발한 시스템에서 Google 스트리트 뷰를 기반으로 만든 작품 몇 가지가 아래에 나와 있습니다. 여러분도 볼 수 있듯이, 학습된 미학 필터를 사용하면 몇몇 극적인 결과(이 게시물 시작 부분에 있는 이미지 포함!)가 생성됩니다.
캐나다 재스퍼 국립공원
스위스 인터라켄
이탈리아 파르코 델레 오로비에 베르가마쉐 공원
캐나다 재스퍼 국립공원

전문가 평가

우리가 개발한 알고리즘이 얼마나 성공적인지 평가하기 위해 시스템에서 생성된 작품을 다양한 수준의 다른 사진들과 섞어서 여러 전문 사진작가에게 보여 주는 '튜링 테스트' 같은 실험을 설계했습니다. 테스트에 참가한 전문 사진작가는 각각의 사진에 대해 다음과 같은 기준에 따라 품질 점수를 매기라는 지침을 받았습니다.
  • 1: 구도, 조명 등을 고려하지 않고 바로 찍음
  • 2: 사진 촬영술에 대한 배경 지식이 없는 일반 대중이 찍은 괜찮은 수준의 사진. 예술적인 부분이 두드러지지는 않음
  • 3: 준전문가 수준. 명확하게 예술적 측면을 보여 주는 훌륭한 사진. 사진을 찍은 사람이 전문가가 되기 위한 올바른 길을 가고 있음
  • 4: 전문가 수준.
다음 차트에서 각각의 곡선은 특정한 점수대를 받을 것이라고 예상된 사진들에 대해, 전문 사진작가가 매긴 점수를 보여 줍니다. 높은 점수가 예상된 작품의 경우, 실제로 받은 점수 중 약 40%가 "준전문가 수준"에서 "전문가 수준"에 해당되었습니다.
각기 다른 점수가 예상된 사진에 대해 전문 사진작가로부터 받은 점수

향후 작업

스트리트 뷰 파노라마는 우리 프로젝트에서 실험장 역할을 했습니다. 언젠가 이 기법이 현실 세계에서 더 나은 사진을 찍는 데 도움이 되는 날이 올 것입니다. 우리는 만족할 정도의 품질로 만들어진 사진들이 수록된 쇼케이스를 엮었습니다. 좋아하는 사진이 있는 경우 그 사진을 클릭하여 근처 스트리트 뷰 파노라마를 불러올 수 있습니다. 그때 만약 당신이 카메라를 들고 있었다면 같은 결정을 내렸을까요?


감사의 말

본 연구는 Google Research의 기계 인식 팀에 속해 있는 Hui Fang과 Meng Zhang이 실시한 것입니다. 인셉션 네트워크를 사용하여 AVA 점수를 예상하는 이전의 연구를 수행해 주신 데 대해 Vahid Kazemi에게 감사의 인사를 드리고, Google 스트리트 뷰 파노라마를 처리하는 데 도움을 주신 Sagarika Chalasani, Nick Beato, Bryan Klingner 그리고 Rupert Breheny에게도 감사의 인사를 드리고 싶습니다. 또한, 도움이 되는 리뷰와 의견을 제공해 주신 Peyman Milanfar, Tomas Izo, Christian Szegedy, Jon Barron 그리고 Sergey Ioffe에게도 고맙다는 인사를 전하고 싶습니다. 익명의 전문 사진작가 여러분에게도 심심한 감사를 드립니다!

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다.>
게시자: Google Mobile-Ninjas 팀 소속의 Michael Amygdalidis, Stephan Linzner, Nick Korostelev

안드로이드 테스트 지원 라이브러리(ATSL) 버전 1.0이 출시되었습니다.

ATSL 1.0은 기존 테스트 API에 대한 주요 업데이트 버전입니다. 새로운 기능이 다수 추가되었고 성능과 안정성이 향상되었으며 버그가 수정되었습니다. 이 버전은 현재는 지원이 중단된 안드로이드 플랫폼 테스트 API를 포함하여 기존 테스트 API가 제공하던 기능을 모두 제공합니다. 이 릴리스에는 Multiprocess Espresso안드로이드 Test Orchestrator에 대한 기본 지원 기능처럼, Google I/O 2017 세션에서 설명한 기능도 다수 추가되었습니다.

버전 1.0부터 Google Maven 저장소를 통해 라이브러리가 배포됩니다. 개발자 여러분이 빌드할때 훨씬 쉽게 ATSL을 사용할 수 있게 되었습니다. 이 저장소를 사용하는 방법에 대한 자세한 내용은 Google Maven 저장소 사용 시작 가이드를 참조해주시기 바랍니다. 참고로, 테스트 인프라는 향후 업데이트 시 플랫폼 업데이트와는 더 이상 연계시키지 않을 방침입니다. 테스트를 ATSL로 아직 업그레이드하지 않으셨다면 이번이 아주 좋은 기회입니다.

마지막으로, 안드로이드 테스트 문서가 크게 업데이트되었음을 알려드립니다. 이전의 테스트 문서를 GitHub 웹사이트에서 developers.android.com/testing으로 옮겼습니다. 이제는 모든 테스트 문서가 한 곳에서 제공되므로, 안드로이드에서 테스트를 작성하고 실행하는 방법을 훨씬 더 쉽게 습득할 수 있습니다.

이제 이 글에서 재미있는 부분으로 넘어가보겠습니다. 바로 이번 릴리스에서 제공하는 새로운 API와 도구에 관한 간략한 설명입니다.

Espresso의 향상된 기능

Espresso 3.0.0에서는 놀라울 정도로 뛰어난 새로운 기능이 추가되었으며 전반적으로 성능이 향상되었습니다. 주목할 만한 몇 가지 사항으로는 Multiprocess Espresso, Idling Registry 및 새로운 Idling Resources가 있습니다. 이제 더 깊이 파고들어 이러한 새로운 기능에 대해 더 자세히 살펴보도록 하겠습니다.

Multiprocess Espresso
안드로이드 O부터는 플랫폼에 앱의 기본 프로세스가 아닌 외부 프로세스 상에서 계측 테스트(Instrumenting Test) 를 진행할 수 있습니다. (안드로이드 O 이전 버전에서는 앱의 기본 프로세스 내에서만 앱 구성 요소에 대해 테스트를 수행할 수 있었습니다.) Multiprocess Espresso를 통해 이러한 지원이 가능해집니다. 이를 통해 Espresso의 동기화 유지를 계속 보장하면서 프로세스 경계를 가로지르는 앱의 UI 상호작용을 완벽하게 테스트할 수 있습니다.

좋은 소식은 Espresso가 이 모든 작업을 수행한다는 점입니다. 즉, 개발자가 여러 프로세스에서 UI 관련 설정에 대해 어떤 것도 변경할 필요가 없습니다. 개발자는 단일 프로세스 앱에서 하는 것과 똑같이 Espresso 테스트를 계속 작성할 수 있으며, Espresso가 프로세스 IPC와 프로세스 간 동기화를 자동으로 처리합니다.

다음 다이어그램에서는 Espresso의 여러 인스턴스가 서로 어떤 식으로 통신하는지를 보여 줍니다.

Multiprocess Espresso와 이를 사용하는 방법에 대한 자세한 내용을 보려면 Google에서 제공하는 문서다중 프로세스 샘플을 살펴보시기 바랍니다.

Idling Registry
몇몇 앱은 Gradle에서 빌드 Flavor를 사용하거나 Dagger와 같은 종속성 주입 프레임워크를 사용하여 유휴 리소스(Idling Resources)를 등록하는 테스트 빌드 구성을 생성합니다. 테스트를 위해 액티비티를 통해 유휴 리소스를 바로 노출 하는 경우도있습니다. 이러한 모든 접근 방식의 문제는 개발 워크플로의 복잡성을 가중시키고, 그중 일부는 캡슐화를 깨뜨리기까지 한다는 점입니다. 최신 Espresso 릴리스에서는 새로운 IdlingRegistry API를 도입함으로써 앱 코드 내에서 유휴 리소스를 더욱 쉽게 등록할 수 있도록 했습니다. IdlingRegistry는 전체 Espresso 라이브러리를 가져오지 않는 가벼운 레지스트리이므로, 애플리케이션 코드에서 리소스를 더욱 쉽게 등록할 수 있습니다. 이 API를 Multiprocess Espresso와 결합하면 애플리케이션 코드 내의 어떠한 프로세스에서든 유휴 리소스를 등록할 수 있습니다.

Espresso 클래스에서 등록하는 기능은 지금은 지원 중단되었습니다.

Idling Resources
사용자설정 유휴 리소스를 작성하는 작업은 시간이 많이 걸릴 수 있으므로, Espresso 3.0.0에서는 이제 스레드를 동기화하는 데 더 많은 유휴 리소스를 바로 사용할 수 있도록 제공합니다. 이렇게 새로 제공되는 리소스로는 IdlingThreadPoolExecutorIdlingScheduledThreadPoolExecutor가 있습니다. 앞으로도 더 많은 리소스가 제공될 예정입니다.

새로운 유휴 리소스를 활용하려면 다음과 같이 새로운 종속성을 build.gradle 파일에 추가하시기 바랍니다.
  androidTestCompile "com.android.support.test.espresso.idling:idling-concurrent:3.0.0"

또한, Espresso contrib에서 이전에 지원이 중단된 CountingIdlingResource가 이번 릴리스에서 제거되었습니다. 따라서, Espresso 유휴 리소스에 포함된 새로운 CountingIdlingResource 패키지를 사용하도록 테스트를 업데이트할 필요가 있습니다. 마이그레이션 관련 전체 세부 사항은 출시 노트에서 확인하시기 바랍니다.

ProviderTestRule

ContentProvider 객체를 테스트할 때 이제는 ProviderTestCase2 대신 ProviderTestRule을 사용할 수 있습니다. ProviderTestRule은 현재 AndroidJUnit4에 이용할 수 있는 다른 테스트 규칙을 사용하여 더욱 쉽게 작업하는 방법을 제공합니다.

ProviderTestRule에는 초기화를 지원하는 API뿐만 아니라 테스트 대상 ContentProvider에 대해 실행되는 명령이 포함되어 있습니다. ContentProvider가 SQLite 데이터베이스를 기반으로 할 경우, 데이터베이스 파일 및 초기화 명령을 설정하는 데 ProviderTestRule을 사용할 수 있습니다.

자세한 내용은 ProviderTestRule 문서를 참조하시기 바랍니다.

권한 부여 규칙

안드로이드 M(API 레벨 23)에서는 앱이 런타임에 권한을 요청할 수 있습니다. 하지만 런타임 권한을 요청하는 대화상자가 표시되면, 테스트를 계속 진행할 수 없고, 테스트가 실패하게 됩니다. GrantPermissionRule을 사용하면 대화상자 팝업을 모두 건너뛰고 사용자가 앱에 대한 런타임 권한을 부여하는 상황을 시뮬레이션할 수 있습니다.

안드로이드 Test Orchestrator

일반적으로, AndroidJUnitRunner는 모든 테스트를 동일한 계측 프로세스에서 실행하므로, 이로 인해 많은 문제가 발생할 수 있습니다. 예를 들어, 테스트가 메모리에 상태를 공유하므로 한 테스트가 다운되면 테스트 모음의 나머지 테스트도 실행할 수 없게 됩니다.

adb 명령을 순차적으로 실행하여 테스트를 분리할 수도 있지만 그렇게 하면 호스트 측에서 처리하는 로드가 늘어납니다. 대신에 새로운 안드로이드 Test Orchestrator를 사용하면 아래 다이어그램에 표시된 것처럼 기기에서 완전히 테스트 분리를 실현할 수 있습니다.

테스트 통과를 위해 상태 공유가 필수적인 경우 Orchestrator로 인해 테스트가 실패하게 된다는 점에 유의하시기 바랍니다. 이 동작은 설계에 따른 것입니다. 이 게시물이 발표된 시점을 기준으로, 안드로이드 Test Orchestrator는 베타 버전이며 명령줄을 통해 사용할 수 있습니다. 머지않아 Firebase Test Lab 및 안드로이드 스튜디오에서 사용할 수 있도록 통합할 계획입니다.

자세한 내용은 안드로이드 Testing Orchestrator 개발자 가이드를 참조하시기 바랍니다.

AndroidJUnitRunner

AndroidJUnitRunner에는 이제 다음과 같은 여러 기능이 추가되었습니다.
  • JUnitParams를 사용할 수 있습니다.
  • AndroidJUnitRunner 사용 시, 인자를 통해 클래스 로더와 사용자설정 JUnit 테스트 필터를 구성할 수 있습니다.

때로는 개발자가 테스트 중 하나로, 앱 실행 중에 동적으로 생성되고 구성된는 액티비티를 테스트하고 싶을 수도 있을 것입니다. 이제, InterceptingActivityFactory를 사용하여 MonitoringInstrumentation(및 더 나아가 AndroidJUnitRunner)을 구성할 수 있습니다. 컴파일 시간 삽입에 의존할 필요 없이 테스트 관련 구성을 사용하여 테스트 대상 액티비티를 생성할 수 있습니다.

이 개요에서는 ATSL의 가장 중요한 변경 사항 몇 가지만 중점적으로 짚어 보았습니다. 이외에도 살펴볼 만한 변경 사항이 더 많이 있습니다. 릴리스 관련 전체 세부 사항을 보려면 출시 노트에서 확인하시기 바랍니다.

마지막으로, 이번 릴리스의 기능 구현에 기여해 주신 모든 개발자 여러분께 감사하다는 인사를 드리고 싶습니다. 특히 American Express 및 Slack의 모바일 엔지니어링 팀에서 활동하는 안드로이드 테스트 전문가들 그리고 GDE Chiu-Ki Chan님에께 기꺼이 협력해 주시고 안드로이드 테스트 지원 라이브러리의 시험판 버전에 대한 귀중한 피드백을 제공해 주신 점에 대해 감사하다는 말씀을 전하고 싶습니다.

ATSL 팀을 통해 즐겁게 테스트해 보시기 바랍니다!

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 양찬석(Google)님이 참여해 주셨습니다.>
 게시자: Dave Burke, 엔지니어링 부사장

안드로이드 O 플랫폼의 마무리 작업을 진행하고 있습니다. 개발자 여러분이 앱 호환성 및 기능을 확인하는 데 도움이 될 수 있도록 Developer Preview 4를 배포합니다.

이번 버전은 올 늦여름에 예정된 안드로이드 O 출시를 앞두고 마지막으로 제공되는 Preview입니다. 이번 기회를 통해 테스트를 마무리하고 빠른 시일 내에 업데이트를 게시하여 사용자들이 안드로이드 O로 원활하게 전환할 수 있도록 하시기 바랍니다.

사용하는 기기가 안드로이드 베타 프로그램에 등록되어 있는 경우 Developer Preview 4 업데이트를 받으실 것입니다. 기기가 아직 등록되어 있지 않다면 안드로이드 베타 사이트를 방문하여 등록 후 업데이트를 받으시기 바랍니다.

안드로이드 O 출시에 대한 자세한 정보를 곧 제공할 예정이오니 꼭 확인해보시기 바랍니다.

이 업데이트에 포함된 내용은?

Developer Preview 4는 다가오는 공식 출시에 대비하여 개발과 테스트를 제때 완료하기 위해 사용할 수 있는 안드로이드 O의 릴리스 후보 빌드입니다. 이 Preview 버전에는 최종 시스템 동작과 최신 버그 수정 및 최적화와 함께 Developer Preview 3부터 이미 제공되고 있는 최종 API(API 레벨 26)가 포함되어 있습니다.

안정적인 버전의 안드로이드 26.0.1 지원 라이브러리와 함께 Developer Preview 4 기기 시스템 이미지도 함께 출시되었습니다. SDK, 도구 및 안드로이드 Emulator 시스템 이미지에 대한 증분 업데이트는 앞으로 며칠에 걸쳐 제공됩니다.

또한, 안드로이드 Test Orchestrator, Multiprocess Espresso 등의 새로운 기능을 포함하는 안드로이드 테스트 지원 라이브러리의 새로운 버전도 선보일 예정입니다. 자세한 사항을 곧 제공할 예정이오니 확인하시기 바랍니다.

안드로이드 O에서 앱 테스트

이번에 출시된 Developer Preview 4 시스템 이미지를 통해 개발자는 최종 버전에 거의 가까운 안드로이드 O 버전에서 현재 앱을 테스트할 수 있습니다. 사용자가 공식 안드로이드 O 플랫폼으로 업그레이드할 때, 앱의 주요 기능과 새로 추가된 기능이 잘 동작할지 확인할 수 있습니다.

지원되는 기기를 안드로이드 베타 프로그램에 등록하여 최신 업데이트를 OTA(over-the-air)로 받고 Google Play에서 개발자 여러분이 현재 제공하는 앱을 설치한 후 사용자 플로우를 테스트해보시기 바랍니다. 앱이 올바르게 실행되고 아무런 문제가 없어야 하며, 안드로이드 O의 변경된 동작을 제대로 처리해야 합니다. 특히, 백그라운드 위치 제한, 알림 채널 그리고 네트워킹, 보안식별자 관련 변경 사항을 주의하여 확인해야 합니다.

발견된 문제를 모두 해결했으면 사용자에게 안드로이드 O가 제공될 때 이용할 수 있도록 현재 대상 지정 레벨로 앱 업데이트를 게시하시기 바랍니다.

안드로이드 O 기능 및 API로 앱 품질 향상

최신 버전의 안드로이드를 사용하는 사용자는 대개 앱 다운로드, 콘텐츠 사용 및 구매 측면에서 가장 활발한 활동을 보이는 사용자들입니다. 이런 사용자는 사용하는 앱이 최신 안드로이드 기능을 지원하도록 적극적으로 목소리를 내는 편 입니다. 안드로이드 O 사용자들은 알림 채널알림 도트, 바로가기 고정, PIP, 자동완성 등의 기능을 기대합니다. 시간이 지남에 따라 점점 더 많은 사용자가 안드로이드 O로 업그레이드할 것이기 때문에 이러한 기능은 개발자 앱의 사용자 참여도를 높이는 데도 도움이 될 것입니다.


안드로이드 O에서는 앱이 런처에 특정 앱 바로가기를 직접 고정하여 참여를 촉진할 수 있습니다.
알림 도트는 앱에서 사용자를 계속 활동 상태로 유지하면서 앱의 핵심 기능으로 바로 이동할 수 있도록 합니다.

안드로이드 O 기능을 활용해 앱의 품질을 향상시키고, 사용자의 참여를 촉진하며, 새로운 상호작용 방식을 제공하고, 사용자에게 더욱 강화된 제어 및 보안 기능을 제공할 수 있습니다. 어댑티브 아이콘, 다운로드 가능한 글꼴TextView 자동 크기 조절과 같은 기능으로 개발 과정을 단순화하고 APK 크기를 최소화할 수 있습니다. 배터리 또한 사용자가 가장 많이 걱정하는 부분이므로, 백그라운드 실행 제한O 앱에 대한 필수 시스템 동작의 기타 중요한 변경 사항에 맞게 앱을 최적화하면 사용자로부터 좋은 호응을 얻을 수 있을 것입니다.

O Developer Preview 사이트를 방문하여 모든 새로운 기능과 API, 그리고 이를 앱 내에 적용하는 방법에 대해 알아보시기 바랍니다.

안드로이드 스튜디오로 개발 시간 단축

안드로이드 O용으로 앱을 빌드할 준비가 되었으면 canary 채널을 통해 다운로드할 수 있는 안드로이드 스튜디오 3.0 최신 버전으로 업데이트하는 것이 좋습니다. 안드로이드 스튜디오 3.0은 향상된 앱 성능 프로파일링 도구, Kotlin 프로그래밍 언어 지원 기능 및 Gradle 빌드 최적화 기능 외에도 인스턴트 앱, XML 글꼴, 다운로드 가능한 글꼴어댑티브 아이콘을 제공하므로 이를 통해 더욱 쉽게 개발할 수 있도록 지원합니다.

또한, 안정적인 버전의 안드로이드 지원 라이브러리 26.0.1(현재 Google Maven 저장소에서 사용 가능) 및 최신 SDK, 도구 및 에뮬레이터 시스템 이미지(앞으로 며칠에 걸쳐 제공 예정)로 업데이트하는 것이 좋습니다.

프로젝트의 compileSdkVersion을 API 26으로 업데이트하여 공식 안드로이드 O API에 대해 컴파일할 수 있습니다. 이와 더불어 앱의 targetSdkVersion을 API 26으로 업데이트하여 앱을 옵트인하고 안드로이드 O의 고유한 동작 변경 사항에 대해 테스트하는 것이 좋습니다. 안드로이드 O를 사용하여 빌드 작업을 수행하도록 환경을 설정하는 방법에 대한 자세한 내용은 마이그레이션 가이드를 참조하시기 바랍니다.

Google Play에 업데이트 게시

Google Play는 API 26에 대해 컴파일되었거나 API 26을 대상으로 하는 앱을 위한 열린 장을 제공합니다. 준비가 되었으면 알파, 베타 또는 프로덕션 채널에서 APK 업데이트를 게시할 수 있습니다.

업데이트한 앱이 안드로이드 O는 물론 이전 버전에서도 제대로 실행되는지 확인하시기 바랍니다. Google Play의 베타 테스트 기능을 사용하여 소규모 사용자 그룹으로부터 조기에 피드백을 받는 것이 좋습니다. 그런 다음, 단계별 출시를 진행하세요. 개발자 여러분의 앱 업데이트가 나오기를 손꼽아 기다리겠습니다!

Developer Preview 4를 구하는 방법

Developer Preview 4가 아직 없으시다면 간단히 구할 수 있으니 걱정 마세요. android.com/beta를 방문하여 적합한 휴대폰이나 태블릿을 옵트인하기만 하면 됩니다. 늘 그렇듯이, 이 업데이트를 다운로드한 후 수동으로 플래시할 수도 있습니다. O Developer Preview는 Pixel, Pixel XL, Pixel C, Nexus 5X, Nexus 6P, Nexus Player 및 안드로이드 Emulator에 사용할 수 있습니다. 안드로이드 O의 공식 버전이 출시되면 등록된 기기가 자동으로 업데이트될 것입니다.

전체 Preview 버전에 걸쳐 개발자 여러분이 제공해 주신 모든 의견에 대해 감사의 인사를 드립니다. 다양한 피드백과 요청 사항을 계속 공유해주세요. 저희에겐 정말 소중하고 든든한 자산입니다.

<블로그 원문은 여기에서 확인하실 수 있으며, 블로그 번역 리뷰는 신정규(Machine Learning GDE)님이 참여해 주셨습니다.>
게시자: James Wexler, Google Big Picture 팀의 수석 소프트웨어 엔지니어
(Google 오픈소스 블로그에도 교차 게시됨)

기계 학습(ML) 모델에서 최상의 결과를 얻으려면 데이터를 진정으로 이해해야 합니다. 하지만 ML 데이터세트는 각각 수백 개(내지 수천 개)의 특징으로 구성된 수억 개의 데이터 요소를 포함할 수 있으므로 직관적인 방식으로 전체 데이터세트를 이해하는 것은 거의 불가능합니다. 시각화는 대규모 데이터세트에서 미묘한 차이와 통찰력 있는 정보를 파악하는 데 도움이 될 수 있습니다. 한 장의 그림이 천 마디 말만큼의 가치가 있을 수 있지만, 대화형 시각화는 그보다 훨씬 더 큰 가치가 있을 수 있습니다.

PAIR 이니셔티브를 진행하면서 우리는 ML 데이터세트를 이해하고 분석하는 데 도움이 되는 오픈소스 시각화 도구인 Facets를 발표했습니다. Facets는 사용자가 각기 다른 세분화 수준으로 방대한 데이터를 전체적으로 파악할 수 있도록 하는 두 가지 시각화 기능으로 구성되어 있습니다. Facets Overview를 사용하여 데이터의 각 특징이 나타내는 양상을 대략적으로 파악하거나 Facets Dive를 사용하여 개별 관찰 데이터 세트를 세세히 살펴볼 수 있습니다. 이러한 시각화 기능을 통해 데이터를 디버그할 수 있는데, 이는 기계 학습에서 모델 디버깅만큼이나 중요한 점입니다. 두 시각화 모두 Jupyter 노트북 내에서 손쉽게 사용하거나 웹페이지에 포함할 수 있습니다. 오픈소스 코드와 함께, Facets 데모 웹사이트도 제작했습니다. 이 웹사이트에서 컴퓨터에 모든 데이터를 그대로 놓아둔 채로 소프트웨어 설치나 설정 없이 브라우저에서 바로 자신만의 데이터세트를 시각화할 수 있습니다.

Facets Overview

Facets Overview에서는 데이터세트의 여러 특징들마다 값의 분포를 빠르게 파악할 수 있는 정보를 사용자에게 자동으로 제공합니다. 동일한 시각화를 통해 훈련 세트 및 테스트 세트와 같은 여러 데이터세트를 비교할 수 있습니다. 예기치 않은 특징 값, 누락된 값의 비율이 높은 특징, 불균등 분포를 띠는 특징, 데이터세트에 따라 특징 분포가 편중된 경우 등과 같이 기계 학습을 방해할 수 있는 일반적인 데이터 문제가 명확히 드러납니다.
UCI 인구조사 데이터세트[1]의 6가지 숫자형 특징에 대한 Facets Overview 시각화. 불균등성을 기준으로 가장 불균등한 분포를 가지는 특징이 맨 위에 표시되는 식으로 정렬했습니다. 빨간색으로 표시된 숫자는 문제가 될 수 있는 요소, 여기서는 0으로 설정된 값의 비율이 높은 숫자형 특징을 나타냅니다. 오른쪽에 있는 히스토그램을 통해 훈련 데이터(파란색)와 테스트 데이터(주황색) 간에 분포를 비교할 수 있습니다.

UCI 인구조사 데이터세트[1]의 9가지 범주형 특징 중 2가지를 보여 주는 Facets Overview 시각화. 분포 거리를 기준으로 훈련 데이터세트(파란색)와 테스트 데이터세트(주황색) 사이에서 가장 크게 편중된 특징이 맨 위에 표시되는 식으로 특징들을 정렬했습니다. 'Target' 특징에서는 테스트 세트에 후행 구두점이 있기 때문에 레이블 값이 훈련 데이터세트와 테스트 데이터세트 간에 다르다는 점에 유의하세요('<=50K' 대 '<=50K.'). 이는 이 특징에 대한 차트에서는 물론, 표의 'top' 열에 있는 항목에서도 확인할 수 있습니다. 이러한 레이블 불일치는 이 데이터로 훈련하고 테스트한 모델이 올바르게 평가할 수 없게 합니다.  

Facets Dive

Facets Dive에서는 데이터세트의 서로 다른 특징에 걸쳐 데이터 요소 간의 관계를 파악하는 데 사용할 수 있는 맞춤설정이 용이하며 직관적인 인터페이스를 제공합니다. Facets Dive에서는 특징 값을 기반으로 각 데이터 요소의 위치, 색 그리고 시각적 표현을 제어합니다. 데이터 요소에 이들과 관련된 이미지가 있는 경우 그런 이미지가 시각적 표현으로 사용될 수 있습니다.
UCI 인구조사 테스트 데이터세트[1]에서 전체 16,281개 데이터 요소를 보여 주는 Facets Dive 시각화. 이 애니메이션에서는 사용자가 한 가지 특징('Relationship')을 기준으로 데이터 요소에 색을 지정하고 연속적인 특징('Age')을 기준으로 한 차원에서 패시팅을 수행한 후 이산적인 특징('Marital Status')을 기준으로 다른 차원에서 패시팅을 수행하는 것을 보여 줍니다.
'Quick, Draw!' 데이터세트의 많은 얼굴 그림에 대한 Facets Dive 시각화. 여기서는 그림에 포함된 획과 점의 개수 사이의 관계와 'Quick, Draw!' 분류기가 이를 얼굴로 올바르게 분류할 수 있는 기능을 보여 줍니다.
흥미로운 사실: CIFAR-10 데이터세트[2]와 같은 대규모 데이터세트에서는 작은 레이블 지정 오류가 눈에 띄지 않고 쉽게 넘어갈 수 있습니다. 우리는 Dive를 통해 CIFAR-10 데이터세트를 조사했고 그 결과, (개구리 이미지의 레이블이 고양이로 잘못 지정된) 개구리-고양이 문제를 포착할 수 있었습니다!
Facets Dive를 사용하여 CIFAR-10 데이터세트 탐구. 여기서는 행을 기준으로는 실측 레이블을 패시팅하고 열을 기준으로는 예상된 레이블을 패시팅합니다. 이를 통해 혼동 행렬 뷰가 생성되며, 이 뷰에서 특정 종류의 잘못된 분류를 파악할 수 있습니다. 이 특정 사례에서 ML 모델은 '진짜 고양이' 중 작은 비율의 고양이에 대한 레이블을 개구리로 잘못 지정합니다. 혼동 행렬에 실제 이미지를 추가함으로써 우리가 발견한 흥미로운 사실은 모델이 개구리라고 예상했던 이러한 '진짜 고양이' 중 하나가 육안 검사를 수행한 결과 실제로는 정말 개구리였다는 점입니다. Facets Dive에서는 이처럼 잘못된 분류가 모델의 진정한 오분류가 아니고 데이터세트에서 레이블이 잘못 지정된 데이터라는 것을 확인할 수 있습니다.
개구리-고양이 문제를 찾을 수 있습니까?

Google 내부에서 Facets를 통해 크나큰 가치를 얻었기에, 이러한 시각화 기능을 공유하게 되어 큰 보람을 느낍니다. 이러한 시각화 기능이 데이터와 관련하여 새롭고 흥미로운 사실을 발견하는 데 도움이 되고, 이러한 점을 기반으로 더욱 강력하고 정확한 기계 학습 모델을 만드실 수 있기를 바랍니다. 이 기능은 오픈소스이므로 자신의 특정 요구사항에 맞게 기능을 맞춤설정하실 수 있으며, 우리 모두 데이터를 더욱 정확하게 파악하는 데 도움이 되도록 본 프로젝트에 기여하실 수도 있습니다. Facets를 사용하면서 겪은 경험과 관련하여 의견이 있으시면 저희에게 알려주시기 바랍니다.

감사의 말

본 연구는 전체 Big Picture 팀이 제공하는 데이터를 기반으로 Mahima Pushkarna, James Wexler 그리고 Jimbo Wilson이 공동으로 진행한 것입니다. Justine Tunney에게 빌드 도구를 제공해 주신 점에 대해서도 감사하다는 인사를 드리고 싶습니다.

참고 문헌

[1] Lichman, M. (2013). UCI 기계 학습 저장소 [http://archive.ics.uci.edu/ml/datasets/Census+Income]. 캘리포니아 얼바인: 캘리포니아 대학교, 정보/컴퓨터공학부

[2] Learning Multiple Layers of Features from Tiny Images, Alex Krizhevsky, 2009.