본문 바로가기

Week I Did

24년 5월 3주차 회고

📚 배운 것

1. Ktor Client를 좀 더 효율적으로 사용하는 방법을 알게 되었다.

  • Ktor로 HTTP 통신을 구현 할 때 매번 Client를 새롭게 생성하고 통신이 완료된 후 닫아 주는 과정을 반복했다.

  • 공식문서에 쓰여진 데로, 매번 Client를 생성할 때, CPU 리소스를 지나치게 사용하는 것을 Profiler로 확인하였다.
  • 그래서 Ktor 클라이언트를 앱이 시작될 때 Static으로 생성하여 재사용 되도록 수정했고, 클라이언트 생성에 시간이 소요되지 않아 라운드 트립 시간이 단축되고, 리소스 사용량이 현저히 낮아진 것을 확인했다.

2. 파일 수준 변수를 Static으로 생성해도 앱 생명주기 동안 유지됨을 알았다.

  • MutableStateFlow 처럼 Stream도 Static 변수로 선언해도 문제 없어 사용 가능함을 알게되었다.

3. Flow의 Debounce 사용방법을 알게 되었고, Debounce가 텍스트 입력에 따른 API 호출의 빈도를 제어함으로서 리소스 낭비를 줄이고 서버 과부하를 줄일 수 있음을 알게 되었다.

 

4. RecyclerView의 ListAdapter에서 사용되는 DiffUtil이 중복값을 거르는 역할은 수행하지 않는 다는 것을 알게 되었다.

  • 기존 값의 내용 변경 여부만 파악할 수 있다.

🧎 회고 

현재 앱의 기능을 원활하게 수행하기 위해 한번에 5개 이상의 api를 호출하는데, 지난 업데이트 때, 본인의 주도 하에 순차적으로 진행되던 api 통신을 동시에(Concurrency) 진행되도록 개선했다.

이렇게 개선했던 것은 좋은데, 하나의 통신이라도 오류가 발생하면 State가 Fail로 방출되어 모든 api를 다시 호출해야했다.

이 부분에서 상당히 비효율적이라는 생각을 가지게 되었고, 실패한 항목을 따로 저장한 후, 재귀적 호출을 통해 재시도를 하는 로직을 추가해서 이번 업데이트에 적용하였다.

또한, API 통신이 성공한 데이터를 StateFlow로 방출하여 전체 데이터 성공여부와 관계없이 UI를 우선적으로 업데이트함으로써, 사용자가 위화감 없이 기능을 사용할 수 있도록 하였다.

 

결과적으로는 늘 받던 "로딩이 길다"는 평 대신, "속도가 엄청 빨라졌다"는 피드백을 받을 수 있었다.

굿

 

개인적으로 진행 중인 사이드 프로젝트의 영상편집 기능을 구현하는 것이 생각보다 어렵다.

학부때 영상처리 수업 수강할 걸..

그래도 Bitmap을 Video의 프레임에 넣기 위해서는 YUV420으로 변환이 필요함을 알게되었다.

sdk 버전에 따른 오류 가능성 때문에, 라이브러리에 의존하는 것은 좋아하지 않는데 이번에는 FFmpeg Android를 사용해야겠다..

언젠가 이것도 원천기술을 직접 만들 수 있길 바란다..


⚒️ 자기 선언

최근 모르는 부분이나 궁금하게 생기면 gpt부터 찾는 듯 하다. 진짜 잘못된 습관이라 생각하고 반성한다.

공식문서와 같은 공신력 있는 자료를 1차적으로 참조하는 습관을 다시 길러야 겠다.


아직까지 내 코드를 리뷰받는 것은 어색함이 없으나, 내가 시니어의 코드를 리뷰하는건 심적으로 부담감이 있다.

진짜 이 표정으로 리뷰하는 듯..

알고리즘과 OOP를 좀 더 공부해서 나도 빨리 도움이 되는 피드백을 할 수 있는 개발자가 되어야겠다.

 

이번 구글 IO에서 Compose Navigation이 오피셜로 나왔던데, 확실히 편해 보인다.

alpha버전이라 당장 앱에 사용하기에는 불안하니, 주말 동안 샘플 프로젝트 하나 만들면서 찍먹해 봐야겠다.

 


Ref.

https://ktor.io/docs/client-create-and-configure.html#close-client

https://medium.com/androiddevelopers/navigation-compose-meet-type-safety-e081fb3cf2f8

 

 

'Week I Did' 카테고리의 다른 글

5월 4주차 회고  (0) 2024.05.26