본문 바로가기

Android 일지8

WEBP 파일 형식을 사용하여 이미지 파일 크기 문제를 해결하고 빌드 속도 향상, 앱 크기 줄이기 비대면 러닝 챌린지 서비스를 리팩토링하면서 WEBP로 파일 형식을 변경하여 이미지 파일 크기 문제를 해결하고 빌드 속도를 약 35% 개선, 앱 크기를 소폭 줄여냈습니다. 문제 발생 서버로 이미지를 업로드하는 API 요청에서 HTTP 413 Request Entity Too Large 에러가 발생하는 문제가 있었습니다. 이 에러는 서버에 허용하는 요청 엔티티 크기를 초과할 때 발생합니다. 이 에러로 이미지의 파일 크기에 대해 고려해보게 되었습니다. 고민점 1. 서버 허용량 늘리기 현재 서비스에서 사용되는 이미지들은 해상도가 크게 중요하지 않다고 생각해서 서버의 허용량은 조금만 늘리고 이미지 파일 크기를 최대한 줄여야겠다고 생각했습니다. (현재 클라우드 지원으로 무료로 네이버 클라우드 플랫폼을 사용하고 있지.. 2023. 12. 2.
직접 문제를 겪고 작성한 Flow asResult 확장 함수 직접 문제점을 겪고 보일러 플레이트를 줄이기 위해 asResult 확장 함수를 만들었던 과정을 공유합니다. (피드백을 받고 Now in Android에서 비슷한 구조의 asResult 함수가 존재한다는 것을 알게 되었습니다) sealed class ResultType { object Uninitialized : ResultType() object Loading : ResultType() object Empty : ResultType() object InputError : ResultType() data class Success(val data: T) : ResultType() data class Fail(val data: T) : ResultType() data class Error(val excepti.. 2023. 11. 6.
3. 경로 최적화로 좌표 데이터 약 73% 감소 경로를 최적화하여 좌표 데이터 175개를 46개로 약 73% 감소시킨 경험과 고민했던 부분에 대해서 설명드리려 합니다. 문제 인식 러닝 앱에서 4~5초마다 현재 위치를 좌표 리스트에 추가해주고, 이 좌표 리스트로 경로를 그려주었습니다. 하지만, 위치 정보는 오차가 존재합니다. (확인한 결과 latitude는 현재 위치에서 약 0.0005 정도, longitude는 약 0.0002 정도 오차가 있는 걸로 확인 됩니다.) 오차가 존재하기 때문에 유저가 일직선으로 뛰어도 경로에는 일직선으로 보이지 않고 삐뚤빼둘하게 그려집니다. 왼쪽) 위치 정보 오차에 따른 문제, 오른쪽) 그리고 싶은 경로 위 사진에서 오른쪽의 빨간 선과 같이 직선으로 진행하는 경로에서 직선에서 시작하는 점과, 끝나는 점을 하나로 이어주고, .. 2023. 10. 17.
6. SharedPreference에서 DataStore로 변경하여 데이터 일관성 문제 해결하기 (RunWithMe 리팩토링) 6. SharedPreference에서 DataStore로 변경 안녕하세요 RunWithMe 리팩토링 프로젝트에서 팀장과 안드로이드 개발을 맡은 서경원입니다. RunWithMe 프로젝트를 리팩토링하면서 공부한 내용에 대해서 설명해보려합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. 이번 프로젝트에서 기존에 사용하던 SharedPreference를 DataStore로 변경하고자 했습니다. SharedPreference가 가진 문제점 때문이었습니다. 여러분들은 SharedPreference의 문제점에 대해 알고 계신가요???? SharedPreference의 문제점에 대해서 ChatGpt에 물어보겠습니다. gpt 답변: 안드로이드에서 Share.. 2023. 5. 30.
5. CustomView로 재사용성 향상 (RunWithMe 리팩토링) 5. CustomView로 재사용성 향상 안녕하세요 RunWithMe 리팩토링 프로젝트에서 팀장과 안드로이드 개발을 맡은 서경원입니다. RunWithMe 프로젝트를 리팩토링하면서 공부한 내용에 대해서 설명해보려합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. 이전에 ‘우리집’이라는 프로젝트를 Compose로 진행했던 경험이 있습니다. 컴포즈를 사용하면서 제일 좋았던 점은 Component 재사용성이 뛰어나다는 점이었습니다. xml에서도 custom view를 활용해 view 재사용성을 향상시키고자 했습니다. 다른 뷰는 재사용하는 부분이 거의 없어 가장 많이 사용하는 Toolbar에 CustomView를 적용하였습니다. Toolbar는 총 4.. 2023. 5. 27.
4. EventFlow 도입 (RunWithMe 리팩토링) 4. EventFlow 도입 안녕하세요 RunWithMe 리팩토링 프로젝트에서 팀장과 안드로이드 개발을 맡은 서경원입니다. RunWithMe 프로젝트를 리팩토링하면서 공부한 내용에 대해서 설명해보려합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. 이 글은 Ted Park님의 블로그를 참고하여 작성했습니다. MVVM의 ViewModel에서 이벤트를 처리하는 방법 6가지 MVVM의 ViewModel에서 이벤트를 처리하는 방법 6가지 지금 개발하시는 코드에서 ViewModel의 이벤트 처리를 어떻게 하고 계신가요? 헤이딜러에서 LiveData -> SingleLiveData -> SharedFlow -> EventFlow로 이벤트 처리 방법을 변.. 2023. 5. 26.
2. bindService를 적용하여 메모리 누수 방지하기 (RunWithMe 리팩토링) 2. bindService 적용하여 메모리 누수 방지하기 안녕하세요 RunWithMe 리팩토링 프로젝트에서 팀장과 안드로이드 개발을 맡은 서경원입니다. RunWithMe 프로젝트를 리팩토링하면서 배우게 된 내용에 대해서 설명해보려합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. startService와 bindService Service를 제대로 적용하기 위해 Service에 대해 공부했고 그 중 startService와 bindService의 차이점을 명확히 알고자했습니다. 아래는 startService와 bindService에 대한 설명입니다. 안드로이드에서 startService()와 bindService()는 서비스를 시작하는 두 가.. 2023. 5. 25.
1. LifecycleService와 Service의 차이점 (RunWithMe 리팩토링) 1. LifecycleService와 Service의 차이점 안녕하세요 RunWithMe 리팩토링 프로젝트에서 팀장과 안드로이드 개발을 맡은 서경원입니다. RunWithMe 프로젝트를 리팩토링하면서 배우게 된 내용에 대해서 설명해보려합니다. 이해가 안되는 내용이나 제가 잘못 적은 부분이 있다면 꼭 댓글 남겨주세요. LifecycleService 이건 뭐지?? 이전 RunWithMe 프로젝트 코드를 들여다보던 중에 러닝에 관한 서비스를 LifecycleService를 상속받아 사용하는 것을 보게되었습니다. LifecycleService는 무엇이고 그냥 Service와의 차이점에 대해서 궁금증이 생기게 되었습니다. 바로 LifecycleService를 들여다보았습니다. Serv.. 2023. 5. 25.