-
플러터(Flutter)로 앱 개발 및 안드로이드와 아이폰에 론칭 하기까지앱개발이야기 2019. 12. 28. 00:02
타임스냅 카메라 앱이 드디어 오랫동안 미뤄왔던 애플 앱스토어에 론칭 되었다. 처음 삽(?)을 뜨기 시작한 후 부터 대략 4개월 정도 지난 후에야 겨우 이뤄낸 성과이다. 앱을 한번도 제작해 보지 않은 개발자가 크로스 플랫폼 앱을 론칭하는데는 그리 오랜 시간이 걸리지 않았다. 4개월 이라고는 하지만 짬 날때마다 한것이라서 실제로는 훨신 더 짧은 기간이 소요 되었다고 할 수 있다. 플러터로 개발한 앱의 품질이 궁금하신 분들은 타임스냅 카메라를 다운로드 받아서 확인해 보길 바란다. 타임스냅 카메라 임시 홈페이지 를 통해 앱을 확인해 볼 수 있다.
크로스 플랫폼 앱 개발에 플러터를 선택한 이유
그동안 블로그에 짧게나마 적었지만, 앱개발을 해본적이 없는 초짜가 익숙한 리액트 네이티브를 두고 플러터를 선택한 이유는 "구글이 내놓은 리액트 대항마에 대해 알아보고", "익숙한 기술이 아닌 새로운 기술(Dart, Flutter)를 익히는" 것이었다. 비록 작은 이유에서 출발했지만 적지 않은 고민과 조사를 해보고 시작하였다.
https://www.steeme.com/140?category=734731
https://www.steeme.com/141?category=734731
개발하는 동안, 아마도 리액트 네이티브를 선택 했다면 훨씬 더 짧은 시간에 완성 할 수 있었을 지도 모른다는 생각을 여러번 했다. 이는 순전히 내가 리액트 네이티브와 타입스크립트를 나름 빠삭(?) 하게 알고 다룰 수 있다는 이유에 기반한 추측인데, 경험을 떠올려보면 코딩 자체에 소요되는 시간은 상대적으로 매우 작기 때문에 더 빠른 개발 완료에 생각만큼 도움이 되었을지는 의문이다.
플러터를 선택하고 나서, 정말 수많은 난관이 있었다. 정식 버전이 출시된 이후인 8월에 시작했음에도 불구하고, 정식 버전에 정말 문제가 한두가지가 아니었다. 특히 이 문제들을 피하기 위해 여러 채널을 오가면서 대응하는데 참 많은 시간이 낭비되었다.
플러터는 네가지 릴리즈 채널을 관리하는데, stable, beta, dev, master 로 되어 있다. stable 가 가장 안정적이고, master는 말그대로 master branch 이므로 실사용은 불가능하다고 보면 된다. 이 stable 채널에는 가장 문제가 없고 상용에 적용해도 되는 빌드만이 릴리즈 된다. 그런데 stable 빌드에 문제가 있으면 문제가 매우 심각해 진다. 이런 일들이 번번히 일어났고, 그중 한가지 문제는 타임스냅 카메라에 매우 치명적인 버그라서 내가 직접 플러터 팀에게 버그 재현방법을 직접 설명하고 데모 코드까지 만들어서 여러번 푸쉬해야 했다. 수정되는데 2달이 걸렸고, 그동안 땜빵하기 위해서 아주 복잡한 코드 상태를 유지해야 했던 기억이 난다.
플러터 릴리즈 보드는 아래 링크를 참조하시길 바란다.
https://flutter.dev/docs/development/tools/sdk/releases
네달이 지난 지금, 플러터는 상당히 성숙한 느낌이 든다. 내 느낌적인 느낌으로 볼 때, 아마도 프로젝트 진행이 너무 느려서 커뮤니티를 전력적으로 이용하기 위해 한참 미흡한 빌드를 정식 버전으로 내놓았고, 그 결과로 욕을 많이 먹으면서 수많은 문제들이 수정하려 한것 아닐까. 지금도 매우 당혹스러운 버그가 존재하고, (가장 답답한것은 iOS 빌드 이름때문에 생기는 버그) 개발자로써 100% 신뢰하기 어려운 면이 없지는 않지만 확실히 많이 안정 되었고 릴리즈 할때마다 느끼는 불안감이 많이 줄어들었다. 현재 v1.12.13+hotfix.5 을 사용하고 있다
안드로이드와 아이폰에 론칭하는 과정
위에서, 코딩에 소요되는 시간은 생각보다 매우 적다고 했다. 가장 큰 이유는, 앱 개발 자체의 경험이 없기 때문에 수많은 시행착오를 거쳐야 했기 때문이고, 또다른 이유는 앱 빌드, 테스트, 릴리즈, 디버깅 과정이 상상 이상으로 번거롭다는 점이었다. 분명히 익숙하고 빠른 방법이 있을 테지만, 입문한 사람입장에서는 그 방법을 빠르게 꿰뚫어 보기란 쉽지 않았다.
안드로이드와 iOS 모두를 감당할 시간과 자신이 없었기에, 우선 안드로이드에 집중하는 전략을 택했다. 안드로에드에서 안정적으로 구동되고, 플레이스토어 메타데이타와 로컬라이징 등이 최대한 잘 마무리 된 후에 iOS에 론칭하기로 했다. 이 전략은 개인적으로 잘한 선택이라고 생각한다. 첫째로 안드로이드와 iOS를 동시에 테스트하는게 어렵다. 하나의 코드베이스이기 때문에 코드 분리를 아무리 잘 해놓는다 하더라도 예상치 못한 사이드 이팩트가 생길 가능성이 작게라도 가능성이 있게 마련이다. 예를 들면, 안드로이드에서 어떤 부분이 잘 되지 않아서 수정했을 때, 그 코드 수정이 iOS 버전에서 문제를 일으킬 수 있다는 것이다. 하나의 코드베이스라는것이 양날의 검인 이유다.
당시 (라고는 해도 겨우 4달 전) 플러터는 지금보다 훨씬 불안정한 상태였고 (정말 이거 써도 돼는건가? 답이 없어서 구글이 그냥 접을수도 있겠는데? 등의 생각이 들 정도) 발생하는 버그들을 일일이 대응하는것은 안드로이드 하나만 집중하는데도 매우 버거웠다. iOS와 병행 했다면 아마 개발자가 한명 더 있었어야 할 것 같다. 그나마 플랫폼이 안드로이드 하나였기에 문제 해결에 집중 할 수 있었던 것 같다.
우선 안드로이드에 충분히 자리잡고 나서, iOS에 론칭하는 과정은 생각보다 쉬웠다. iOS에서 발생하는 문제들을 수정하는 부분은 결코 쉽지 않았지만, 이미 코드가 성숙되어 있는 상태라서 모듈화하기도 수월했고 플러터 UI 자체는 생각보다 잘 작동 하였다. 큰 문제는 카메라와 갤러리 관련 라이브러리였는데, 이게 기본적으로 좀 엉망인데다가 iOS에서는 그나마도 제대로 동작하지 않아서 포크하고 수정해야 하는 부분이 있었다. 결국 안드로이드와 iOS 모두 네이티브 코드를 건들 수 밖에 없었는데, 이는 전적으로 카메라 라이브러리 때문이었다. 이 애증의 카메라 라이브러리에 대해서는 나중에 따로 적어보려고 한다. 이 카메라 라이브러리는 플러터가 망할것 같다고 생각하도록 만든 장본인인데, 구글 엔지니어들이 공식 릴리즈 하는 라이브러리라고는 믿기 힘들 만큼 개허접하다. 하아.. 생각만하면 고구마 x 100..
iOS를 나중에 론칭하면서 가장 좋았던 것은, 안드로이드에 론칭하면서 만든 메타데이터들을 상당량 재활용 할 수 있다는 점이었다. 비록 스크린샷의 경우 iOS의 요구사항이 너무 까다로워서 모두 새로 만들어야 했지만, 나머지 부분들은 대부분 재활용이 가능했다.
인앱구매 부분은 iOS에서는 기대했던 방식으로 동작하지 않아서 상당히 많은 시간을 들여서 수정해야 했다. 그러나 수정한 결과도 역시 완벽하지 않아서 결국 "모든 기능 전부 무료"로 배포했다. 문제되는 부분들이 수정되면 차차 개선해가야 할듯 하다.
신규 앱 개발에 플러터를 계속 사용할 것인지?
3개월전이었다면 "노" 였겠지만 지금은 "예스". 초기에 비해서 많이 안정되어서 이제 앞으로의 변화가 기대되는 시점이 된 것 같다. 플러터의 최고 오점인 카메라 라이브러리만 개편 된다면 정말 좋겠는데, 아직까지는 카메라를 담당하고 있는 개발자들이 진전이 없는듯 하다. 깃헙을 통해서 여러번 컨택했지만 무슨 생각인지 업데이트도 없고.. 올해 말까지 새로 내놓겠다던 새로운 카메라 라이브러리도 감감무소식이다.
그럼에도 불구하고, 플러터의 수많은 장점을 발견했고, 다트 언어도 나름 쾌적하기에 앞으로도 계속 플러터를 파볼 생각이다.
위에도 언급 했지만, 플러터로 만든 앱이 궁금하시면 아래 링크 클릭
https://apps.apple.com/kr/app/timesnap-camera/id1491681352
https://play.google.com/store/apps/details?id=com.poshpawstudio.timesnap
재미있게 읽으셨다면 "공감" 버튼과 댓글로 응원해주세요. 로그인 없이도 됩니다. 😀
'앱개발이야기' 카테고리의 다른 글
[앱소개] 타임스냅 - 예쁜 타임스탬프 인증샷 카메라 (0) 2020.01.10 [플러터 강좌] 새로운 프로젝트 생성 및 에뮬레이터로 앱 실행하기 (2) 2020.01.06 [플러터 강좌] 플러터(Flutter) 시작하기 - VS Code 필수 익스텐션 (0) 2020.01.06 [플러터 강좌] 플러터(Flutter) 시작하기 - 설치 하기 (3) 2020.01.06 개성있는 타임스탬프 카메라, 타임스냅 무료 프로모션 코드 (0) 2019.11.15 [자작 앱 홍보하기] #3 구글 애드워즈, 돈이면 다 되는 세상 (4) 2019.11.04 [자작 앱 홍보하기] #2 인터넷 커뮤니티에서 어플 홍보하기 (0) 2019.10.31 [앱개발스토리] 플러터로 만든 크로스플랫폼 앱, 가장 큰 단점 (0) 2019.10.28