앱을 출시하기 전에 가장 중요했던 부분이 앱이 버벅이지 않도록 만드는 거였다.
캘린더에 담을 열매 정보를 캘린더의 특정 주차를 선택할 때마다 API를 호출해서 불러와야 했는데 이미 이전에 불렀던 주차의 정보는 새로 불러올 필요가 없었기 때문에 캐싱을 고려햐게 됐다.
과거의 주를 클릭해서 한번이라도 데이터를 가져오게 되면 과거의 데이터의 경우 변동이 없기 때문에 RoomDB에 저장하고 후에 다시 해당 주차의 정보를 요청하게 되면 RoomDB의 데이터를 반환하고 API는 호출하지 않게 했다.
val localFruitEntityList =
calendarLocalDataSource.getFruitsForWeek(startDate.toLongDate(), endDate.toLongDate())
if (localFruitEntityList.isNotEmpty() && todayDate.isAfter(endDate.toLocalDate())) {
val fruitList = localFruitEntityList.mapNotNull {
if (it.name.isNotBlank()) it.toFruit() else null
}
return Result.Success(fruitList)
}
만약 이번 주차나 혹은 미래의 주차의 정보를 요청하는 경우 변경될 가능성이 있기 때문에 날짜 비교를 통해 API를 호출할 수 있게 했다.
같은 동작을 진행하는 과정에서 캐싱 적용 후에는 API호출을 하지 않아서 자원 소모가 일어나지 않는 모습을 볼 수 있다.
그래프 상으로는 큰 영향은 없어 보이지만 실제로는 주차를 클릭했을 때 렌더링 하는 시간이 많이 개선되었다.