이미지 캐시 라이브러리 고려

현재 진행하고 있는 서비스는 react-native로 만든 영어 교육어플로, 유저가 선택한 영상을 자막과 분절기능을 youtube 플레이어와 함께 서비스한다.

최근에 이슈를 하나 발견했는데, 영상관련 컨텐츠이다 보니 동일한 영상 썸네일 이미지를 여러 페이지에서 사용하고 있는데, 어플을 재시작 할때마다 이미지를 uri로 불러오면 매우 비효율적일 것이고 한번에 로드해야하는 이미지가 많아지면 페이지 로딩도 조금 느려지는 현상을 발견했다.

사실 인스타그램이나 핀터레스트처럼 엄청난 양의 이미지를 관리해야하는 앱이 아닌지라 캐싱에 대해 공부하고 iOS, android 환경에 모두 적용하는 로직을 짜는데 시간이 오래 쏟긴 힘들것이므로 무시하고 넘어갈 수도 있을 것이다.
그래서 간단하게 캐싱할 수 있는 방법이 있나 검색해보니 공식 문서에서 iOS 한정으로 캐싱을 제공하고 있었다. 이 방법은 캐시유실율이 높고, 성능이 좋지않아 잘 사용하지 않는다고 한다. 또한, 양쪽 환경에 모두 배포가 가능해야하기 때문에 몇가지 라이브러리들을 찾아보았다.

  1. react-native-cached-image
  2. react-native-img-cache
  3. react-native-img-cache
  4. react-native-fast-image

1~3 번까지는 rn-fetch-blob이란 라이브러리를 필요로 하며, 프로젝트들이 전부 죽은것 같다. ㅜㅜ

결국 커뮤니티가 활발한 react-native-fast-image를 사용하려고 하고, 나머지 3개의 라이브러리와 다르게 기존에 react-native에서 제공하는 Image의 style, resizeMode, border-radius를 지원하며, authorization header를 지원한다는 점이 우리 프로젝트와 알맞다고 판단하여 더욱 더 사용해야 겠다는 생각을 했다.
추가로, iOS는 SDWebImage, android는 glide를 wapping하여 구성되어 있다.

RN 0.59 버전에서 빌드 에러 및 아이폰 6처럼 오래된 기종에서 300개 이상을 렌더링하는 경우에 메모리 누수로 앱에 문제가 생기는 이슈들이 있는데, 우리 프로젝트는 많은 이미지를 사용하지 않기 때문에 간단한 설정으로 사용하기 좋을 것 같다.

cocoapod

cocoapods.jpg

cocoapod이란, xcode 라이브러리 관리 매니저이다.

router 라이브러리를 react-native-flux에서 react-native-navigation v2로 리팩토링 하기 전까지는 react-native-link를 주로 이용했었다.
한줄로 양쪽 환경에 라이브러리 link를 해주니 중복을 허용 및 unlink에러가 가끔씩 일어나서 불편함을 감수하고 사용했었는데, react-native-navigation로 바꾼 후에는 link가 잘 먹히지 않아 일일이 수동으로 넣어줬었다...
일일이 넣어주는일이 끔찍하다고 생각하고 다른 방법이 없나 찾아보다가 gradle처럼 iOS에선 cocoapod으로 한줄로 편하게 관리할 수 있다는걸 찾아냈다!!

그러나, 리팩토링작업이 한창 진행중에 있었고 AWS문제도 터져서 매우 바쁠 시기에 괜히 잘못 적용했다가 분노유발할까봐 그 당시에는 이후에 써보기로 하고 덮어두었다.

그렇게 진행하다가 기회가 되어 시간남으면 적용하려고 했던 firebase analysis를 사용하기 위해 공식문서를 보니 cocoapod를 사용하도록 권장하고, 수동으로 넣기에도 힘들기 때문에 이 기회에 cocoapod을 사용해 보기로 했다.

또한, 마침 react-native-fast-image도 cocoapod을 사용하도록 해서 적용해봤는데 매우매우 편하다!!

내가 생각하는 장점으로

  1. podfile이라는 파일 하나로 라이브러리를 관리가능하다.
  2. 각 라이브러리의 .lib 파일을 import 해올 필요없이 알아서 다 해준다.
  3. 설치 및 삭제가 간편하다 (pod install 한줄로 전부 해결!!)
  4. cocoapod을 이용하면 프로젝트 실행시 xcodeproj에서 xcworkspace 파일을 사용해야하는데, 기존에 link해줬던 xcode파일과 연동이 된다. (이 점이 가장 마음에 들었다)
  5. 마지막으로 협업시 podfile 하나로 서로의 라이브러리를 쉽게 관리할 수 있을 것 같다.

현재까진 큰 문제없이 잘 쓰고있는데 앞으로 다가올 cocoapod 에러가 기대된다ㅎㅎ

코드리뷰

적절한 코드리뷰는 여러가지 방법을 통해 코드의 질을 높일 수 있다고 한다.

이전까지 프로젝트하면서 시간의 압박때문에 회의때 마다 코드리뷰하자는 말만 하고 딱 한번만 해봤었다. (이 역시 대충대충하고 넘어갔었다)
그래도 협업을 하다 보면 간접적으로라도 서로 모르는 것을 의논하거나 아이디어를 얻어 코드에 반영하여 질을 높일 수 있었는데, 지금은 혼자 개발하다보니 답답한 부분이 많다.

이전에 같이 공부했던 분에게 코드리뷰 문화가 정말 중요하다는 말을 듣고 어떻게 코드리뷰를 해볼 수 있는 기회가 있을까?? 하고 찾아보다가 친구가 개발 공부를 시작해서 자주 물어봤던게 생각났다.

지난주부터 아주 간단한 프로젝트를 시작해서 깃헙을 통해 코드리뷰를 시작해보려고 한다.
당장 나의 코드의 품질을 개선할 순 없겠지만, 서로의 생각을 공유하고 이전에 그냥 넘어갔던 것들을 곱씹어보며 좋은 습관을 들일 수 있는 좋은 기회가 됬으면 좋겠다.

내일

내일은 슬랙에서 스터디를 하는 동료를 위한 슬랙 봇 수정 및 예약 메세지 프로그램 업데이트를 할 것이다.
또 기다리고 기다렸던 Iot 공부를 시작해볼 것이다!!