본문 바로가기

Android/Tech

(54)
BaselineProfile 을 활용하여 앱의 Start-Up-Time 단축하기 동기재직 중인 회사에는 모 공공기관 프로젝트 수행을 위해 구매했던 전동 출입문이 하나 있습니다. 최근 회사가 이전하면서 '전동 출입문에 태블릿이 달려있으니, 활용해서 근태 관리를 해보자'는 의견이 있어 관련하여 개발에 착수했는데요. 전체 개발이 완료되었고 스토어 배포까지 모두 마쳤습니다. 실제로 모두들 잘 사용하고 있고요. 앱 Start-Up-Time 에 문제가 있거나 하진 않습니다만, 전동 출입문이 하나 밖에 없다 보니, 한 번에 여러 명이 몰려있으면 약간의 병목이 생겼습니다. '큰 문제는 아니지만 그래도 조금이라도 더 빠르면 좋지 않을까?' 라는 생각이 들어, 과거에 우연히 알게 되었던(그러나 시도하지는 않았던) Baseline Profile 을 이용한 앱 Start-Up-Time 개선에 도전해보고..
MVVM 과 MVI 의 범위에 대한 견해 MVVM 과 MVI 에 대한 원론적 이해를 다루는 포스트가 아닙니다. 개인적 고찰의 기록이며, 관점에 따라 받아들여질 수 없는 내용이 많을 수 있습니다.또한, 유보적 어조를 사용하지 않았습니다.동기후임자가 생겨 교육 중에 있습니다. 졸업 프로젝트로 안드로이드 앱을 만들어 제출했다고 해서 코드를 봤는데, 이렇다 할 아키텍처 없이 구현된 프로젝트였습니다. 그래도 기능은 잘 동작했고요. 기본적인 Lifecycle 이나 문법 등에 대한 지식은 있는 것 같아서 아키텍처에 대한 이야기를 해주려 합니다. 재직 중인 회사는 다양한 프로젝트를 진행하는데요. 직접 개발한 프로젝트는 Jetpack Compose 를 사용하고, 타사에서 개발한 프로젝트를 유지보수하는 경우, 또는 Jetpack Compose 로 마이그레이션을 ..
Android Platform Architecture 의 계층 간 통신에 대한 고찰 동기실무와 사이드 프로젝트에서 다양한 문제를 해결하고 있습니다. 저는 그 과정에서 동작 원리에 대한 이해와 문제 발생 사전 차단을 위해 내부 코드를 자주 들여다보는 편입니다. 이 작업은 안드로이드 개발에 대한 저변을 확장하는 데에 큰 도움이 되는데요. 최근에는 최적화와 관련된 문제들을 마주하고 있는데, 내부를 살펴볼수록 안드로이드 플랫폼 자체에 대한 해박한 지식이 전제되어야 해결할 수 있는 경우가 많았습니다. Five-Layered-Architecture 안드로이드 플랫폼은 총 5계층으로 이루어져있습니다. 로우 레벨부터 순서대로 Linux Kernel - Hardware Abstraction Layer - Native Libraries + ART - Java API Framework(Android Fra..
3D 모델링으로 앱에 입체감 불어넣기 (feat.SceneView) 안드로이드에서의 그래픽 렌더링 원리와는 거리가 먼, 3D 렌더링 작업에 대한 제 나름의 이해를 거침없이 써내려간 포스트입니다. SceneView 에 대한 설명 및 코드는 포스트 후반부에 있으니, 해당 키워드를 통해 접근하신 분께서는 과감하게 스크롤을 내려주셔도 좋습니다.동기재직 중인 회사에서 전자 지갑 서비스를 구축하게 되었습니다. 관련하여 다양한 기술적 시도들이 진행되고 있는데, 모바일 팀 회의에서는 3D 모델을 앱 내에 탑재하여 트렌디함을 갖추자는 의견이 주요 목표로 설정되어, 이번 기회에 늘 생각만 해왔던 3D 모델링에 도전할 수 있게 되었습니다. 접근어떤 방식을 통해 3D 모델을 구현해야 할지 결정해야 했습니다. 가장 먼저 떠오른 것은 OpenGL 이었습니다. OpenGL 은 2D 및 3D 그래픽..
[Jetpack Compose] Stability Configuration File 은 어떻게 동작하는가 동기Jetpack Compose 를 활용한 개발 도중, StableMarker 를 잘 작성해왔음에도 불구하고 화면 렌더링 시의 Janky Frame 이 발생하는 것을 확인했습니다. Jetpack Compose 외부 라이브러리가 그 원인이었는데, 내부 데이터 클래스에 StableMarker 가 작성되어 있지 않았기 때문입니다. 이를 해결하기 위해 Stability Configuration File 을 정의 및 적용 하였고, 이에 대한 문제를 해결할 수 있었습니다. 동작 과정에 의문이 생겼고, 이에 대해 학습했습니다. [Jetpack Compose] 불필요한 Recomposition 을 줄여 앱 퍼포먼스 개선하기동기 Jetpack Compose 를 활용하여 개발 중인 앱 에는 드래그 앤 드랍과 같은 유저..
[Jetpack Compose] UI 테스트 작성하기 동기최근, 성장이 더딘 느낌을 받고 있습니다. 지식을 습득하고 쌓는 일은 소홀히 하지 않고 있지만, '내가 개발한 애플리케이션이 과연 훌륭한 애플리케이션인가' 라는 의문을 지울 수 없습니다.좋은 애플리케이션은 견고한 구조, 그 이상의 추상적인 의의가 필요하다고 생각합니다. 저는 그것이 '좋은 유지보수성' 과 '테스트 용이성' 이라고 생각합니다. 이를 위해서는 테스트 코드가 필수적이라고 할 수 있습니다. 유닛 테스트를 작성하는 것에는 업무를 통해 꽤나 익숙해졌지만, 여전히 UI 테스트에 대한 두려움이 남아 있었고, 이제는 이에 도전하여 한 걸음 더 성장하는 것이 필요한 시점이라고 느꼈습니다. 오늘은 사내에서 개발한 라이브러리가 적용된 샘플 애플리케이션을 개발하며 UI 테스트에 도전해보고, 이에 관한 내용을..
UiEffect 를 위한 Channel<T> 사용법 동기저는 안드로이드 관련 지식을 Medium 에서 주로 얻곤 하는데요. MVI Architecture 적용 시 UiEffect 의 구현을 위해 SharedFlow 대신 Channel 을 사용하는 방식에 관한 컬럼을 보게 되었습니다. 사실, ViewModel 과 Screen-Level-Composable 은 1:1 대응 되는 경우가 많은데, 왜 굳이 SharedFlow 를 사용해야 하는지에 대한 의문이 항상 남아 있었습니다. 오늘은 해당 컬럼에서 얻은 지식에 관해 정리하고자 합니다. UiEffectMVI Architecture 를 안드로이드 프로젝트에 처음 적용하려고 하면 마주하는 문제가 있습니다. 바로 UiState 를 변경하지 않고, 애플리케이션에 특정한 액션을 취해주어야 하는 상황에 대한 처리인데요...
안드로이드의 MVI 와 Reducer 동기신규 프로젝트에 단독 투입되어 안드로이드 앱 개발을 수행하게 되었습니다. Jetpack Compose 와 MVI Architecture 로 앱을 구현했고, 이후 사수분께서 코드에 대한 설명을 요청하셨습니다. Screen-Level-Composable 에서 받은 UiEvent 를 ViewModel 로 전달하는 코드의 구현에 대한 설명을 드렸고, 참고 하시라고 Reducer 관련 컬럼을 몇 개 전달했는데, 저에게도 많은 도움이 되어 이에 대해 정리하고자 합니다.ReducerReducer 는 React 애플리케이션의 상태 관리 프로세스로 잘 알려져 있습니다. Reducer 는 현재 상태와 액션을 결합하여 새로운 애플리케이션의 상태를 반환하는 순수 함수를 일컫습니다. 즉, 함수형 프로그래밍이 가능한 언어에서..