Moment Alarm: 스마트 알람 앱 개발 프로젝트 계획서
1. 프로젝트 개요
앱 이름 (가칭): Moment Alarm
핵심 컨셉: 전 세계 사용자를 위한 미니멀하고 직관적인 UI/UX를 갖춘 스마트 알람 앱을 개발합니다. 사용자가 쉽게 알람을 설정하고 관리하며, 삶의 순간순간을 효과적으로 계획할 수 있도록 돕는 것이 목표입니다.
타겟: 글로벌 사용자
기술 스택:
프론트엔드: Flutter (IDE: Android Studio)
백엔드: Node.js (TypeScript)
데이터베이스: MySQL
사용 편의성을 극대화하기 위해 앱의 핵심 기능으로 바로 이동할 수 있는 네비게이션 바를 구현합니다.
탭 구성: [알람], [스톱워치], [타이머], [설정]
2.2. 알람 (Alarm)
기본 화면 (알람 목록): 생성된 모든 알람을 한눈에 볼 수 있도록 리스트 형태로 표시합니다. 각 알람 항목에는 시간, 이름, 반복 요일 정보가 포함되며, 우측의 토글 스위치로 알람을 켜고 끌 수 있습니다. 화면 우측 상단의 '+' 버튼을 누르면 새 알람을 추가할 수 있습니다.
알람 추가/수정 화면:
시간 설정: 스크롤 방식의 타임 피커(Time Picker)를 통해 직관적으로 시간을 설정합니다.
반복: 알람을 반복할 요일(월~일)을 선택하는 버튼 그룹을 제공합니다.
이름: 알람의 용도를 쉽게 구분할 수 있도록 이름을 지정하는 필드를 추가합니다.
소리: 앱에 내장된 다양한 알람 소리 목록에서 원하는 소리를 선택할 수 있습니다.
진동: 진동 사용 여부를 선택하는 토글 스위치를 배치합니다.
볼륨 조절: 슬라이더를 이용해 알람 소리의 크기를 편리하게 조절합니다.
저장/취소: 화면 상단에 '저장' 및 '취소' 버튼을 두어 설정을 완료하거나 취소합니다.
2.3. 스톱워치 (Stopwatch)
UI 구성: 00:00:00 형태의 시간을 표시하는 화면을 구현합니다. '시작/일시정지' 기능을 하는 메인 버튼과 '랩/초기화' 기능을 하는 보조 버튼을 통해 직관적인 사용이 가능하도록 합니다.
기능:
시간을 정확하게 측정하고, 랩(Lap) 타임을 기록하는 기능을 포함합니다.
측정 중인 랩 타임 목록은 스크롤하여 확인할 수 있습니다.
2.4. 타이머 (Timer)
UI 구성: 시간, 분, 초를 설정하는 스크롤 방식의 피커 UI를 제공합니다. '시작' 버튼과 '취소' 버튼으로 타이머를 제어합니다.
기능:
타이머 작동 시 남은 시간을 원형 프로그레스 바로 시각화하여 사용자가 한눈에 진행 상황을 파악할 수 있도록 합니다.
설정된 시간이 종료되면 알림과 함께 소리가 발생합니다.
2.5. 설정 (Settings)
사용자별 맞춤 설정이 가능한 페이지를 구성합니다.
로그인/로그아웃: 사용자 계정 관리 기능을 제공합니다.
계정 정보: 로그인한 사용자의 이메일 등 간단한 정보를 표시합니다.
언어 설정 (신규): 앱에서 사용할 언어를 선택할 수 있는 기능을 추가합니다.
알림 설정: 앱 푸시 알림 수신 여부를 설정하는 토글 스위치를 제공합니다.
테마 설정 (추가 제안): 사용자가 라이트 모드와 다크 모드를 자유롭게 전환할 수 있는 기능을 추가합니다.
앱 정보: 버전 정보와 개발자 정보 등을 표시합니다.
3.1. API 엔드포인트
사용자 인증:
POST /auth/register: 회원가입
POST /auth/login: 로그인
사용자 설정:
PUT /users/me/preferences: 사용자 언어 및 시간대 설정 업데이트
알람 데이터 동기화 (로그인 사용자 대상):
GET /alarms: 사용자의 모든 알람 정보 조회
POST /alarms: 새 알람 정보 저장
PUT /alarms/:id: 특정 알람 정보 수정
DELETE /alarms/:id: 특정 알람 삭제
3.2. 데이터베이스 테이블 구조
Users (사용자 테이블):
id (Primary Key, Auto Increment)
email (VARCHAR, Unique)
password (VARCHAR, Hashed)
timezone (VARCHAR, 예: 'Asia/Seoul', 'UTC')
language (VARCHAR, 예: 'ko', 'en')
created_at (TIMESTAMP)
Alarms (알람 테이블):
id (Primary Key, Auto Increment)
user_id (Foreign Key to Users.id)
alarm_time (TIME) - UTC 기준으로 저장하여 클라이언트에서 변환
label (VARCHAR)
is_active (BOOLEAN)
repeat_days (JSON or VARCHAR - 예: ["MON", "WED"])
sound (VARCHAR)
volume (FLOAT)
vibration (BOOLEAN)
created_at (TIMESTAMP)
시간대 처리: 모든 시간 데이터는 서버와 DB에 UTC(협정 세계시) 기준으로 저장하고, Flutter 앱에서는 timezone 패키지를 활용해 사용자의 디바이스 시간대에 맞춰 변환하여 표시합니다. 이를 통해 사용자가 어느 지역에 있든 정확한 알람을 경험할 수 있습니다.
상태 관리: 앱의 복잡성을 고려하여 Riverpod 또는 Provider와 같은 상태 관리 솔루션을 도입합니다.
권한 처리 (Permissions): 알람 및 타이머 기능이 정상 작동하도록 '알림 권한'과 안드로이드의 '정확한 알람 예약 권한'을 요청하고 처리하는 로직을 추가합니다.
백그라운드 실행: 앱이 종료된 상태에서도 알람이 정확히 울리도록 android_alarm_manager_plus 또는 flutter_local_notifications 패키지를 활용해 백그라운드 작업을 구현합니다.