앱 개발에서 가장 번거롭고 귀찮은 시간을 꼽자면 앱이 심사되고 배포될때까지의 시간일 것이다. 구글의 경우 체감상 2시간 내외면 심사가 마무리되지만 애플은 통상 하루의 시간이 걸리고 반려되는 경우엔 며칠을 소모하는일도 빈번하다.
평상시에는 그냥 늦어지나보다 싶지만 크리티컬한 버그가 발생한다면 이야기가 달라진다. 앱 출시 초기에 발생한 끔찍한 버그가 있었는데, 앱의 강제 업데이트를 위해 띄워뒀던 모달이 터치가 되지 않던 버그였다.
버그 자체는 react-native-gesture-handler
와 react-native
의 TouchableOpacity
가 혼용되면서 발생한 문제로 간단히 해결할 수 있었지만 수정된 다음버전이 배포되고 업데이트 되기 전까지 모든 유저는 앱을 사용할 수 없을것이고 버전이 올라간다한들 직접 앱스토어/플레이스토어에서 검색하여 업데이트 해야했을 것이다.
다행히도 앱엔 코드푸시가 적용되어 있었고 코드푸시를 통한 업데이트를 통해 빠르게 문제를 픽스할 수 있었다.
물론 이 코드푸시가 더 큰 문제를 나중에 야기하지만 그건 나중 이야기…
코드푸시(Code push)란 마이크로소프트가 React Native로 개발된 앱에 제공하는 OTA 업데이트 서비스이다. 쉽게 말하면 앱을 심사없이 업데이트 할 수 있는 SDK이다.
기존의 번들파일(앱에 설치된)과 코드푸시에 올라간 번들파일을 비교하여 업데이트가 있는 경우 새로운 번들파일을 다운로드하여 앱에 적용시킬 수 있다.
코드푸시의 도입은 어떤 장점이 있을까? 일단 심사없이 번들을 업데이트 시킬 수 있다는 점은 급작스러운 버그나 오타등에 대응하기에 이상적이다.
다만 코드푸시를 맹신해서는 안되고 코드푸시는 항상 최소화할수록 좋다.
일단 코드푸시는 JS레벨의 번들만 체킹한다. 네이티브단레벨의 변경은 체크되지 않으므로 푸시나, 위젯 등 네이티브단에서 변경할 수준이나 node_module과 같은 패키지 수준의 업데이트는 반영할 수 없다.
생각보다 코드푸시는 느리다. 번들의 변경사항을 체크해서 처리가 되는건지 첫 코드푸시의 다운로드는 특히 느리고 이후는 좀 빠른 편이지만 여전히 느리기에 특정 상황에서 다운로드가 완료되지 않거나 유저의 동작을 방해할 수 있다. 특히 우리앱의 경우 필수 업데이트(치명적 버그)의 경우 강제로 업데이트 화면을 띄워서 앱 업데이트를 진행하는데, 만약 속도가 느리다면 해당 화면을 탈출하지 못하는 상황이 발생했다.