attached to post
# DroidKnights 2024 작년 "DroidKnights 2023"에 이어, "DroidKnights 2024" 컨퍼런스에도 다녀왔습니다. 🙂 이번에도 많은 안드로이드 개발자분들을 만날 수 있었습니다. 이번 컨퍼런스에서는 Compose와 관련된 주제가 많았고, 최적화 관련 주제에 대한 발표 세션도 있었습니다. 그중 들었던 세션들을 정리해보려고 합니다. ## Compose 성능 최적화를 위한 Stability 마스터 하기 - 엄재웅님 1. Jetpack Compose: Stable 버전이 발표된지 3년이 지났으며, 13만 개가 넘는 앱에서 사용되며 안정성 입증. 2. Compose 구조: SourceCompilerRuntime → UI. 3. Compose Compiler: Jetpack Compose 내에서 중추적인 역학을 하는 핵심 구성 요소 4. 최근 변화: 4월에 Jetbrains로 코드 베이스 이동, Kotlin 2.0과 통합. 5. Compose Runtime: Gap Buffer라는 데이터 구조에서 파상된 Slot table을 사용해서 상태 저장 6. Smart Recomposition, Strong Skipping Mode, Stability Configuration File 등으로 성능 향상. 7. Recomposition은 State나 매개변수 변경 시 발생. 8. Stable 타입: 원시 타입, 불변 data class, @Stable, @Immutable. 9. Unstable 타입: 추상 클래스, List, Map. 10. 주요 어노테이션: @Immutable, @Stable, @NonRestartableComposable로 안정성 관리. ## 앱 성능 영혼까지 끌어올리기 - 배필주님 1. Crash 발생률이 가장 낮은 앱과 가장 높은 앱의 이용자 사용 시간 차이가 대략 2분정도 차이가 남. 2. 성능 관리 핵심 요소: 응답성, 안전성, 효율성. 3. 안전성: 크래시 발생 위치 및 원인 분석. 4. 기기 특성: 네트워크, 국가, 기기 사양 등 파악. 5. 응답성: 앱 시작 시간, UI 반응 속도. 6. 효율성: CPU, 메모리, 배터리 상태 모니터링. 7. Firebase Performance Monitoring: 자동 추적, 커스텀 트레이스를 통해서 상태를 확인 8. 개선 사례: 앱 시작 시간 최적화, Baseline Profile 적용. 9. 결과: CPU 부하 감소, 진입 속도 23~25% 개선. ## Compose UI 컴포넌트 설계와 테스트 - 김수현님 1. 컴포넌트 설계 기준: 재사용 가능성, 테스트 가능성, 단일 책임, 변경에 유연함. 2. 화면 단위 구현 vs 컴포넌트 단위 구현: 컴포넌트 단위가 변경사항 전파에 유리. 3. 선언형 UI: React, Flutter, SwiftUI, Jetpack Compose 4. 재사용성: 비즈니스 확장과 변경을 고려한 설계. 5. 중복 코드: 외관상 중복된 코드라도 수정의 이유가 다르면 실제로는 중복이 아니다. 6. Stateful vs Stateless: Stateful은 상태를 공유하거나 재사용하기 어려움 따라서 State Hoisting을 통해 상태와 UI를 분리. 7. 컴포넌트 테스트: Contract 분석, 의미 있는 단위로 쪼개어 테스트. 8. Screenshot Testing: 다양한 해상도에서 시각적 검증. 9. UI 테스트 도구 : Compose UI Testing, Compose Preview, Screenshot Test. 10. 테스트 코드: 기능 검증과 함께 실질적인 문서 역할. ## Github Actions로 효율적인 배포 환경 만들기 - 김태성님 1. 자동화 필요성: 테스트 누락, 코드 스타일, 수동 배포 등의 문제점 개선을 위해 Github Actions 활용. 2. SDLC(Software Development Lifecycle): 소프트웨어 개발 생명 주기를 분석, 설계, 구현, 테스트, 배포 단계로 구성하여 자동화. 3. 구현: 정적 분석 검사, 유닛 테스트, 빌드 테스트를 자동화하여 개발 생산성과 코드 품질을 향상. 4. 테스트: 데일리 앱 및 기능 테스트를 자동 배포하여 QA 테스트 용이성 증대. 5. 배포: 마일스톤 생성과 릴리즈 브랜치 자동 생성을 통해 배포 과정의 투명성과 신속성을 높임. 6. 자동화 프로세스: PR 리뷰에서의 코멘트, Firebase App Distribution을 활용한 QA 자동화 등으로 효율적인 배포 환경 구축. 7. 배포 시 Lint 검사: Lint 검사를 통해 글로벌 서비스에서의 미번역 문구 노출 이슈 발생 제거 8. 릴리즈 노트: 변경 사항 추적과 규격화된 포맷을 통한 팀 간 협업 향상. ## 당신의 앱 빌드는 안녕하십니까? - 차용호님 1. 개발자의 단위 작업에 걸리는 시간 : (수정시간 + 빌드시간) * 반복횟수 2. 수정시간은 개발자 개인의 생산성에 의존 3. Build Requirement Checker, Repository Content Filtering, 외부 의존성 Mirroring 을 사용해서 빌드 안전성 개선 4. Build Requirement Checker : 빌드에 필수적인 항목이 제대로 구성되어 있는지 검사 5. Incremental Build(증분 빌드) : 변경된 부부관 그 영향을 받는 부분만 다시 빌드하고, 나머지 부분은 재활용 6. BuildConfig : BuildConfig의 사용으로 인해 빌드 성능에 큰 영향을 끼칠 수 있음. valueOf() 로 감싸면 inline 최적화가 방지됨 (Debug에서는 느릴 수 있음) 7. Gradle Build Cache : 이전 빌드의 결과물을 재사용 8. Remote Gradle Build Cache를 사용해서 로컬이 아닌 Remote에서 사용 가능 9. Gradle 빌드캐시는 다양한 이유로 오염되기 쉬움 → 해결 방안으로 Android Gradle Cache Fix plugin을 사용 또는 incremental = false 하여 해결 → 문제가 있을 경우 끌 수는 있지만 빌드 성능 저하가 발생할 수 있음 10. JVM Option 에서 Parallel GC 설정 및 Heap Size 증가를 통해서 빌드 속도를 증가시킬 수 있음 ## Compose Material3 커스텀 디자인 시스템 구축기 - 권대원님 1. 디자인 시스템의 목적: 개발과 디자인을 효율적으로 연결하여 빠르고 일관된 프로덕트 개발을 지원하는 라이브러리 시스템 2. 시간 절약: 레거시 코드 파악 시간을 줄이며 작업자들이 직접적인 개발에 집중 3. 사용자 경험 향상: 일관된 UI 개발을 통해 좋은 사용자 경험을 제공 4. Jetpack Compose 선택: 100% Jetpack Compose 기반으로 UI와 비즈니스 로직을 분리하고 컴포넌트 단위로 개발 5. KPDS(Kurly product design system) 구조: foundation/layout에 의존하며, 기본적인 구성 요소로는 Color, Typography, Icon 등이 있음. 6. 디자인 토큰 사용: 색상, 글꼴, 치수와 같은 디자인 속성을 하드코딩 대신 토큰을 사용하여 통일성과 수정 용이성을 제공 7. Color Token: 다크테마나 레이아웃에 따라 다른 값을 가리키며, 의미론적인 이름으로 사용 목적을 정의 8. 컴포넌트 개발: Figma를 기반으로 사용하기 쉬운 컴포넌트를 개발하고 이를 효율적으로 관리 9. 트러블 슈팅: 하위 스코프에서 상태를 읽고 Compose 람다식을 최적화하여 재사용 10. KPDS 방향성: 디자인과 개발 코드의 통합, 아토믹 디자인 원칙을 따르며 변화에 유연하게 대응할 수 있는 구조를 목표 이번 컨퍼런스를 통해 최적화할 수 있는 부분을 고민해보고, 그 내용을 기반으로 실제로 적용해보려고 합니다. 😃
콘텐츠를 더 읽고 싶다면?
원티드에 가입해 주세요.
로그인 후 모든 글을 볼 수 있습니다.
댓글 3