본문 바로가기
콤퓨타

2024 Google I/O Extended 인천/송도 후기

by 다_녤 2024. 7. 27.
반응형

 오늘 인천 송도컨벤시아에서 열린 Google I/O Extended 에 참가하여 여러 세션들을 보고 왔습니다. 당일에는 바로 옆에서 도그페어가 같이 열려서 강아지들도 많이 볼 수 있었네요.

[그림] Google I/O Extended Incheon, Songdo

 세션들은 아래와 같이 오후 1시부터 7시까지 총 6개의 타임라인에 각각 7개의 세션이 열려, 총 42개의 세션이 진행되었습니다. 다양한 기업에 재직 중인 현직자들이 세션을 진행하여 개인적으로 기대가 되었습니다.

 

 저는 안드로이드개발에 관심이 많아, 안드로이드 세션들 위주로 청취하고 왔습니다. 마지막에는 구글에서 최근 공개된 제미나이(Gemini) 기술이 궁금해서 관련 기술을 적용하는 내용을 담은 세션을 하나 듣고 마쳤습니다.

 

 준비된 세션들은 아래와 같습니다.

[그림] Google I/O Extended 세션들

 

 제가 청취한 세션들에 대한 후기들을 적어보려고 합니다. 총 5가지 세션을 청취하고 왔습니다.

 이번 행사에서 안드로이드를 주제로 한 세션들은 하나같이 Jetpack Compose와 관련된 주제로 진행되었습니다. 아무래도 이제 많은 기업들이 .xml 레이아웃보단 Compose로 전환/작성하는 추세라는 걸 많이 느꼈습니다. 

#1. Compose 함수를 나누는 조건은?

 안드로이드 Jetpack Compose는 안드로이드의 UI를 그리기 위해 사용되는 라이브러리로, 기존에는 .xml 형태의 layout 을 통해 UI를 그렸지만, 이제는 Composable 함수라고 표현되는 Component들을 엮어서 UI를 그리고 있습니다.

 많은 안드로이드 개발 서적들이 .xml 기반으로 작성된 UI가 많지만, 졸업프로젝트도 그렇고, 대학수업도 그렇고 많은 부분에서 Compose로의 전환이 이루어지는 것을 느꼈습니다.

 해당 세션에서 말하고자하는 내용은 UI안에서 여러 부분들을 개별 composable 함수로 분리할 수 있지만, 너무 세세하게 분리해서는 안된다는 내용이 주요 내용이었습니다.

 예를 들어, 우리가 일반적으로 어플리케이션의 화면을 Topbar, Content, BottomNavigator로 나누었을 때, Topbar의 세부 Text까지 개별 함수로 모듈화하는 건 오히려 옳지 못한 리팩토링이라고 설명했습니다.

 

#2. Compose 성능 끌어올리기

 개인적으로는 이번 세션이 가장 저에게 많은 도움이 되었다고 생각하는 세션입니다. 연사님은 우아한형제들의 강경완님이 진행하셨습니다.

 전반적으로 Compose가 UI를 만드는 과정과 성능향상에 대한 아이디어를 같이 활용하여 세션을 진행하였습니다.

 기본적으로 Compose code는 source code -> compose compiler -> compose runtime <-> UI 형태로 이루어지고, compose runtime과 UI 사이에서 state가 오가며, recomposition 여부를 결정한다고 하였습니다.

 그럼, 여기서 어떻게 Compose의 성능을 향상시킬까?가 이제 주제인데, 먼저 가장 쉬운 방법은 Compose의 version을 올리는 것이라고 합니다. 매번 version이 올라감과 같이 성능이 같이 향상되고 있다고 합니다.

 그 다음에는 불필요한 recomposition을 제거하는 것이라고 했습니다. 이를 설명하면서 compose compiling된 코드를 보여줬는데, 해당 composable 함수에 stable, unstable과 같은 type이 기재되어 recomposition을 skip 할 수 있게 구성을 하기도 할 수 있다는 것을 알게 되었습니다.

 마지막으로는 benchmarkinng을 통한 측정 및 문제파악을 하는 것입니다. 대표적으로는 andorid perfetto(https://perfetto.dev/) 같은 tool을 활용하여 timeline에서 각 요소가 rendering 되는 것을 확인 할 수 있다는 것을 알게 되었습니다.

 개발하면서 구현위주로만 고민을 하였는데, 이렇게 세세한 소요시간을 고려하여 성능평가를 하고 개선해봐야겠다는 생각이 들었습니다.

 

#3. Material Motion for Compose

 이번 세션은 네이버웹툰 현직자이신 안성용님이 직접 제작한 Material Motion library를 소개하면서 진행되었습니다. 전반적으로 Compose에서 사용가능한 animation에 대한 소개로 진행되었습니다. 화면전환도 단순히 한 종류의 transition만 있는 것이 아니라 transition 시작전 효과, transition 중 효과, transition 후 효과 등 다양한 parameter를 조정하여 전환효과를 만드는 것을 보았습니다.

 

#4. Jetpack Clance를 사용한 Android 위젯 생성

 Android 스마트폰을 사용하면 바탕화면에 나타나는 날씨, 캘린더 등 다양한 위젯들을 볼 수 있는데 이번 세션은 그런 위젯들을 어떻게 구현할지에 대한 내용이었습니다. 새롭게 알게 된 점은 위젯이 어플리케이션과 같은 프로세스를 통해 launched 되어서 동작하는지 알았는데, 아예 별개의 프로세스를 만들어서 실행된다는 점이었습니다. 근데 그럴만도 한게, 어디까지나 위젯에서 가하는 상호작용과 우리가 어플리케이션 속에서 진행하는 상호작용은 별개의 방식으로 진행되다보니까 그렇다고 생각이 들었습니다.

 

#5. Spring ai 입문하기 with Gemini

 처음에 해당 세션이 단순히 intellij와 같은 tool에서 사용하는 Gemini가 주를 이룰 것이라고 생각했었는데요. 발표내용은 완전히 달랐습니다. 전반적인 AI기술로 구성된 LLM(Large Language Model)에 대한 개념과 관련 용어들, 그리고 실제로 프롬프팅을 통해 내가 유도하고자 하는 정보를 알아내는 과정까지 전반적인 흐름을 짚었습니다.

아직은 사람이 신경써줘야 할 부분이 많고, 또 최적화시키기 위해 사용하는 리소스와 비용 대비 효과가 적다는 내용으로 설명을 해주셨습니다.

모든 세션들을 듣고 난 소감

 핑계라면 핑계지만, 아무래도 최근에 다른 일로 바빠서 개발관련 공부를 하는데 집중을 잘 하지 못했었는데, 이번 개발 관련 행사에 참여하면서 오랜만에 동기부여도 되고, 의지도 샘솟는 기회를 가질 수 있었더 거 같아서 좋았습니다.

 또한, 현업에서 업무 중 필요에 의해 도입하고 사용한 방식과 툴들을 보면서 실제로 개발업무를 하면서 어떤 니즈가 생길지 예상이 되기도 했습니다. 개발을 효율적으로 하기 위해 라이브러리를 만드는 경우나 퍼포먼스 개선을 위해 profiler를 통해 프레임 단위 분석을 하기도 하는 모습이 취미개발(?)을 넘어서는 프로페셔널함을 느끼게 해줬습니다.

 

 다음에도 비슷한 행사가 열리면 적극적으로 참여할 생각입니다. 오늘 하루도 보람차게 마쳤습니다.

 

반응형