안녕하세요. Azar Studio에서 Azar Android를 개발하고 있는 Jerome입니다. 이번에 처음으로 Shoreline Amphitheatre에서 열린 Google I/O 2019에 다녀왔습니다. 전 세계 엔지니어들이 모이는 자리인 만큼 매우 풍부하고 뜻깊은 행사였는데요, 지금부터 참관기를 전해드리고자 합니다. 행사가 진행되는 3일 동안 Android, Kotlin, Web, AI, Flutter 등 Google 제품들의 변경내역과 새로운 소식들로 스케줄이 가득 차 있었는데 저는 주로 Android 위주의 소식을 접하고 왔습니다. Android 내용의 비중이 가장 컸기 때문에 3일 내내 아주 바쁜 스케줄이었습니다. 참관기인만큼 아주 디테일한 내용보다는 행사의 구성, 주요 기능의 간략한 리뷰 및 저의 생각 위주로 내용을 구성하겠습니다.

행사 시작 전

체크인

Google I/O에 입장하기 위해서는 반드시 I/O 체크인을 해야 합니다. 행사 전날에 미리 체크인을 하면 행사 당일에 빠르게 입장할 수 있다는 소식을 접하고 미리 방문했습니다. 셔틀버스 탑승 구역 근처의 I/O Registration 이라 적힌 커다란 부스로 찾아갔습니다. 이미 많은 참가자들이 모여 대화를 나누고 인증샷도 찍고 행사장 지도를 AR로 체험해보고 있었습니다. 직원들의 친절한 안내에 따라 체크인을 하고 나면 소정의 기념품들(텀블러, 스카프?, 썬크림 등)과 행사 내내 목에 걸고 다녀야 하는 ID 카드를 받을 수 있습니다.

Check-in

이동

행사 당일 Mountain View Station 근처에서 I/O 푯말을 들고 서있는 구글 직원의 안내에 따라 셔틀버스에 무료로 탑승했습니다. 처음 보는 외국인들과 다닥다닥 붙어앉아 각국 언어의 대화를 엿들을 수 있었고 좌석 라인마다 콘센트, USB 충전 박스가 있어서 스마트하게 이동할 수 있었습니다.

Shuttle Bus

입장

보안 검색을 마치고 입장을 하면 센터에 I/O 포토존이 있습니다. 많은 사람들이 인증샷을 남기고 있었고 아마 매년 저 위치에 조형물이 리뉴얼되어 위치할 것 같습니다. 마운틴뷰의 아침은 대부분 이렇게 구름이 많은 날씨인 것 같은데 점심쯤이면 구름이 싹 사라지고 아주 강렬한 햇빛의 날씨로 바뀝니다. 덕분에 노출되는 피부가 아주 노릇노릇하게 익어 왔습니다.

Entrance

조식

아침 8시 30분부터 세션이 시작이라 이른 시간에 도착해야 해서 아침을 거르고 오는 분들이 많을텐데 빵, 과일, 커피, 우유 등 간단한 조식을 제공해줬습니다. 여기서 조금이라도 챙겨 먹으면 오전 세션을 든든하게 들을 수 있습니다. 사진 속에 잘 찾아보시면 이번에 함께 참석한 그분도 보이네요!

Breakfast

행사 시작

Keynote

가장 첫 세션인 Keynote입니다. 좌석이 무대와 멀어서 실루엣만 보이네요. 대형 모바일 스크린에 집중하고 귀를 쫑긋 세웠습니다. 현 구글 CEO인 Sundar Pichai, 현 구글 부사장인 Aparna Chennapragada 등 여러 스피커들이 나와 AI, AR 기술에 기반한 Google Lens, Google Assistant, Live Caption 등 다양한 구글 제품을 시연했습니다. Google Lens 카메라로 캡처한 문자열을 번역하여 읽어주기도 하고, 특정 이미지를 객체화해서 카메라에 비치는 사물의 위에 얹어 배치하는 모습에 호응이 좋았습니다. 머지않아 내 눈에 보이는 모든 것에 구글 렌즈를 갖다 대면 내가 궁금해하는 모든 정보를 제공해주지 않을까 기대되네요. Google Assistant의 기능은 AI를 접목하여 점점 강화 되는 듯했고 비행기 모드에서도 실시간 동영상의 자막을 처리하는 Live Caption 기능도 아주 훌륭했습니다. 이런 AI 모델들은 기기에 내장된다고 하네요. 그밖에 Android Q의 간략한 소개와 Google Home, Pixel3a 기기가 공개되었습니다.

Keynote

What’s New in Android

Android라는 같은 관심사를 가진 사람들과 함께하는 세션입니다. 실제로 이렇게 전 세계의 사람들과 한자리에 있으니 Android의 인기가 실감이 나더군요. Android Q의 새 기능들이 소개됐는데 이미 인터넷으로 일부 내용을 접하고 왔지만 이 자리에서 담당자들이 나와서 잘 정리해주는 듯했습니다.

Whats New in Android

주요 몇개의 기능을 소개하자면,

  • Bubbles
    • Notification에 Bubble이라는 형태가 추가되었습니다. 최상위에 뷰를 노출하기 위해 사용해왔던 SYSTEM_ALERT_WINDOW 권한을 완전히 폐기하고 Bubble형태의 Notification으로 대체될 것 같습니다.

      bubble

  • Dark Theme
    • Android Q에서 Dark Theme을 지원하게 됩니다. 저 같은 경우는 배터리 절약과 눈의 피로를 줄이기 위해 어두운 계열의 테마를 좋아해서 매우 기대되는 기능입니다. Google의 대부분의 앱들이 점점 Dark Theme을 지원하고 있어 좋은 사례를 많이 보여줄 것으로 예상되네요.

      darktheme

  • Notification Actions
    • Notification에 포함된 메시지를 읽어 자동으로 답변이나 액션을 제안해줍니다. 정말 내가 원하는 답변이 제안된다면 굉장히 편리할 수 있겠네요.

      Notification Actions

  • Sharing, ART 성능 향상, 보안 향상, Architecture Components, Jetpack 등 …

그 밖의 자세한 기능들은 Android Q features and APIs에서 확인할 수 있습니다.

What’s New in Architecture Components

Android Architecture Components는 요즘에 기본으로 사용하고 있는 라이브러리이기에 아주 흥미로웠습니다. LiveData, ViewModel, Room, WorkManager, Paging 등 Android 프로젝트의 아키텍쳐 부분에 깊숙이 관여해서 생산성 향상을 체험하고 있습니다. 집중해서 눈으로 보고 감탄하느라 사진을 많이 담지 못했는데 제가 앉았던 자리와 비슷한 각도의 모습을 영상을 통해 캡쳐했습니다.

Architecture Components

주요 몇 개의 기능을 소개하자면,

  • Kotlin First
    • AAC의 API들이 Kotlin으로 디자인됩니다.
    • 앞으로 더 많은 Kotlin 제품을 볼 수 있게 될 것 같습니다.
  • Data Binding
    • 컴파일이 빨라집니다.
    • Live Class Generation으로 Binding 클래스가 실시간으로 컴파일 됩니다.
    • 에러 메시지가 친절해집니다 ❤️
    • Android Studio 3.5부터 적용된다고 합니다.
  • ViewBinding
    • DataBinding과 유사하지만 <layout></layout> 태그가 없는 xml에서도 동작하는게 조금 다른 것 같습니다.
    • Android Studio 내장 기능으로 컴파일 타임에 지장을 주지 않으며 빠르다고 합니다.
    • DataBinding과도 호환이 된다니 findViewById, ButterKnife 등의 대체재로 뷰의 참조가 한결 쉬워질 것 같습니다.
    • Android Studio 3.6부터 적용됩니다.

      View Binding

  • Saved State
    • ViewModel보다 더 넓은 범위인 프로세스 재실행시에도 데이터를 유지해줍니다.
    • ViewModel과 함께 사용한다면 좋은 UX를 구현하기가 쉬워질 것 같습니다.
  • ViewModel
    • 초기화 코드가 간결해집니다.
      • ex) val userViewModel: UserViewModel by viewModels()
  • Room 2.1
    • Coroutine, Full Text Search를 지원합니다.
    • DatabaseView를 지원합니다.
  • WorkManager, Navigation, Paging 등 기타

2017년 Google I/O에서 처음 발표됐던 Android Architecture Components(AAC)의 기능은 2년이 지난 지금 Android 개발 생태계에 많이 자리 잡았고 점점 더 개선되고 강화되고 있는 것 같습니다. AAC의 덕을 많이 보고 있는 저로서는 AAC 팀의 엔지니어들이 무대에 올라와 하나씩 개선 및 추가사항을 발표할 때 고마움을 느끼며 뜨거운 환호로 보답했습니다. 디테일한 기술적인 내용은 문서를 통해 하나씩 살펴보아야 할 것 같네요.

주요 Android 관련 요약

Kotlin의 적용률이 꾸준히 상승해서 작년 I/O 때보다 약 5배가 증가했네요. 이번 I/O에서 Kotlin first를 많이 강조했는데 앞으로 더욱 가파른 성장률을 보여주지 않을까 기대됩니다. 현재 아자르 프로젝트에서도 Kotlin을 Main Language로 사용하며 편리함을 많이 누리고 있어서 이런 소식은 기쁘게 다가왔습니다. 더욱 흥했으면 좋겠네요!

Kotlin adoption

CameraX가 Jetpack에 포함되어 소개됐습니다. 안드로이드에서 Camera 구현은 항상 복잡하고 귀찮은 작업이 뒤따랐는데 이는 코드량을 획기적으로 줄여줍니다. 화면에 Camera를 띄우는 작업이 아래의 코드만으로 가능하게 되니 아주 놀라웠습니다. 이미지 데이터를 획득하고 캡처하는 등 추가 기능들도 비슷한 방법으로 쉽게 추가가 가능합니다. 앞으로 Camera에 대한 진입장벽이 많이 낮아지겠네요.

CameraX

Jetpack Compose라는 생소한 기능이 공개됐습니다. 선언형 UI로 React, Litho, Vue.js, Flutter에서 영감을 받았다고 합니다. xml로 레이아웃을 작성하는 Android의 기존 방식과는 조금 다르게 xml 없이 완벽하게 코드로만 레이아웃을 작성하는 게 조금 어색하네요. 복잡한 레이아웃에서 xml로 작성했을 때의 Preview 기능은 매우 유용한데 Compose는 Preview가 가능할지 의문이네요. 심플한 레이아웃 구성은 Compose의 이점이 있을 것도 같습니다. 코드로 뷰를 생성함과 동시에 listener를 함께 다루어 뷰에 관련된 코드룰 한 군데로 모을 수도 있겠군요!

Compose

Flow라는 Virtual Layout이 ConstraintLayout 2.0에 추가되었습니다. 여러 뷰들을 flat하게 구성하여 가로, 세로로 편리하게 배치할 수 있습니다. TableLayout으로 구현하는 행렬 형태의 레이아웃을 간편하게 구성할 수 있어 유용할 것 같습니다.

Flow code

Multi-resume이라는 기능이 Android Q에 포함됩니다. 기존의 Multi window에서 하나의 window에 focus가 되면 다른 한쪽의 window는 paused 상태가 됐습니다. 많은 앱들이 이 multi window 환경에서 resumed/paused 상태 변경을 제대로 처리하지 않아 발생하는 문제를 많이 가지고 있었습니다. 하지만 이번에 소개되는 multi resume은 양 window 모두가 resumed 상태가 되는 신기한 기능입니다. 부드럽고 빠른 멀티태스킹이 가능해지겠지만 늘어나는 메모리 소비는 신경을 써야 할 것 같습니다.

Multi resume

그 외

코드랩

CameraX 세션을 듣고 실습이 하고 싶어 몸이 간질간질해져 코드랩으로 달려갔습니다. 구글의 코드랩은 이미 온라인에 모두 공개가 되어 있지만 종류가 워낙 많고 다 해보기엔 쉽지 않습니다. 저는 지금까지 관심 있는 주제 위주로 코드랩을 수행해 왔었는데요. 현장에서 CameraX API를 빠르게 사용해보았습니다. 스텝들이 주위에 대기하고 있어서 실습 도중에 질문도 할 수 있고 친절하게 도움을 줍니다. 기존의 Camera API를 사용하기 위해서는 스트레스를 받으며 수많은 코드를 작성했어야 했는데 CameraX의 훨씬 간결해진 API를 보고 감탄을 했습니다. 코드랩이 끝나고 직원에게 검사를 받으면 스티커를 주는데 4장을 모을 시 2020년 Google I/O 티켓의 추첨 기회를 줍니다. 4장을 모으기에는 시간이 많이 뺏길 것 같아 Flutter 실습까지 2개의 스티커에서 좋은 마무리를 했습니다.

Codelab

먹거리들

외국을 가면 항상 음식을 가려서 살이 쭉 빠지곤 하는데 I/O 행사 기간 동안 챙겨주는 조식, 중식 및 간식은 입맛에 맞는 것이 많았습니다. 전 세계 사람들이 모이는 곳이라 그런지 다양한 사람들의 식문화를 이해하는 메뉴들로 구성되어 골라 먹을 수 있게 준비를 해놓은 게 인상 깊었습니다. 식사시간 외에도 곳곳에 스넥부스와 음료 드럼통이 설치되어 허기짐을 달랠 수 있습니다. 아래 사진처럼 이렇게 잔디밭에 옹기종기 앉아서 식사를 하는 게 군대 이후로 처음인 것 같은데 신선하고 좋았습니다.

Lunch

즐길거리들

1일차 2일차에는 그날 세션이 모두 끝나고 난 후 지쳤을 참가자들을 위한 즐길 거리들이 준비돼 있었습니다. 비보잉 하는 사람들과 밴드, 롤러스케이트 그리고 각종 게임을 모아놓은 오락실까지 즐기다 보니 시간이 가는 줄 모를 정도였습니다. 덕분에 밤 10시가 넘어 숙소로 가기 위한 우버 잡기 전쟁을 했어요.. 하지만 구글의 행사 기획력과 그들의 감성에 젖을 수 있는 귀한 시간이니 조기 귀가하지 말고 꼭 끝까지 즐기는 것을 추천합니다!

기묘한 음악을 틀고 기묘한 퍼포먼스를 하던 분들

Funny Car

추억의 4발 달린 롤러스케이트!

Roller Skate

스텝들도 놀 땐 놀아야죠 in 오락실

Basketball

ML이 관여하는 DJ 그리고 퍼포먼스가 인상 깊었던 보컬

Concert with ml dj

마치며

이번 Google I/O는 제가 생각했던 것 이상으로 컨텐츠가 풍부했고 좋은 시간을 보냈습니다. 전체 세션 통틀어서 Android 관련 세션이 아주 큰 비중을 차지해서 스케줄 짜면서도 아주 신났었습니다. 현재 아자르 프로젝트에도 사용 중인 다양한 기술들의 개선사항과 강화된 기술 발표를 들을 때는 구글의 든든한 지원을 받는 느낌이 들었습니다. 이미 온라인에 공개된 내용도 일부 있었지만 A부터 Z까지 자세한 내용을 현지에서 라이브로 빠르게 접할 수 있게 기회를 준 하이퍼커넥트에 감사의 말씀드립니다. 그리고 저는 다시 영어공부를 시작합니다. Google I/O 행사 중 남들 웃을 때 같이 웃고 남들 박수칠 때 같이 박수칠 줄 알아야 할 것 같습니다. Google I/O는 어찌 보면 그냥 자사의 제품들을 소개하고 의견을 나누는 행사인데 전 세계 사람들이 자발적으로 시간과 돈을 들여가며 참석해서 발표하는 내용마다 환호해주는 모습에 구글의 의존성과 힘이 부럽기도 했습니다. 지금까지 쏟아져 나온 발표 내용의 디테일한 내용 검토는 이제 저의 숙제로 남았네요. 좋은 내용은 잘 검토하고 습득해서 업무에 잘 사용해야겠습니다.

링크