React Native와 Flutter를 선택할 때 고려해야할 것 중의 하나가 Code Push의 유무다. Code Push란 각 플랫폼의 앱스토어 리뷰 과정 없이 앱의 업데이트를 반영할 수 있는 서비스이다. 웹과 다르게 스토어의 심사를 받아야만 업데이트가 가능한 앱에게는 한줄기 빛과도 같은 존재이다.
스타트업이든 대기업이든 앱 서비스의 빠른 업데이트는 필수적이다. 결제 페이지에서 오류가 나는데 하루가 넘게 걸리는 심사과정만 기다리고 있다면 속이 타들어 갈 것이다. 그와중에 주말이 겹치거나 리젝이라도 당한다면 ? 기업 입장에서는 상상하기도 싫을것이다.
이 때문에 많은 앱 서비스에서 핫픽스가 필요한 부분은 웹뷰로 개발한다. 필자도 앱 회사에서 개발할 때 결제와 예약페이지 등에서 빠른 수정이 가능한 부분은 웹뷰로 개발을 했었다. 이번엔 Flutter의 코드 푸시에 대해 알아보겠다.
Shorebird
Flutter에도 Code Push를 제공하는 ShoreBird라는 서비스가 있다. 물론 RN의 Code Push처럼 메이저 하지는 않다. 기존에는 안드로이드만 제공하고 iOS는 알파버전이었는데 최근에 공식 지원을 하면서 1.0버전을 릴리즈 했다. Flutter를 만든 개발자가 구글을 떠나 만든 프로젝트인데 특징들은 다음과 같다.
Shorebird의 특징
- Flutter를 위한 OTA (Over The Air) 업데이트 제공
- 5분안에 앱에 적용 가능하며 실제 코드의 변경이 필요하지 않음. 플러터 앱의 Dart 코드를 즉각 업데이트 해줌.
- 앱의 패치 횟수에 따라 과금 (아래 사진 참고)
- iOS의 경우 Shorebird와 Flutter stable 최신 버전 필요
- 앱스토어와 플레이스토어 규정을 준수
Shorebird 사용방법
Shorebird 특징에 대해 살펴봤으니 이번에는 간단하게 사용법에 대해 알아보겠다. 첫번째로 Shorebird cli 설치를 한다.
curl --proto '=https' --tlsv1.2 https://raw.githubusercontent.com/shorebirdtech/install/main/install.sh -sSf | bash
설치가 완료되면 우리가 사용할 Flutter 패키지를 설치해준다.
flutter create shorebird_app
Flutter 패키지 설치가 완료되면 Shorebird에 로그인 하고 초기화를 해준다. 구글 로그인을 선택하면 터미널창에 다음과 같이 링크가 생성된다.
shorebird login
shorebird init
shorebird 초기화가 완료되면 shorebird.yaml 파일이 생성되고 console 페이지에 현재 Flutter 앱 패키지가 만들어진다. 아직 앱에 대한 release와 patch 버전이 없기 때문에 둘다 none으로 뜨는것을 확인할 수 있다.
Shorebird Code Push
Shorebird의 패키지가 생성되었으니 Code Push를 테스트 해보자. 일단 최초의 버전의 Text를 '패치전'으로 설정해 두고 release를 해준다.
shorebird release android
release가 완료되면 console에 다음과 같이 1.0.0+1의 버전이 생성이 된다. 정상적으로 Shorebird에 최초 버전이 생성됨을 알 수 있다.
preivew 모드를 통해 현재 버전의 앱을 에뮬레이터를 통해 확인해 보자. '패치전'의 Text 위젯을 확인할 수 있다.
shorebird preview
이번에는 main.dart의 Text를 '패치후'로 수정하고 Code Push를 해보자.
shorebird patch android
패치가 완료되면 다음과 같이 none이었던 패치 자리에 1.0.0+1 버전의 1번 패치가 생성됨을 확인할 수 있다. 아까와 마찬가지로 preview 모드를 통해 정상적으로 Code Push가 되었는지 확인해보자.
코드 푸시가 정상적으로 이뤄졌다 ! 바로 적용되진 않았지만 필자 기준 5분 이내로 Code Push가 정상적으로 작동했다.
마치며
아직 어느 서비스에서도 Shorebird를 도입했다는 사례를 본적은 없다. 서비스의 안정성도 문제지만 비용 또한 무시할 수 없기 때문이다. 사이드 프로젝트 혹은 소규모의 앱에서는 감당 가능해도 MAU가 100만을 넘어가거나 하면 다른 차원의 문제이기 때문이다.
물론 이제 1.0버전이 나온 따끈따끈한 프로젝트이다. 즉시 프로젝트에 적용하긴 시기상조라고 생각한다. 하지만 Shoebird가 지속적으로 개선되고, 조금이라도 RN의 코드 푸시를 넘볼정도까지 올라온다면 ? 크로스플랫폼에 엄청난 지각변동이 일어날 거라 생각한다.
한편으로는 이런 서비스를 지속적으로 만들어줘서 감사하다. 관심있으신 분들은 튜토리얼로 한번 써보시길 추천한다.
https://shorebird.dev/blogs/1.0/
https://teveloper.tistory.com/70
https://teveloper.tistory.com/71
'Flutter' 카테고리의 다른 글
[Flutter] addPostFrameCallback, widget이 빌드된 후에 작업이 필요할때 (0) | 2024.08.08 |
---|---|
[Flutter] share_plus로 앱에서 링크 공유하기 (0) | 2024.07.18 |
[Flutter] dart fix로 불필요한 import문 한번에 삭제하기 (1) | 2024.04.12 |
[Flutter] App Bundle 아티팩트 유형은 네이티브 코드를 포함하며 아직 디버그 기호가 업로드되지 않았습니다. (1) | 2024.04.07 |
[Flutter] macOS Network Error, mac OS 디버깅시 네트워크 이슈 (0) | 2024.01.13 |