느낌기록

fee.269 자기관리 통합앱 요구사항

ndss 2026. 8. 28. 02:24

 

자기관리 통합앱을 만들려고 한다. 문서만 잘 쓰면 개발은 뚝딱이라, 공들여서 문서를 작성중이다. 부족한 부분은 없는지 과한 부분은 없는지 여러가지 시뮬레이션을 하면서 문서를 수정했다. 뭐 요즘은 문서만 잘 쓰면, AI가 잘 짜줘서 개발시간이 줄어드니까. 문서에 진짜 목숨 걸어야 한다. 그래서 언어를 잘해야 하는 것이기도 하고. 글을 잘 써야 하는 것이기도 하고 그렇다.

 

 

 

필요기능

 

1. 수면시간 기록

2. 최근 일주일의 수면시간

3. 오늘의 섹스

4. 이번주 카페인

5. 이번달의 목표강도

6. 수분, 영양제, 운동, 식사시각 기록

 

개발에 앞서, 구체적인 요구사항을 정리해본다.

 

 

 

요구사항

 

격일 / 격주 / 격월

 

이렇게 진행하는 게 있는 반면, 매일같이 해야하는 것이 있을 수 있다. 그런 것들을 인지하게 만드는 게 목표다. 따라서, 메인 화면에는 기상과 취침버튼을 눌렀을 때만 보이게 한다.

 

자기전에 취침버튼을 누른다.

일어나서 기상버튼을 누른다.

 

취침버튼을 눌렀을 때, 모달로 아래항목을 보여준다.

2. 최근 일주일의 수면시간

3. 내일의 섹스

4. 다음주 카페인

5. 다음달 목표강도

 

기상버튼을 눌렀을 때, 모달로 아래항목을 보여준다.

2. 최근 일주일의 수면시간

3. 오늘의 섹스

4. 이번주 카페인

5. 이번달 목표강도

 

취침버튼을 눌렀을 경우, 메인화면에 현재까지 얼마나 잠을 잤는지 표시한다.

 

최근 일주일의 수면시간은 (잠들어 있는 시간 / 깨어있는 시간) 이 두가지를 한줄씩 보여주며, 구체적인 수면시각은 생략한다.

 

수면기록 상세페이지를 만들어서 수동으로 기록을 수정/삭제/추가 할 수 있도록 한다.

 

식사 / 수분 / 영양제 / 운동 등을 임의로 추가할 수 있도록 버튼을 늘려나갈 수 있다. 이것은 일종의 체크리스트로 기능할 수 있을 테지만, 강제하지 않고 했다고 기록만 하는 것으로도 충분하다고 본다.

 

격주 / 격월 구간의 경우 격일 타이머와는 다르게 구간이 자동으로 갱신된다.

이는 엄밀히 말해 타이머라고 볼 수 없다. 일단 로테이션이라고 명명함.

 

 

 

설계제안

 

앱 특성상, 시간을 기록하고 자기관리를 한다는 점에서 내가 기존에 만들어 두었던 누적시간 타이머 앱과 매우 유사한 작동방식을 보인다. 따라서 앱을 새로 만들기 보다는 기존 타이머에 기능추가 쪽으로 생각해보도록 한다.

 

기존의 누적시간 타이머를 살짝 변형하는 것으로, 수면시간 기록을 보여줄 수가 있다. 누적시간을 보여줄지 타이머를 보여줄지, 타이머에 옵션을 주기만 하면 구현가능하다. 이는 누적시간 상세 페이지의 우측 햄버거메뉴에 토글버튼 형태로 넣도록 한다.

 

메인화면 우상단 햄버거 메뉴의 "새 타이머" 버튼을 눌렀을 경우, 어떤 유형의 타이머를 디폴트로 옵션으로 설정할지 모달로 보여준다.

1. 누적시간.

2. 기록시간.

 

누적시간의 타이머는 누적시간을 보여주며, 기록시간의 타이머는 통상의 타이머처럼 기록시간을 보여준다.

 

메인화면 우상단 햄버거 메뉴에 "새 시각기록" 메뉴를 넣는다.

현재시각과 이전기록시각의 차이를 실시간으로 보여준다.

X일 X시간 X분 X초 전에 실행됨 이라고 보여준다.

이전기록이 없는 경우, "이전기록이 없습니다" 라고 보여줌.

 

기록타이머의 데이터 구조가 누적타이머와 다른 점.

기록타이머에는 accumulatedMs 데이터가 없음. 이걸로 기록타이머와 누적타이머를 구분한다. 기록시간 상세페이지와 누적시간 상세페이지는 완전히 다른 파일로 작성하며 어느쪽 페이지를 분기해서 보여줄지는 accumulatedMs 에 달려있다.

기록시간데이터에는 endAt 데이터가 없음.

 

기록시간 상세페이지에서 기록시간을 추가/삭제/수정 하도록 해야한다.

endAt 이 없으므로 겹치는 시간대에 대한 밸리데이션이 필요없다.

동일 startAt 만 없으면 됨.

기록시간의 추가/수정의 모달의 경우 endAt 이 없으므로 그 부분의 입력은 빼도록 한다.

기록시간 추가의 경우 시작시각을 자동입력을 할 필요가 없다.

그외 다른 부분은 누적시간 상세페이지와 동일하다.

기록시간 상세페이지와 누적시간 상세페이지는 동일한 라우팅을 쓴다.

 

기상/취침 버튼을 눌렀을 때 모달로 보여주는 이 기능이 얼마나 도움이 될지는 미지수인데 비해, 이걸 각잡고 설계하면 데이터 구조부터 시작해서 의존성이 굉장히 복잡해진다. 즉 이 부분의 설계 코스트가 장난이 아니다. 일단은 단순하게 만들어서 써봐야 한다. 처음부터 의존성 복잡하게 만들면 나중에 쓸모없어져서 제거할 때도 여간 곤란한 게 아니므로, 간단하게 만들어보기로 한다.

 

홀수/짝수의 주인지 월인지를 계산해서 각각 다른 문구를 띄우도록 한다. 홀수/짝수 일인지는 카운터를 통해 확인하도록 한다. 누적시간 데이터에 카운터를 추가해야 한다. 카운터의 증가감소가 적용되도록 기존의 누적시간 추가/삭제/수정 로직 전반에 반영해야 한다.

 

타이머 레벨에서 아래 데이터를 추가할 수 있도록 한다.

홀수일 문구, 짝수일 문구

홀수주 문구, 짝수주 문구

홀수달 문구, 짝수달 문구

 

일/주/월의 홀수 짝수를 계산하여, 타이머 레벨에서 해당하는 문구가 하나라도 입력되어있다면 모달을 통해 보여주도록 한다.

 

 

 

추후 설계유연성 확보

 

기록타이머가 어떤 식으로 체크리스트로 기능할 수 있을지는 일단 써보고 나서 결정할 문제이므로, 이 부분의 구체적인 개발은 당분간 보류한다. 이걸 단순히 날짜기준으로 정하면 00시가 지났을 때 다음날의 기록으로 취급해버려서 곤란해진다. 수면시간을 기준으로 몇회를 했는지 체크하는 식으로 계산하는게 바람직해 보인다.

 

즉, 기본적으로 체크리스트로써의 기능은 타이머에 의존할 수 밖에 없다.

 

수면시간을 기준 타이머를 만들어서 그날 해야할 일들을 체크하는 식으로 생각해봤으나, 체크리스트의 경우 깨어있는 시간 내에 해야할 목록을 의미한다. 즉, 수면시간 기록의 경우, 시간구간 밖의 시간대를 기준으로 체크리스트를 정의하게 된다.

 

반면 출퇴근시간 기준 타이머의 경우, 시간구간 내의 시간대를 기준으로 체크리스트를 정의한다는 점에서 이 부분을 염두에 두고 추후의 개발이 가능하게끔 설계 유연성을 확보할 필요가 있다.

 

구간 내(잠들어 있는 시간)에서 체크리스트를 정의할지,

구간 밖(깨어있는 시간)에서 체크리스트를 정의할지,

타이머 연동시 선택지가 갈리게 된다.

 

이 부분을 고려해서 타이머와 연동해서 체크리스트를 정의하는 기능을 추가하게 될 것이다.