Wireframe
다음으로 와이어프레임을 스케치했다.
전체적인 디자인 틀과 애니메이션을 담았다.
쪽팔려서 모자이크좀 했다.


피그마로 만드는 선택지도 있었지만, 아래와 같은 이유로 패드를 이용해 스케치를 했다.
- 1인 개발이기 때문에 내용을 체계적으로 공유할 일이 없음.
- 프로젝트의 규모가 작기에 절대적인 분량이 적음.
- 미니멀한 디자인 언어를 사용할 예정이기 때문에 구현이 단순함.
Design Token
이전에 포트폴리오 작업 할 때, 디자인 토큰 사전 정의의 중요성을 느껴서 미리 지정해보았다.
실제로 구현할 때 변경될 여지는 충분히 있다.
Color
Primary Text
#111111
Sub Text
#666666
Disabled (Hint)
#CCCCCC
Background
#FAF9F6
Point (V button)
#222222
Typo
H1 (Title)
24sp
Bold
“오늘의 한 문장”
Body1 (Body)
16sp
Regular
입력 텍스트
Caption (Calendar, Hint)
12sp
Light
달력 날짜
Spacing
기본 여백 (Screen Padding)
20dp / 24dp
요소 간 간격
8dp / 16dp / 32dp
*4의 배수로 통일
ERD

ERD 또한 Mermaid를 통해 간단하게 작성하였다.
이 앱은 구조가 복잡하지 않기에 위 테이블 하나로 동작 가능하며,
오히려 단순함을 유지하는 것이 중요하다.
서버 없이 Android Room DB로 시작하여, 추후 확장할 계획이다.
1. id (PK)
서버 동기화를 고려한다면 UUID를 사용하는 것이 좋지만, MVP단계이므로 Long으로 설정하였다.
2. target_date (UK)
이 문장이 며칠 자 일기인지 정의한다.
- 수정 마감 시간이 4시라고 했을 때, 사용자가 12월 23일 새벽 2시에 글을 쓴다.
- created_at (실제 시간)은 23일 02시지만, target_date (논리적 날짜)는 2025-12-22로 저장된다.
- Unique Index를 통해 하루에 두 개의 글이 저장되는 것을 방지한다.
3. content
사용자가 입력한 문장으로, SKIPPED 상태일 경우 값이 null 또는 빈 문자열일 수 있다.
4. state
Enum을 통해 관리한다.
- WRITTING: 작성 중 (임시저장)
- CLOSED: 마침표 찍음 (V 버튼 누름)
- SKIPPED: 기록하지 않기 선택
Empty, Expired, Locked는 DB에 저장하는 대신, 조회 시점에 계산한다.
만약 DB에 위 요소들을 넣으면, 매일 새벽 4시에 모든 데이터를 업데이트하는 비효율적 작업을 해야한다.
앱에서 데이터를 불러올 때 아래 예시와 같은 if문 로직으로 처리하는 것이 보다 효율적일 것이다.
if ( now > target_date + 28h ) return LOCKED
또한 알림 시간, 테마 설정 같은 데이터는 자주 변경되고 양이 적기때문에, DateStore 방식이 더 가볍고 빠를 것이다.
- KEY_NOTIFICATION_TIME: "22:00"
- KEY_IS_FIRST_LAUNCH: false
- KEY_THEME: "Dark"
5. updated_at
마지막 저장 시간 표기 용도이다.
또한 기기 간 동기화 기능을 구현할 때 필수적인 요소이다.
이 칼럼이 없다면, 여러 기기를 통해 글을 작성할 때 어떤 기기의 문장이 가장 최신인지 알 수 없다.
'Project > [Toy Project] 마침표' 카테고리의 다른 글
| [마침표] 01. State Diagram / Flowchart (0) | 2025.12.20 |
|---|---|
| [마침표] 00. 제품 철학 및 제약 정의서 (0) | 2025.12.14 |