플러터 CI/CD with Shorebird
소개
Flutter에서 State를 생성할 때, 방법으로 Bloc에서 추천하는 Equatable을 사용해왔다. 하지만 개발 편의성과 copy, toString override, json 변환 등 여러 기본 기능을 활용하여 개발 속도를 단축하고자 Freezed를 도입하게 되었다. 이번 내용은 Flutter freezed의 기본 활용법을 정리한 내용이다.
Shorebird란?
멀티 플렛폼 환경에서 애플리케이션을 개발할 때 고려해야할 큰 문제중 하나는 어떻게 빌드해서 각각의 플렛폼에 배포하는지 설정하는 방법을 찾는것이다. 플렛폼은 우리가 플렛폼에 맞춰서 개발하기를 원하고, 우리는 사용자에 맞춰서 개발하기를 원한다. 우리가 멀티플렛폼 애플리케이션을 만드는 이유도 사용자들에게 보다 쉽게 다가가기 위함일 것이다.
쇼어버드는 이러한 요구를 만족하기 위해 플러터 멀티플렛폼 개발 환경에서 애플리케이션의 빌드 및 배포를 도와준다. 플러터의 핵심 기능으로는 Code Push가 있다. 코드 푸시란 무엇일까?
- 플러터 코드를 사용자 디바이스에 즉각적으로 업데이트
- 대규모 애플리케이션에서는 이미 모두 Code push를 활용하고 있음
- 설치 용량이 크다 = 스토어에 업데이트하기위한 시간이 오래걸린다
- 비즈니스상의 문제 해결을 도와줌
- 앱에 문제가 발생 = 손실
- Code push 가능한 빠르게 문제를 수정하도록 도와줌
- 플러터의 문제점을 메꿔줌
- 모바일 개발 팀도 웹 개발팀과 같은 생산성을 가질 수 있도록 해줌
안정적인 운영
- 각각의 패치는 사용자 디바이스에서 검증됨
- 패치 실패 시(빌드 실패 or 테스트 등) 자동 롤백
- 바이너리 파일 배포 클라우드 환경 제공, 파일 컴파일의 경우 로컬 환경에서 빌드되므로 쇼어버드에서는 해당 소스파일을 볼 수 없음
- Flutter 최신 버전 지원 (릴리스 배포 후 수시간 이내 적용)
이슈 정리
사전지식
Shorebird에서 릴리즈 생성 시 자체 제공 플러터로 빌드 진행 Shorebird에서 빌드 시 사용하는 플러터 버전을 변경하고 싶으면 명령줄 인자로 변경
Patch 적용 시 기존에
버전 문제
- 최소 버전
- Shorebird 에서 지원하는 Flutter 최소 버전이 3.22.1 로 설정되어 있어 Flutter 버전을 3.19.5 -> 3.22.3으로 변경
- 버그
- iOS에서 Flutter 3.22.1 이하의 버전 사용 시 try/catch에서 에러가 발생하지 않는 문제
- 3.24.1 이하의 버전에서 Flutter Engine 사용 시 패치된 내용이 제거되는 문제
- Android migration 작업 필요
- 3.19.x -> 3.2x.x 버전 업데이트 시
com.android.application
,org.jetbrains.kotlin.android
,gradle
버전 충돌 발생 - 이후 추가적인 작업을 최소화 하기 위해 가장 최신버전으로 적용
- 현재 stable 버전인 3.27.1 적용