3weeks 개발기 7편 — 4년 후, Flutter로 다시 만들기로 했다

재개발이라는 결정
3weeks를 다시 만들기로 했을 때, 기존 코드를 그대로 쓸지 아니면 처음부터 다시 쓸지 고민했습니다.
기존 코드는 Swift + UIKit + Realm Swift였습니다. iOS 전용이고, 2019년에 작성한 코드였습니다. 기능은 돌아가지만, 지금 다시 보면 개선하고 싶은 부분이 많았습니다.
그리고 스마트로또 재개발을 Flutter로 경험하고 나서, "3weeks도 Flutter로 하면 되겠다"는 생각이 자연스럽게 왔습니다.
Flutter를 선택한 이유
이유는 하나였습니다. Android를 같이 내고 싶었습니다.
3weeks 앱의 아이디어 자체는 iOS 사용자만의 것이 아닙니다. 습관을 만들고 싶은 사람은 어디에나 있습니다.
기존 Swift UIKit 코드로는 Android 지원이 불가능합니다. React Native를 쓸 수도 있지만, 스마트로또에서 이미 Flutter를 써봤고 만족스러웠습니다. 같은 스택을 유지하는 게 낫다고 판단했습니다.
Flutter는 하나의 코드베이스로 iOS, Android 모두 빌드할 수 있습니다. 추가로 UI 커스터마이징도 자유롭고, Dart 언어도 Swift와 비슷한 부분이 있어 익히기 어렵지 않았습니다.
기존 앱에서 가져올 것, 버릴 것
재개발을 시작하면서 기존 앱에서 무엇을 이어받을지 정리했습니다.
유지할 것:
- 21일 연속 체크 시스템
- 하루라도 빠지면 초기화
- 습관별 알림
- 보상 텍스트 입력
개선할 것:
- 음성 메모 기능 (구조 개선)
- 전체적인 UI/UX 리디자인
새로 추가할 것:
- 뱃지 시스템
- 습관별 통계
- 전체 습관 통합 통계
- Android 지원
이렇게 정리하니 재개발의 범위가 명확해졌습니다.
오래된 앱을 다시 만드는 것의 장점
처음 만들 때와 다르게, 이번엔 사용자의 피드백이 쌓여 있었습니다.
4년 동안 리뷰들을 통해 어떤 부분이 좋았고, 어떤 게 아쉬웠는지 알 수 있었습니다. 처음 기획할 때는 "내가 쓰고 싶은 앱"을 만들었다면, 이번엔 "실제 사용자들이 쓰고 싶은 앱"에 더 가까이 만들 수 있었습니다.
Flutter 학습 곡선은 낮았다
Swift UIKit 개발자 입장에서 Flutter로의 전환이 얼마나 어려웠냐고 묻는다면, 생각보다 어렵지 않았다고 답하겠습니다.
특히 스마트로또를 이미 Flutter로 만들었기 때문에 기본적인 패턴은 익숙했습니다. 위젯 트리 구조, 상태 관리, 라우팅 — 이미 한 번 겪어본 것들이었습니다.
Dart 언어는 Swift와 문법적으로 비슷한 부분이 많아 읽는 데 큰 어려움이 없었습니다.
3weeks의 기능은 스마트로또보다 단순했기 때문에, 개발 속도도 빠를 것이라고 예상했습니다.