[go: up one dir, main page]



구글 머신러닝 부트캠프 2022참가 지원이 시작되었습니다. 지난 2년간 구글 머신러닝 부트캠프 프로그램을 진행해 오는 동안 수많은 부트캠프 프로그램이 등장했습니다. 이제는 부트캠프에 대한 설명보다는, “부트캠프가 정말 취업에 도움이 되나요?", "구글 머신러닝 부트캠프의 특징은 무엇인가요?”와 같은 질문에 대한 답이 더 필요한 때가 되었습니다. 


구글 머신러닝 부트캠프에서는 참가자 스스로 학습하고 성장하려고 노력할 때, 더 많은 것을 가져갈 수 있습니다. 아래에 지원자분들이 궁금해 했던 점을 확인하고, 구글 머신러닝 부트캠프는 어떤 점이 다른지, 어떤 것들을 얻을 수 있을지 알아가 보세요!




Q. 어떤 프로그램들이 제공되고, 어떻게 진행되나요? 


참가자들이 머신러닝 개발자로 성장할 수 있도록, 검증된 교육 프로그램과 자격증 취득 기회를 제공하고, 취업까지 이어질 수 있도록 다양한 프로그램을 지원합니다. 

부트캠프에서 수강해야 하는 머신러닝 교육 과정은 딥러닝의 바이블로 불리는 앤드류 응(Andrew Ng)교수의 Deep Learning Specialization 강의입니다. 참가자는 8주 동안 해당 강의를 완주해야 합니다. 필요한 학습 시간은 강의 시간과 개인적인 공부 시간을 포함하여 대체로 주당 약 10시간 이내입니다. 학습 과정에서 코세라 내의 토론, Q&A를 활용하는 것은 물론, 참가자들과 함께 스터디 그룹을 만들거나 메신저에서 토론을 주고 받을 수 있습니다. 



지원하는 머신러닝 자격증은 세 가지로, TensorFlow certification, GCP Professional Data Engineer certification, GCP Professional ML Engineer certification입니다. 참가자들은 세 가지 자격증 중 하나를 선택하여 반드시 통과해야 하며, 특정 마감일 내 조기 통과한 참가자는 추가로 한 가지 자격증에 더 응시할 수도 있습니다. 자격증 준비와 관련해서는 TensorFlow certification 취득에 도움이 되는 TensorFlow Developer Professional Certificate 강의를 지원하며, 이외에 공부하실 때 도움이 될 만한 자료를 공유드립니다. 

부트캠프의 수료 조건 중 하나인 캐글 프로젝트는 참가자 내에서 자율적으로 팀을 구성하거나 혹은 혼자서 원하는 프로젝트를 선택하여 일정 수준(경진대회 내 상위 25% 랭크 혹은 TPS 노트북 제출)에 이르러야 합니다. 

위 세 가지 코스를 완주 할 때마다 한정 기념품이 주어지며, 조기 수료자 혹은 우수 활동 참가자에게는 특별한 기념품이 제공됩니다. 


<이전 구글 머신러닝 부트캠프의 깜짝 연사들! (왼쪽부터 앤드류 응, 제프 딘, 로렌스 모로니)>


이뿐만 아니라 파트너 회사들의 테크톡, 오피스아워 등을 통해 머신러닝 개발 현장의 이야기를 생생히 들을 수 있으며, 머신러닝 전문가들과의 Meet up, 이력서 클리닉/커리어 클리닉과 같은 취업 준비 시 필요한 세션도 준비되어 있습니다. 




Q. 이전 기수의 수료율과 올해 선발 인원은 어떻게 되나요? 


20년 1기의 경우 참가자 중 64%가 최종 수료하였고, 21년 2기의 경우 참가자 중 47%가 추가된 실무 프로젝트인 캐글 경진대회까지 최종 수료하였습니다. 올해 선발 인원 수는 정해진 바 없이 지원 자격과 선발 기준에 적합한 지원자라면 선발할 계획입니다. 




Q. 작년과 비교하여 이번 프로그램은 어떻게 달라졌나요? 



참가자들의 프로그램 집중도를 높이기 위해 기존 4개월의 프로그램 기간이 약 3개월(6/22-9/19)로 단축되었습니다. 또한 신규 파트너 회사인 넥슨, 버킷플레이스(오늘의 집), 쏘카, 이마트를 포함해 네이버, 넷마블, 노타, 롯데온, 루닛, 뤼이드, 몰로코, 버즈빌, 보이저엑스, 스마일게이트엔터테인먼트, 업스테이지, 카카오, 커먼컴퓨터까지 총 17곳의 파트너 회사가 참여합니다. 올해도 모든 프로그램이 온라인으로 진행되지만, 가능하다면 프로그램 기간 중 참가자들이 직접 만날 수 있는 오프라인 모임을 기획 중에 있습니다. 더불어 TensorFlow Developer Certificate 자격증 취득에 도움이 되는 TensorFlow Developer Professional Certificate 강의를 추가로 수강할 수 있도록 지원해 드립니다. 




Q. 다른 부트캠프 프로그램과 차별화 되는 점은 무엇인가요? 



누구나, 언제나, 어디서나!

구글 머신러닝 부트캠프는 참가자의 자율성을 존중합니다. 모든 프로그램이 온라인으로 진행되므로, 시간과 장소에 구애받지 않고 참가할 수 있으며, 코스별 마감 기한 내에 개인의 스케줄에 따라 유연하게 진행할 수 있습니다. 따라서 재학 중인 학생 및 현업에 종사하는 직장인도 참여할 수 있습니다. 

캐글 프로젝트나 스터디를 위해 참가자들과 함께 자유롭게 팀을 구성할 수 있습니다. 물론 혼자서 진행하는 것도 가능합니다. 부트캠프 수료 조건에 만족하는 것에 그치지 않고, 스스로 더 성장하고자 하는 참가자들에게는 특별한 기념품을 드리며 구글 머신러닝 부트캠프가 그 길을 응원합니다. 


부트캠프의 백미 테크톡

테크톡 세션은 매주 진행되며, 1곳의 AI 파트너 회사로부터 현업의 트렌드를 직접 듣고, 실무/채용 담당자로부터 실무/입사와 관련한 궁금한 점을 이야기 나눌 수 있습니다. 지난 기수 참가자들은 '기업에서 지원자에게 어떤 역량을 기대하는지, 특정 기업이 하는 일/기술에 대해 더 알아갈 수 있어 가장 값진 시간이었다'는 피드백을 주었습니다.  


활발한 참가자 커뮤니티와 돈독한 Alumni 커뮤니티

프로그램 기간 동안 항상 열려 있는 메신저 채널과 메타버스 공간에서 운영진과 참가자, 그리고 참가자들끼리의 활발한 소통의 장이 펼쳐집니다. 이 곳에서 참가자들은 취업과 학습에 도움이 되는 여러 정보를 공유하고, 모여서 코딩하며 참가자들끼리 서로를 이끌어줄 수 있는 커뮤니티를 만들어갑니다.  

또한 구글 머신러닝 부트캠프를 먼저 진행한 선배들, 부트캠프를 통해 취업에 성공한 현업 직장인들이 포함된 Alumni 커뮤니티에서 머신러닝 개발자로서 지속적으로 성장할 수 있는 정보를 공유할 수 있습니다.




Q. 참가를 위해 어느 정도의 영어 수준이 요구되나요?


앤드류 응 교수의 머신러닝 전문 강의를 영어로 듣고 이해할 수 있어야 하나 코세라 내 한글 자막이 지원됩니다. 부트캠프에서 취득을 요하는 자격 시험도 영어로 읽고 풀도록 진행되나 사전에 도움이 되는 강의와 문제 풀이로 충분히 준비하실 수 있습니다. 교육 프로그램 수강과 자격증 취득 모두 참가자들끼리 서로 도와가며 준비하고, 토론하며, 정보를 공유할 수 있어 영어로 인한 진행의 어려움은 크게 문제되지 않을 것입니다.  




Q. 구글 머신러닝 부트캠프 참여가 취업에 정말 도움이 되나요? 


20년 1기의 경우 수료자 중 30%가, 21년 2기의 경우 수료자 중 53%가 취업 소식(수료 후 6개월 내)을 알려주셨습니다. 참가자들을 밀착 관리하는 여타 부트캠프와 달리 참가자들이 자율적으로 만들어가고 완주해 나간다는 점에서 의미 있는 수료율과 취업율을 기록하였습니다. 

부트캠프 참여나 자격증 취득이 머신러닝의 실무 수준을 보장한다거나 누구에게나 취업의 문을 활짝 열어준다고 할 수는 없을 것입니다. 다만, 구글 머신러닝 부트캠프에서 취업을 목표하고 함께 달려가는 그 길에서 스스로 성장하고자 하는 노력과 고민은 취업 시장에서의 경쟁력을 가져다 줄 뿐만 아니라, 끊임없이 발전해야하는 개발자로서도 의미 있는 도전이 될 것입니다. 




Q. 이전 기수 참가자들은 어떤 회사에 입사했나요?  


부트캠프 수료자들은 네이버, 넷마블, 노타, 루닛, 뤼이드, 보이저엑스, 11번가, 업스테이지, 카카오 등 유망하고 경쟁력 있는 파트너 회사에 취업하였습니다. 수료자들이 취업한 직무로는 ML 엔지니어/연구 분야, 데이터 분석/엔지니어 분야뿐만 아니라 소프트웨어 개발자, 프로덕트 매니저, AI 스타트업 창업, AI 회사에 투자하는 벤처 투자가까지, 다양한 영역으로 뻗어가고 있습니다.  


1기 수료자 취업 회사

삼성전자, 넷마블, SK하이닉스, 한국마이크로소프트, 대한항공, 퀄컴코리아, 카카오, 인텔, 루닛, 노타, IBM, LG CNS, 네이버클라우드, 직방, 펍지, 네이버웹툰, 넥슨 인텔리전스랩스, 넥슨코리아, 현대자동차, 한국전자기술연구원, 뤼이드, 카카오모빌리티, 카카오엔터프라이즈, 보이저엑스, 그렙, 채널 코퍼레이션, LINE, SAP Labs Korea 등


2기 수료자 취업 회사

카카오, 카카오브레인, 넷마블, 업스테이지, 11번가, 엔씨소프트, LINE, LG CNS, 컬리, 코드스테이츠, 마인즈랩, 한국전자기술연구원, SK하이닉스, 딜로이트 컨설팅, 오늘코드, KT, LG유플러스, 현대카드, 핏투게더, 네오사피엔스, 국가수리과학연구소, KB인베스트먼트, 롯데정보통신, 신세계아이앤씨 등. 




Q. 참가 접수 마감일은 언제까지인가요? 


올해 참가 지원서 내 레벨 테스트의 난이도가 상향되었음을 고려하여, 참가 접수 마감일이 4일 더 연장되었습니다. 이에 따라 접수 마감일은 2022년 6월 2일 오전 9시로 변경되었고 최종 합격 여부는 2022년 6월 9일에 접수 시 입력한 이메일로 발표됩니다. 올 여름, 세상이 필요로하는 머신러닝 개발자로 성장하길 원하신다면, 구글 머신러닝 부트캠프가 그 여정을 함께 도와드리겠습니다. 여기에서 지금 바로 지원하세요.



작성자: 금빛누리(Bitnoori Keum) 커뮤니티 매니저/권순선(Soonson Kwon) 글로벌 머신러닝 생태계 프로그램 리드



작성자: Max Bires (Software Engineer)
이 글의 원문은 여기서 확인하실 수 있으며 블로그 리뷰에는 노현석(GDE)님이 참여해주셨습니다. 
푸른색 Android 배경

증명은 Android 8.0부터 의무화된 필수 기능입니다. 매일 새 버전의 앱이 출시되면서 SafetyNet, Identity Credential, Digital Car Key 및 다양한 타사 라이브러리가 제공하는 기능과 서비스의 신뢰하는 것이 점점 더 중요해지고 있습니다. 보안 신뢰 사슬을 더욱더 탄탄히 구축하고, 알려진 취약점이 발생할 시 기기 신뢰성의 복구 기능을 높이기 위해 이번 기회에 증명 인프라를 다시 살펴보았습니다.
Google은 Android 12.0부터 팩토리 내 비공개 키 프로비저닝을 팩토리 내 공개 키 추출과 단기 인증서를 이용한 무선 인증서 프로비저닝의 조합으로 대체하는 옵션을 제공할 예정입니다. 이 체계는 Android 13.0에서 의무 사항이 됩니다. 이 새로운 체계를 원격 키 프로비저닝이라 부릅니다.
누가 영향을 받나요?
OEM/ODM
기기 제조업체는 더 이상 팩토리에서 기기에 직접 증명 비공개 키를 프로비저닝하지 않으므로, 증명을 위해 보안 비밀을 관리해야 하는 부담이 사라집니다.
신뢰 당사자 (잠재적 영향)
아래에서 더 자세히 설명드리는 것과 같이, 증명에 있는 인증서 체인의 형식, 알고리즘 및 길이가 바뀔 것입니다. 신뢰 당사자가 레거시 인증서 체인 구조를 엄격히 따라 인증서 유효성 검사 코드를 설정한 경우에는, 이 코드를 업데이트해야 합니다.

왜 변경하나요?
증명 인증서 프로비저닝 방식을 변경하는 두 가지 주요 목적은 인증서 손상 시 기기를 복구하고 증명 공급망을 강화하기 위해서입니다. 오늘날의 증명 체계에서는 증명의 신뢰 신호에 영향을 미치는 방식을 통해 기기 모델이 손상된 것으로 확인되거나 어떤 메커니즘을 통해 키가 누출된 경우 키를 취소해야 합니다. 증명 키 신호에 의존하는 서비스의 수가 늘어나면서, 관련 기기를 소유한 소비자의 부담이 늘어났습니다.
이번 변경을 통해 손상된 것으로 알려진 소프트웨어가 설치된 기기에 대한 프로비저닝을 중지해 의도하지 않은 키 누출 가능성을 미연에 방지할 수 있습니다. 이로써 사용자는 갑작스러운 서비스 중단 없이 계속해서 앱을 사용할 수 있게 됩니다.
Google 서버 이미지

어떻게 작동할까요?

각 기기에서 고유한 정적 키 쌍을 생성하고 OEM이 팩토리에서 이 키 쌍의 공개 부분을 추출합니다. 그런 다음 Google 서버에 공개 키를 업로드하여 이후 프로비저닝을 위한 신뢰의 토대로 삼습니다. 비공개 키는 키가 생성되는 보안 환경을 결코 벗어나지 않습니다.
개봉 후 인터넷에 연결된 기기는 기기에서 생성한 키에 대한 인증서 서명 요청을 생성하고 팩토리에서 수집한 공개 키에 상응하는 비공개 키로 서명합니다. 백엔드 서버는 요청의 신뢰성을 확인한 다음 공개 키를 서명하여 인증서 체인을 반환합니다. 그런 다음 키 저장소는 이러한 인증서 체인을 저장하여 증명을 요청할 때마다 앱에 할당합니다.
이 과정은 인증서가 만료되거나 현재 키 공급이 소진될 시에 정기적으로 반복됩니다. 이 체계에서는 애플리케이션이 각기 다른 증명 키를 수신하고 키 자체도 정기적으로 교체되기 때문에 개인정보를 보호할 수 있습니다. 또한 Google 백엔드 서버는 기기의 공개 키를 확인하는 서버와 첨부된 증명 키를 확인하는 서버로 분리됩니다. 다시 말해, Google이 증명 키를 요청한 특정 기기와 해당 증명 키를 연관 짓는 것은 불가능합니다.

기술적인 관점에서 무엇이 바뀌나요?
최종 사용자는 어떤 변화도 알아차리지 못할 것입니다. 증명을 활용하는 개발자라면 다음과 같은 변경 사항에 주의하여야 합니다.
  • 인증서 체인 구조
    • 새로운 온라인 프로비저닝 인프라의 특성으로 인해, 체인 길이가 이전보다 길어지고 변경될 수 있습니다.
  • 신뢰할 수 있는 루트
    • 신뢰할 수 있는 루트는 기존의 RSA 키에서 ECDSA 키로 업데이트될 것입니다.
  • RSA 증명 지원 중단
    • KeyMint로 생성하고 증명한 모든 키는 ECDSA 키와 해당 인증서 체인으로 서명합니다. 기존에는 비대칭 키를 상응하는 알고리즘으로 서명했습니다.
  • 단기 인증서와 증명 키
    • 기기에 프로비저닝된 인증서는 일반적으로 최대 2개월간 유효하며, 그 후에는 만료되어 교체됩니다.

작성자: Jose Alcérreca (Android Developer Relations Engineer)

이 글의 원문은 여기서 확인하실 수 있습니다. 

Android 휴대전화를 묘사한 파란색 일러스트 

앱의 기능이 정교성과 다양성을 띠기 시작하면서, 앱을 일일이 테스트해 동작을 확인하는 절차는 노력과 비용이 많이 들거나 아예 불가능해졌습니다. 최근에 개발된 앱들은 단순할지라도, UI 흐름, 현지화 또는 데이터베이스 마이그레이션 등 확인해야 할 테스트 항목이 수도 없이 많기 때문입니다. QA 팀의 도움을 받아 앱이 올바로 작동하는지 수동으로 확인하는 방법도 있지만, 해당 단계에서 버그를 수정하려면 비용이 많이 듭니다. 따라서 개발 단계에서 문제를 해결하는 편이 더 낫습니다. 테스트를 자동화하는 것이 버그를 초기에 잡아낼 수 있는 최적의 방법입니다. 테스트 자동화(이하 테스트)는 다뤄야 하는 범위가 넓으며, Android가 제공하는 툴과 라이브러리는 중복으로 적용되기도 하여, 테스트를 처음 접하는 개발자분들이 어려워하는 경우가 많았습니다.

이에 저희는 이러한 피드백을 반영하고 Compose와 새 아키텍처 가이드를 반영하고자 d.android.com에 아래의 두 가지 테스트 섹션을 개선했습니다.

교육

첫째로, Android 앱 테스트에 대한 기본 사항을 다룬 새로운 테스트 교육 섹션이 추가되었습니다. 이제 초보자를 위한 핵심 가이드인 What to test 뿐만 아니라, Test doubles에 관한 상세 가이드를 만나 보실 수 있습니다.

단위 테스트에서 종속 항목 모조

단위 테스트에서의 가짜 의존성 데이터

이 가이드에서는 전반적인 이론을 설명하고, 다음 두 가지 주요 테스트 유형의 사례를 집중적으로 다룹니다.

UI 테스트에서 종속 항목 모조

UI 테스트에서의 가짜 의존성 데이터


툴 문서 업데이트
둘째로, 툴 문서의 테스트 섹션을 업데이트했습니다. Android 스튜디오부터 명령줄에서의 테스트까지, 테스트를 만들고 실행하는 데 유용한 모든 툴들을 설명해드릴 것입니다.

Unified Gradle 테스트 실행기.

Unified Gradle 테스트 실행기


해당 섹션에서는 다양한 변이, 계측 매니페스트 옵션 또는 Android Gradle 플러그인 설정을 사용하는 작업 등 고급 테스트 설정 기능에 대한 설명이 추가되었습니다.

새로 추가된 이 두 섹션에서는 Android 앱을 어디서 어떻게 테스트하는 것이 좋은지에 대한 전반적인 가이드를 제공합니다. 특정 기능과 라이브러리를 테스트하는 방법에 대해 자세히 알아보려면 Kotlin 플로우 테스트, 탐색 테스트, Hilt 테스트 가이드를 확인해 주시기 바랍니다.


머신을 통해서는 문서의 정확성을 자동으로 확인할 수 없으니, 오류를 발견하거나 제안해 주실 사항이 있다면 문서 Issue Tracker를 통해 알려 주시면 감사하겠습니다. 


작성자: Amanda Alexander (Product Manager, Android) 

이 글의 원문은 여기서 확인하실 수 있으며 블로그 리뷰에는 노현석(GDE)님이 참여해주셨습니다.


Android Jetpack Modern Android Development의 핵심 영역입니다. Jetpack은 100개 이상의 라이브러리, 도구 및 가이드라인 모음으로 개발자 여러분이 권장 사항을 준수하고 상용구 코드를 줄이도록 도우며, 모든 Android 버전 및 기기에서 일관되게 작동하는 코드를 작성하도록 지원하여 앱 고유 기능을 구축하는 데 집중할 수 있게 합니다. 

 

Google Play의 대부분의 앱은 앱 아키텍처에 Jetpack을 사용합니다. 현재 상위 1,000개의 앱 중 90% 이상이 Jetpack을 사용합니다

 

지금부터 I/O 세션 Jetpack에 관한 새로운 소식에서 다룬 Jetpack의 최신 업데이트 중 핵심 내용을 알려드리겠습니다. 



Jetpack의 주요 영역 업데이트 세 가지는 다음과 같습니다.  


  1. 아키텍처 라이브러리 및 가이드라인 

  1. 애플리케이션 성능 최적화 

  1. 사용자 인터페이스 라이브러리 및 가이드라인 


그리고 기타 주요 업데이트 사항을 마지막으로 소개해드리겠습니다. 

 

1. 아키텍처 라이브러리 및 가이드라인 

 

앱 아키텍처 라이브러리 및 구성요소를 통해 견고하고 테스트 및 유지보수가 수월한 앱을 만들 수 있습니다.  

 

데이터 지속성 

 

Room은 권장 데이터 지속성 라이브러리로 SQLite에 추상화 계층을 제공하여 플랫폼의 사용성과 안정성을 증가시킵니다. 

 

Room 2.4에서는 Kotlin Symbol Processing(KSP)이 정식으로 지원됩니다. KSP는 Kotlin 코드를 벤치마킹했을 때 KAPT보다 2배 향상된 속도를 보여주었습니다. Room 2.4는 기본적으로 Enum과 RxJava3, 그리고 Kotlin 1.6까지 완벽히 지원합니다. 

 

Room 2.5에서는 완전한 Kotlin으로 재작성한 버전이 포함되어 있습니다. Java 프로그래밍 언어로 작성된 이전 버전과 바이너리 호환이 가능하며, 향후 Kotlin 관련 개선의 발판을 마련할 수 있습니다. Room 2.5는 Room 쿼리를 PagingSource 객체로 반환하게 하는 room-paging 아티팩트를 통해 Paging 3.0도 기본 지원 합니다. 또한, Room에서 멀티매핑(nested map, array) 반환 유형을 사용하는 관계형 쿼리 메서드를 지원하기 때문에 개발자는 추가 데이터 구조를 정의하지 않고도 JOIN 쿼리를 수행할 수 있습니다. 


멀티매핑 반환 유형을 사용하는 관계형 쿼리 메서드

 

AutoMigrations 업데이트로 데이터베이스 마이그레이션을 단순화했고, 추가 Annotation과 속성도 지원합니다. @Database Annotation에 대한 새로운 AutoMigration 속성으로 자동 마이그레이션 전후 버전을 선언할 수 있습니다. Room에서 테이블과 열 수정에 관한 추가 정보가 필요하면 @AutoMigration Annotation으로 입력 데이터를 지정할 수 있습니다.  


 

DataStore 

DataStore 라이브러리는 SharedPreferences 관련 문제를 해결하는 강력한 데이터 저장소 솔루션입니다. 다양한 SharedPreferences 사용 사례를 대체할 이 강력한 솔루션 활용 방법을 자세히 확인하시려면 Modern Android Development 기술: DataStore에서 몇 가지 영상과 게시글을 참고하시기 바랍니다. 앱의 라이브러리 사용 테스트, 종속성 주입 사용, SharedPreference에서 Proto DataStore로 마이그레이션하는 방법에 관한 가이드라인까지 확인할 수 있습니다. 




증분 데이터 가져오기 


Paging 라이브러리로 작은 데이터 청크를 로드하고 표시하여, 네트워크와 시스템 리소스 소모를 줄일 수 있습니다. RecyclerViews나 Compose lazy list 내에서 앱 데이터를 점진적으로 매끄럽게 로드할 수 있습니다.   

 

Paging 3.1에서는 Rx와 Guava 통합을 안정적으로 지원하여 Paging의 기본 Kotlin 코루틴 사용을 Java로 대체할 수 있습니다. 또한, 새로운 반환 유형인 LoadResult.Invalid로 무효화 경합 상태 처리를 향상하여 무효화됐거나 오래된 데이터를 대신하도록 했습니다. 새로운 onPagesPresented API와 addOnPagesUpdatedListener로 빈 페이지에서 노옵스(no-ops) 로드와 실행 처리도 개선했습니다.  

 

Paging 3에 관한 자세한 내용은 Android 개발자 사이트에서 새롭게 간소화한 Paging Basics Codelab을 참고하시고, Paging 라이브러리를 목록화한 앱으로 통합하는 법도 확인하시기 바랍니다.  

 

  

 

앱 Navigation 모델로 정의 

 

Navigation 라이브러리는 앱 내 대상 간 이동을 위한 프레임워크입니다. 

 

Composable 기능을 앱 내 대상으로 허용하는 새로운 navigation-compose 아티팩트로 Navigation 구성요소를 Jetpack Compose에 통합했습니다. 

 

다중 백 스택 기능을 개선하여 상태를 더 쉽게 기억하도록 만들었습니다. NavigationUI가 표시된 대상의 상태를 자동으로 저장하고 복원하여 개발자는 코드를 바꾸지 않고도 다중 백 스택을 지원할 수 있습니다. 

 

navigation-fragment 아티팩트로 AbstractListDetailFragment에서 사전에 구축한 2개의 Window 레이아웃 구현을 제공하여 대화면 지원을 강화했습니다. 이 프래그먼트는 SlidingPaneLayout으로 목록 창(서브클래스로 처리)과 NavHostFragment를 사용하는 세부정보 창을 관리합니다.  

 

모든 Navigation 아티팩트를 Kotlin으로 재작성하여 제네릭을 사용하는 클래스(예: NavType 서브클래스)의 null 허용 여부를 개선했습니다.  

 

꼼꼼한 아키텍처 가이드라인 

 

주요 아키텍처 라이브러리가 함께 작동하는 방식은 Modern Android Development 기술: 아키텍처에서 Modern Android Development 권장사항을 다룬 영상과 개발자 문서를 통해 확인해 보세요. 

 


2. 애플리케이션 성능 최적화 

 

성능 라이브러리로 성능 기준에 적합한 앱을 구축하고, 고성능 유지를 위한 최적화 방식을 찾아 최종 사용자에게 더 나은 경험을 제공할 수 있습니다. 

 

시작 시간 개선 

 

앱 속도는 특히 앱 설치 직후 앱을 사용할 때 사용자 경험에 크게 영향을 미칩니다. 이 첫 경험을 개선하기 위해 Baseline Profiles을 만들었습니다. Baseline Profiles에서는 AOT 컴파일을 우선적으로 처리하는 코드 경로에 대한 메타데이터를 활용해, 앱과 라이브러리에서 Android 런타임을 확보합니다. 모든 라이브러리에서 집계된 프로필 데이터는 앱의 APK에 basline.prof 파일로 전달되고, 이 파일은 앱 설치 시 앱과 앱의 정적 라이브러리 코드를 부분적으로 사전 컴파일 하는 데 사용합니다. 이를 통해 앱 로딩이 빨라지고 사용자가 앱과 처음 상호 작용 할 때 마주하는 누락된 프레임을 줄일 수 있습니다. 

 

저희는 이미 Google에 Baseline Profiles을 활용하기 시작했습니다. Play 스토어 앱에서는 Baseline Profiles을 적용한 이후 검색 결과 페이지에서 초기 페이지 렌더링 시간이 40% 감소했습니다. 또한, Baseline Profiles에 Fragments와 Compose처럼 자주 사용하는 라이브러리를 추가해 최종 사용자에게 더 나은 경험을 제공할 수 있습니다. 여러분만의 Baseline Profiles을 생성하려면 Macrobenchmark 라이브러리를 사용해 보세요.  

 

애플리케이션 계측 

 

Macrobenchmark 라이브러리는 개발자가 앱 성능을 잘 이해할 수 있도록 Jetpack의 벤치마킹 범위를 앱 시작, RecyclerView 스크롤이나 애니메이션 재생과 같은 통합된 UI 운영 등 더 복잡한 사용 사례까지 확장했습니다. Baseline Profiles을 생성하는 데도 Macrobenchmark를 사용할 수 있습니다.  

 

Macrobenchmark의 테스트 속도를 향상하고 새로운 실험용 기능을 추가했습니다. TraceSectionMetric을 사용한 트레이스 기반의 타이밍 맞춤 측정도 지원하여 개발자는 코드의 특정 부분을 벤치마킹할 수 있습니다. 또한, AudioUnderrunMetric으로 오디오 버퍼 언더런을 감지하여 오디오의 버벅거림을 확인할 수 있습니다.  

 

BaselineProfileRule로 런타임을 최적화에 도움이 되는 프로필을 생성합니다. BaselineProfileRule은 다른 매크로 벤치마크와 비슷하게 작동하여 람다 내 코드로 사용자 작업을 나타냅니다. 아래 예시에서 컴파일러가 AOT를 최적화해야 하는 중요한 사용자 여정은 런처에서 앱을 처음부터 시작하는 콜드 스타트입니다.  

 

 

Macrobenchmark로 Baseline Profiles을 생성하고 만드는 방법은 Android 개발자 사이트에 게시된 사용자 가이드를 참고하시기 바랍니다. 

 

UI 버벅거림 피하기 

 

새로운 JankStats 라이브러리로 앱 UI의 성능 문제를 추적하고 분석하며 누락된 렌더링 프레임, 일명 “버벅거림"을 보고합니다. JankStats는 Android 플랫폼의 기존 API(예: FrameMetrics)를 기반으로 구축했지만 API 수준 16부터 사용할 수 있습니다.  

 

이 라이브러리에는 플랫폼에 구축된 기본 기능 이외에도 추가 기능이 있습니다. 휴리스틱으로 누락된 프레임의 원인을 정확히 찾고, UI 상태로 보고서에 추가적인 맥락을 제공하며, 보고 콜백으로 분석용 데이터를 업로드할 수 있습니다.  

 

JankStats의 주요 기능 세 가지를 자세히 살펴보겠습니다. 

 

  1. 버벅거림 확인: 이 라이브러리는 내부 휴리스틱을 사용하여 버벅거림이 발생한 시점을 확인하고, 개발자가 문제를 분석하고 수정하는 데 필요한 정보를 얻을 수 있도록 버벅거림 보고서를 발행할 시점을 결정합니다. 

  1. UI 맥락 제공: 버벅거림 보고서가 더 유용하도록 라이브러리는 UI와 사용자의 현재 상태를 추적하는 메커니즘을 제공합니다. 보고서를 기록할 때마다 제공되는 정보로 문제가 발생한 시점과 그 시점에 사용자가 실행한 작업을 확인해 앱의 문제 영역을 찾을 수 있습니다. 일부 상태는 여러 가지 Jetpack 라이브러리를 통해 자동으로 제공되지만, 개발자도 자체 앱별 상태를 제출해야 합니다.  

  1. 결과 보고: 매 프레임마다 리스너를 통해 JankStats 클라이언트에 프레임 정보와 프레임 완료에 걸리는 시간, 버벅거림으로 간주해야 하는지 여부, 프레임 중 맥락 정보를 통보합니다. 클라이언트는 전체 성능 문제를 디버깅하는 데 도움이 될 만한 분석이라면 데이터를 집계하고 업로드하는 것이 좋습니다.

 

앱에 로깅 추가 

 

Tracing 라이브러리로 시스템 버퍼에 트레이스 이벤트를 작성하여 앱 성능을 프로파일링할 수 있습니다. Tracing 1.1은 API Level 29에 추가한 <profileable> 매니페스트 태그와 비슷하게 API Level 14부터 비 디버그 빌드 내에서 프로파일링을 지원합니다. 

 

3. 사용자 인터페이스 라이브러리 및 가이드라인 

 

UI 라이브러리에 몇 가지 변화를 주어 대화면 기기 호환성, 폴더블 기기, 그림 Emoji를 더 훌륭하게 지원합니다.  

 

Jetpack Compose 

 

Jetpack Compose는 네이티브 UI를 구축하는 최신 Android 툴킷으로 최근 출시된 1.2 베타 버전에 몇 가지 기능을 추가하여 다운로드 가능한 글꼴, 지연 레이아웃, 중첩 스크롤 상호 운용 등 고급 사용 사례를 지원합니다. 자세한 내용은 Jetpack Compose에 관한 새로운 소식에서 확인해 보세요. 

 

Window 상태 이해 

 

새로운 WindowManager 라이브러리에서는 API Level 14부터 공통 API 노출 영역을 제공하여 개발자는 멀티 윈도우 환경과 새로운 기기 폼 팩터를 앱에 지원할 수 있습니다. 

초기 버전은 콘텐츠가 보이는 방식에 영향을 주는 물리적 속성 쿼리를 포함해 폴더블 기기 사용 사례에 초점을 두었습니다. 

Jetpack의 SlidingPaneLayout 구성요소를 WindowManager의 깔끔한 레이아웃 API를 사용하도록 업데이트하여 콘텐츠가 물리적 힌지처럼 접힌 영역에는 놓이지 않습니다. 

 

드래그 앤 드롭 

 

새로운 DragAndDrop 라이브러리는 개발자가 앱 내부와 외부에서 드래그 앤 드롭 데이터를 허용하도록 하여 새 폼 팩터와 윈도잉 모드를 지원합니다. DragAndDrop은 일관된 드롭 타겟 어포던스를 포함하며 API Level 24부터 지원합니다. 

 

 

새 API를 이전 API Level 수준으로 백포팅하기 

 

AppCompat 라이브러리로 이전 API 버전의 플랫폼에서 어두운 모드와 같은 UI 기능의 백포트를 포함해 새 API에 접근합니다.  

 

AppCompat 1.4는 Emoji2 라이브러리를 통합하여 API Level 14 이상의 AppCompat가 지원하는 텍스트 기반 뷰에서는 새로운 그림 이모티콘을 기본으로 지원합니다. 

 

맞춤 로케일 모음은 API Level 14부터 지원합니다. 이 기능으로 앱을 시작하면서 로케일 설정을 수동으로 지속할 수 있고, 서비스 메타데이터 플래그를 통해 자동으로도 지속할 수 있습니다. 또한 로케일을 동기적으로 로드하고 필요한 경우 실행 중인 Activity를 재생성하도록 명령합니다. API Level 33 이상에서는 추가 오버헤드 없이 플랫폼에서 지속성을 관리합니다. 

 

기타 주요 업데이트 

 

Annotation

 

Annotation 라이브러리는 도구 및 다른 개발자가 앱 코드를 이해하는 데 도움이 되는 메타데이터를  표시합니다. 린트 검사와 쌍을 이루는 @NonNull과 같은 일반적인 Annotation을 제공하여 코드의 정확성과 유용성을 개선합니다.  

 

Annotation을 Kotlin으로 마이그레이션하고 있어 Kotlin을 사용하는 개발자는 @file을 포함해 더 적절한 Annotation 타겟을 곧 확인할 수 있습니다. 

 

요청이 많았던 몇 가지 Annotation을 해당 린트 검사와 함께 추가했습니다. 여기에는 메서드나 기능 재정의 관련 Annotation과 @RequiresAPI에 결과를 제공하고 특정 API Level부터는 사용하지 않는 @DeprecatedSinceAPI Annotation이 포함됩니다. 

 

Github 

 

현재 저희는 Github에 100개 이상의 프로젝트를 공유했습니다! 몇 가지 모듈은 일반적인 Github 기반 워크플로를 사용하는 개발자분들께 오픈소스 기여를 받고 있습니다. 

 

  • Activity 

  • AppCompat 

  • Biometric 

  • Collection

  • Compose Compiler 

  • Compose Runtime

  • Core 

  • DataStore 

  • 프래그먼트 

  • Lifecycle 

  • Navigation 

  • Paging 

  • Room 

  • WorkManager 


랜딩 페이지에서 저희가 pull request를 어떻게 처리하는지 더 자세히 확인하고, Jetpack 라이브러리로 앱을 구축해 보세요. 

 

지금까지 지난 몇 달간 달라진 Jetpack을 간단히 살펴봤습니다. Jetpack의 각 라이브러리에 관한 자세한 내용은 AndroidX 출시 노트를 참고해주시고, 관련 라이브러리를 빠르게 검색하려면 API 검색 도구를 이용하시기 바랍니다. 추가적인 주요 사항은 Google I/O 세션 영상에서 확인하실 수 있습니다. 

 

자바는 Oracle 및/또는 Oracle 계열사의 상표 혹은 등록 상표입니다.