칭찬스티커
아이들의 긍정적인 습관 형성을 돕는 기록 및 보상 앱입니다. Jetpack Compose로 구현된 UI와 Room Database(SQLite) 기반의 안정적인 데이터 관리를 제공합니다.
프로젝트 소개 및 개발 배경
칭찬스티커는 아이들의 긍정적인 행동을 기록하고 보상하는 습관 형성 앱입니다. 부모님이나 선생님이 아이의 좋은 행동에 스티커를 부여하고, 일정 개수가 모이면 보상을 제공하는 전통적인 칭찬 스티커 시스템을 디지털화했습니다.
이 프로젝트를 시작하게 된 계기는 아들 둘을 키우면서 아이들의 동기부여에 칭찬 스티커가 매우 효과적이라는 것을 경험했습니다. 하지만 종이 스티커판은 분실되거나 훼손되기 쉽고, 여러 장소에서 일관된 기록을 유지하기 어려웠습니다.
이러한 문제를 해결하고자 디지털 칭찬 스티커 앱을 기획하게 되었습니다. 동시에 Jetpack Compose를 실무에 적용하기 전에 개인 프로젝트에서 충분히 학습하고 싶었던 목표도 있었습니다. 칭찬스티커 앱은 이 두 가지 목표를 동시에 달성할 수 있는 완벽한 프로젝트였습니다.
기술 스택 상세 설명
칭찬스티커 앱은 최신 Android 개발 기술을 적극적으로 활용하여 개발되었습니다. Jetpack Compose를 메인 UI 프레임워크로 사용하여 선언형 UI 패러다임의 장점을 최대한 활용했습니다.
Kotlin & Jetpack Compose: 100% Kotlin으로 작성되었으며, Jetpack Compose를 사용하여 UI를 구현했습니다.
Room Database: Room Database를 사용하여 SQLite 기반의 안정적인 데이터 관리를 제공합니다.
Clean Architecture: MVVM 패턴과 Clean Architecture 원칙을 적용하여 테스트 가능하고 유지보수가 용이한 코드 구조를 갖추고 있습니다. Hilt를 사용한 의존성 주입으로 모듈 간 결합도를 낮추었습니다.
주요 기능
- 스티커 부여 시스템: 좋은 행동에 대해 스티커를 부여합니다.
- 목표 및 보상 설정: 스티커 목표 개수와 달성 시 보상을 설정할 수 있습니다.
- 기록 히스토리: 모든 스티커 부여 내역이 기록되어 아이의 성장 과정을 돌아볼 수 있습니다.
개발 과정의 도전과 해결
Jetpack Compose를 처음 실제 프로젝트에 적용하면서 여러 도전에 직면했습니다. 가장 큰 도전은 기존 View 시스템과 완전히 다른 선언형 UI 패러다임에 적응하는 것이었습니다. 상태 관리 방식이 근본적으로 달라서 초기에는 불필요한 리컴포지션이 자주 발생했습니다.
이 문제를 해결하기 위해 Compose의 상태 관리 메커니즘을 깊이 학습했습니다. remember, derivedStateOf, LaunchedEffect 등의 적절한 사용법을 익히고, 불필요한 리컴포지션을 방지하는 최적화 기법들을 적용했습니다. 또한 Compose Compiler 리포트를 활용하여 성능 병목 지점을 찾아 개선했습니다.
또 다른 도전은 Firebase와의 실시간 동기화 구현이었습니다. 오프라인 상태에서도 앱이 정상 동작하면서 온라인이 되면 자동으로 동기화되어야 했습니다. Room Database를 로컬 캐시로 활용하고, Firebase의 오프라인 지속성 기능과 결합하여 끊김 없는 사용자 경험을 제공하도록 구현했습니다.
스티커 부여 시 표시되는 애니메이션도 까다로운 부분이었습니다. 아이들이 좋아할 만한 생동감 있는 애니메이션을 Compose Animation API로 구현하면서 성능과 시각적 효과 사이의 균형을 맞추는 것이 중요했습니다. 여러 번의 반복 테스트를 통해 최적의 애니메이션 타이밍과 효과를 찾아냈습니다.
향후 계획
칭찬스티커 앱은 지속적으로 개선하고 있습니다. 현재 계획 중인 주요 업데이트는 다음과 같습니다:
- 아이 프로필 관리: 여러 명의 아이를 등록하고 각각 별도로 관리할 수 있도록 할 예정입니다.
- 진행 상황 시각화: 현재까지 모은 스티커 개수와 목표까지 남은 개수를 시각적으로 확인할 수 있는 대시보드를 제공할 예정입니다.
- 통계 및 리포트: 주간/월간 스티커 획득 통계와 성장 리포트 기능을 추가하여 아이의 발전 과정을 한눈에 파악할 수 있게 할 예정입니다.
- 다국어 지원: 다국어를 지원하여 더 많은 사용자가 활용할 수 있도록 할 계획입니다.
- 스티커 커스터마이징: 사용자가 직접 스티커를 만들거나 사진을 활용할 수 있는 기능을 추가할 계획입니다.