2024년 9월 23일
카테고리 : 회고록회고
조회 : 810|3분 읽기
Flow5 회고
Flow5 개발 회고록
1. Flow5의 개발 목적
Flow5는 작업을 시작하는 데 어려움을 느끼는 사용자를 위해 간단한 5분 타이머 앱을 목표로 개발되었습니다. 작은 작업을 먼저 시작하게 도와주고, 작은 성취감을 통해 더 큰 동기부여를 제공하는 것을 핵심으로 했습니다.
- 캐치프레이즈: "당신이 하고 싶은 일을 미루고 있지 않으신가요? 버튼 하나만 누르면 그 다음 해야 할 일을 시작하기 쉽게 해줍니다."
- UI 설계: 숫자로 시간을 표시하지 않고, 원형 인디케이터를 사용하여 직관적으로 시간의 흐름을 시각적으로 표현했습니다.
- 작업 추천: 타이머가 시작되면 5분 안에 할 수 있는 작은 작업을 추천하고, 타이머가 끝나면 격려의 메시지를 보여주어 성취감을 높였습니다.
- 사용자 맞춤형 경험: 타이머가 종료된 후 사용자가 설정한 명언을 표시하여 개인화된 경험을 제공했습니다. 사용자가 직접 명언을 설정하고 변경할 수 있도록 하여 동기부여의 개인화를 가능하게 했습니다.
2. i18n(국제화) 적용
Flow5의 개발 과정에서 다국어 지원(i18n)을 적용하는 과정은 여러 시행착오를 겪으며 큰 교훈을 얻게 되었습니다.
문제점
- 처음에는 Intl.getCurrentLocale() 함수에서 반환되는 복잡한 언어 코드(en_US, ko_KR 등) 때문에 단순한 언어 코드(en, ko)만 추출하는 방법을 찾는 데 어려움을 겪었습니다.
- 또한 각 언어별로 다양한 컨텐츠를 어떻게 관리하고, 사용자가 설정한 언어에 따라 UI가 적절히 변하도록 구현하는 것도 처음에는 복잡하게 느껴졌습니다.
해결
- flutter_gen 패키지와 l10n을 사용하여 언어별 리소스를 관리했습니다. 각 언어에 맞는 intl_ko.arb, intl_en.arb 파일을 생성하여 국제화 리소스를 쉽게 관리할 수 있었습니다.
- 언어 설정 관리: 사용자가 선택한 언어에 맞춰 앱의 언어가 변경되도록 MaterialApp의 locale 설정을 적절히 처리했습니다.
배운 점
- 국제화는 단순히 언어를 번역하는 작업이 아니라, UI와 UX가 각 언어에 맞춰 자연스럽게 적응하는지 고려해야 한다는 것을 배웠습니다.
- 다국어 지원을 통해 글로벌 사용자들에게 접근할 수 있는 기회를 얻을 수 있다는 것을 깨달았습니다.
3. 백그라운드 작업과 알림의 시행착오
타이머가 백그라운드에서도 계속 작동하고, 타이머가 끝나면 사용자에게 알림을 보내는 기능을 구현하는 과정에서 여러 문제를 겪었습니다.
문제 1: 백그라운드에서 타이머 유지
Flutter에서 타이머가 앱이 백그라운드로 전환된 이후에도 계속 작동하도록 만드는 것이 가장 큰 도전 중 하나였습니다. 특히 iOS에서는 백그라운드 작업에 제한이 있어, 여러 패키지를 시도하면서 타이머가 어떻게 백그라운드에서 작동할 수 있을지 고민했습니다.
문제 2: 알림 기능
타이머가 종료되었을 때 로컬 알림을 보내는 기능도 필요했습니다. 하지만 타이머가 종료된 시점과 알림 발생 시점을 어떻게 정확하게 동기화할지 고민이 많았습니다.
해결
- flutter_background_service 패키지를 사용해 타이머가 백그라운드에서 일정 시간 동안 작동할 수 있도록 구현했습니다. 그러나 iOS의 백그라운드 제약을 극복하기 위해서는 정확한 타이머 동작보다는 종료 시점을 계산하여 알림을 보내는 방향으로 수정했습니다.
- flutter_local_notifications 패키지를 사용하여 타이머 종료 시점에 알림을 발생시키도록 설정했습니다. 이 방식은 특히 사용자가 앱을 종료한 후에도 타이머가 끝날 때 알림을 받을 수 있도록 해주었습니다.
4. Flow5 프로젝트를 통해 얻은 교훈
이 프로젝트를 통해 여러 가지 중요한 교훈을 얻었습니다.
1) 단순함의 강력함
Flow5의 미니멀리즘 디자인은 사용자 경험을 단순하게 유지하면서도 직관적이고 효과적인 경험을 제공할 수 있다는 것을 깨달았습니다. 특히 숫자를 없애고 시각적 피드백을 활용하는 방법은 사용자에게 더 흥미로운 경험을 제공했습니다.
2) 기술적 도전 극복
Flutter의 다양한 패키지와 기능들을 조합하면서, Flutter가 제공하는 강력한 도구들의 유연성을 체감할 수 있었습니다. 특히 백그라운드 작업과 알림 기능을 구현하는 과정에서 많은 도전 과제를 해결하며 기술적인 성장을 이루었습니다.
3) 개인화된 경험 제공
사용자가 자신만의 명언을 설정할 수 있는 기능은, 앱이 단순한 타이머에서 개인화된 동기부여 도구로 발전할 수 있음을 보여주었습니다. 이는 사용자에게 더 깊이 있는 경험을 제공하는 중요한 요소였습니다.
4) 다국어 지원의 중요성
다국어 지원을 통해 더 많은 글로벌 사용자들에게 접근할 수 있는 기회를 얻게 되었습니다. 국제화는 기능적 도전뿐만 아니라, 문화적 차이를 고려하는 UX 설계의 중요한 부분이라는 점을 배웠습니다.