일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- mvvm
- node.js
- 인앱결제
- list
- rx
- node
- GCP
- Kotlin
- php
- mysql
- PagingLib
- SWIFTUI
- MediaPlayer
- 동영상
- Android
- SwiftUI Tutorial
- junit
- Android 13
- Animation
- Observable
- databinding
- Reactive
- google play
- RxKotlin
- android13
- MediaSession
- Koin
- paging
- 테스트 자동화
- MotionLayout
- Today
- Total
목록분류 전체보기 (146)
봄날은 갔다. 이제 그 정신으로 공부하자
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ylwFC/btqOeDbarud/F9eZ4kNWGoGcouOJz9k3Nk/img.png)
이 글은 제가 재직하는 회사에 테스트 자동화를 도입하는 과정을 작성한 글입니다. 현재 재직하는 회사의 앱은 회원제 서비스 앱으로 가입하는 방법에 따라 다양한 모드가 존재해 앱을 배포할때마다 모든 모드에 대한 테스트를 수행하는데 많은 시간이 걸렸고 또 제대로 테스트 했는지 확인하는 것도 어려웠습니다. 앱을 배포할 때마다 이런 비효율적인 시간을 없애기 위해 테스트 자동화를 도입하기로 결정하고 테스트 자동화에 대해 검토를 시작하였습니다. 이 글에서는 왜 테스트 자동화가 필요하고 테스트 자동화를 하기 위한 도구에는 어떤 것들이 있는지에 대해 설명합니다. 왜? 테스트 자동화가 필요한가! 개발자들이 특히 제가 제일 귀찮아 경시하게 되는 과정이 기능을 만들고 테스트하는 과정 입니다. 대부분 기능을 만들고 머리 속에서..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dsZvOB/btqOcR1u8BN/nHuDZCJYzKDfnxqUfPik11/img.png)
이 글에서는 “Paging Library - Overview(als2019.tistory.com/8)”를 기반으로 특히 정보가 변경될 때 앱의 UI에서 사용자에게 정보 목록을 표시하는 방법을 설명합니다. 프로젝트에 Paging Library 추가 프로젝트의 build.gradle 파일에 아래 종속성을 추가합니다. dependencies { def paging_version = "2.1.0" // For Kotlin use paging-runtime-ktx implementation "androidx.paging:paging-runtime:$paging_version" // alternatively - without Android dependencies for testing // For Kotlin use..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/sZpJj/btqN8foKFel/LdcwGiY6LKeEqaDNXHabb1/img.png)
이 글에서는 “Paging Library - Overview(als2019.tistory.com/8)”를 기반으로 앱의 아키텍처 요구에 맞게 앱의 데이터 로드 솔루션을 맞춤설정하는 방법을 설명합니다. observable list 생성 일반적으로 UI 코드는 앱의 ViewModel에 있는 LiveData 개체(또는 RxJava2를 사용하고 있다면 Flowable 또는 Observable 개체)를 관찰합니다. 식별 가능한 개체는 앱 목록 데이터의 콘텐츠와 표시 간에 연결을 형성합니다. 이러한 식별 가능한 PagedList 개체 중 하나를 생성하려면 DataSource.Factory 인스턴스를 LivePagedListBuilder 또는 RxPagedListBuilder 개체에 전달해야 합니다. DataSour..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bpq3Dr/btqN8fhVVei/ON6xwx3kO5rMwRqjsUhUkK/img.png)
Paging Library를 사용하면 전체가 아닌 사용자가 지정한 묶음 단위로 한 번에 로드하여 표시할 수 있으며, 요청에 따라 일부 데이터를 로드하면 네트워크 대역폭 및 시스템 리소스 사용량을 줄일 수 있습니다. 이 글에서는 라이브러리의 몇 가지 개념적인 예를 제공하며 라이브러리의 작동 방식을 개략적으로 설명합니다. Library Architecture PagedList Paging Library의 핵심 구성요소는 앱의 데이터 묶음 또는 페이지를 로드하는 PagedList 클래스입니다. 데이터가 더 많이 요구되면 데이터는 기존 PagedList 객체로 페이징되며 로드된 데이터가 변경되면 LvewData 또는 RxJava2 기반 객체에서 식별 가능한 데이터 홀더로 새로운 PagedList 인스턴스를 내보..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/wfs9G/btqN00r4mWI/Oxia2UpgFAEbzVlBHym4ok/img.png)
해당 글에서는 Android 백그라운드 서비스중 하나인 WorkManager에 대해 설명하고 간단한 사용법에 대해 가이드 합니다. WorkManager란? 앱이 종료되거나 기기가 다시 시작되더라도 실행이 예상되는 연기 가능한 비동기 작업을 쉽게 예약할 수 있는 라이브러리로, Service와의 차이점은 앱의 process 안의 새로운 thread에서 task를 실행시킬 수 있다는 점 입니다. WorkManager의 작업은 반드시 실행되지만 그 처리가 상황에 따라 지연 되거나 도중에 중단될 경우 다시 실행 될수 있다는 것을 꼭 기억해야 합니다. "백그라운드 처리 가이드" 문서에서 언급하였듯이, 백그라운드로 동작하는 모든 경우에 WorkManager가 적합한 것은 아닙니다. WorkManager로 작업 예약 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/7UINB/btqNYxjDI0z/XK5Vtl1hIuurLnCkWp0k91/img.png)
모든 Android 앱에는 측정 뷰와 그리기 뷰를 포함한 UI 처리, 사용자 상호작용 조정 및 수명 주기 이벤트 수신을 담당하는 기본 스레드가 있습니다. 이 Thread에서 작업이 너무 발생하면 앱이 멈추거나 느려진 것 같아 원치 않은 사용자 경험을 초래할 수 있으므로 비트맵 디코딩, 디스크 액세스 또는 네트워크 요청 수행과 같은 장기 실행 계산과 연산은 별도의 백그라운드 Thread에서 수행해야 합니다. 즉, 일반적으로 몇 밀리초 이상 걸리는 작업은 백그라운드 Thread에 위임해야 합니다. android 백그라운드 처리 작업은 Thread, AlarmManager, Service, Broadcast Receiver 등을 사용해 처리하였지만 너무 많은 앱 들이 서로 다른 방식으로 백그라운드 처리 작업을..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/n3wXe/btqNZMHEM7O/EpFRKVaLmVo6nq9HXJqy11/img.png)
해당 글은 android DI 라이브러리 2번째 글로 여기에서는 google에서 최근 새롭게 선보인(2020-06) Dagger Hilt에 대해 설명합니다. Dagger Hilt와 Koin을 비교하는 것은 별도의 글에서 설명할 예정(안한다는 얘기를 돌려서하는 중...)이며, 여기에서는 Dagger Hilt에 대해서만 설명합니다. Dagger Hilt란? 의존성 주입(Dependency Injection)은 최근 Android 개발 환경에 있어서 가장 주목받고 있는 디자인 패턴 중 하나입니다. 많은 개발자들이 의존성 주입을 위해 Koin과 함께 Google에서 밀어주고 있는 오픈소스 라이브러리 Dagger 사용하고 있습니다. 하지만 Dagger는 annotation processing, 각 annotati..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bd32wR/btqN8fIf1n9/3kzwIOXGEXx0xYCx9tOwd1/img.png)
android 앱 개발에 다양한 패턴(MVP, MVVM)이 적용되면서 DI에 필요가 증가하였고 현재 많은 android 앱들이 개발에 Koin이나 Dagger와 같은 의존성 주입 라이브러리를 사용하고 있습니다. 해당 글에서는 android 의존성 주입 라이브러리(Data Injection lib) 중 하나인 Koin에 대해 설명합니다. Dagger는 별도의 글에서 설명합니다. Koin이란? Koin은 Java로 구현된 Dagger과 달리 Kotlin언어로 개발된 DI 라이브러리이며, 순수 Kotlin으로만 작성되어있어 Proxy, Annotation 프로세싱을 통한 코드 생성, 리플렉션을 사용하지 않기 때문에 가볍습니다. Koin은 Kotlin에서 제공하는 DSL(Domain-Specific Langua..