시민과학 기록(기저치·일일기록·리포트)과 걷기(코스·히스토리·통계), 그리고 서버 전송을
탭 4개로 재배분했습니다. 핵심 판단은 하나입니다 —
동기화는 탭이 아닙니다. 참여자가 신경 쓸 일이 아니라 앱이 알아서 할 일이므로,
평소엔 작은 표시로만 두고 문제가 생겼을 때만 앞으로 꺼냅니다.
DOCUX-UNIFIED
REVv0.4 / DRAFT
TABS4
SCREENS43
TARGET중장년 · 초보
초보자 설계 원칙한 화면 한 과업 ONE TASK단계적 공개 PROGRESSIVE알아서 처리 AUTOMATIC쉬운 말 PLAIN WORDS
왜 5개가 아니라 4개인가
기존 두 문서의 탭을 그대로 합치면 홈·기록·걷기·리포트·동기화·설정 6개가 됩니다.
여기서 동기화는 '더보기' 안으로(참여자 과업이 아님), 리포트는 '내 기록' 안으로(기록과 결과는 한 묶음)
넣어 4개로 줄였습니다. 탭이 적을수록 초보자가 길을 잃지 않습니다.
아래 탭 카드를 누르면 각 탭의 상세 설계로 이동합니다. 개발 착수용 화면 목록·API 매핑표 ↓도 문서 끝에 있습니다.
특히 '걷기' 카드는 코스 기반 14개 화면 상세로 연결됩니다.
v0.4 · UX 상세기획서 반영
별도 기획서(md)의 내용을 다음과 같이 흡수했습니다. 기획서의 '변화' 탭 → 내 기록 › 내 변화,
'연구' 탭 → 더보기 › 연구 참여 정보로 매핑되어 탭 4개 구조는 유지됩니다.
새로 추가: T1S 안전·적합성 확인, 결측 4종 구분(없음/모름/측정 못함/답변 안 함),
L3R 제출 전 검토(차단 없는 품질 플래그), SAFE 안전 응답 분기,
알림 설계 원칙(하루 2회 상한), 개발 인수 기준 7항.
기획서의 장소·노면 범주 입력은 코스 체크인의 폴백(W2 '목록에 없는 곳')으로 통합했습니다.
개발 관점
세그먼트 3개지만 실제 구현 부담은 Seg 1(위저드) 하나에 몰려 있습니다.
Seg 2·3은 조회 전용이라 API 결과를 그리기만 하면 됩니다.
Seg 1의 임시저장(단계별 로컬 커밋)을 반드시 넣으세요 — 3단계 중간에 앱이 죽으면 사용자는 다시 안 합니다.
L-01
오늘 기록 · 3단계 위저드
몸 상태 → 마음 상태 → 오늘 있었던 일. 단계마다 로컬 임시저장.
9:41● ● ●
L1 · 1/3 몸 상태
오늘 기록지난 기록내 변화
1 / 3 · 몸 상태
잠 6시간 40분자동
심박 변이도 34자동
혈압 · 3번 재서 평균
124 / 82
📏 5분 안정 · 1분 간격 3회 · 평균 기록
다음마음 상태
자동/수동 구분자동 배지가 붙은 값은 수정 불가(읽기 전용). 손댈 수 있는 건 흰 입력칸뿐입니다.
→
9:41● ● ●
L2 · 2/3 마음 상태
2 / 3 · 마음 상태
걷기 전걷기 후
기분7
기운6
아픈 곳3
스트레스4
손가락으로 밀어서 조절하세요
다음오늘 있었던 일
이전
쉬운 말활력→기운, 통증→아픈 곳. 슬라이더 옆 숫자를 크게 두어 조작 결과를 즉시 확인시킵니다.
→
9:41● ● ●
L3 · 3/3 오늘 있었던 일
3 / 3 · 오늘 있었던 일 (필수)
몸 상태에 영향을 준 일이 있나요?
☑ 술을 마셨다
☐ 잠을 못 잤다
☐ 식사가 달랐다
☑ 속상한 일이 있었다
없음모름답변 안 함
건너뛰기 불가 WRD-04
오늘 기록 완료2분 걸렸어요
필수 검증항목마다 있음/없음/모름/답변 안 함 중 하나는 반드시 남습니다. '없음'·'모름'·'무응답'은 분석에서 전혀 다른 결측입니다. 하나도 안 남기면 완료 버튼 비활성.
→
9:41● ● ●
L3R · 제출 전 검토
오늘 기록 검토
✓ 활동황성공원 31분
✓ 전후 체감기록됨
! 혈압측정 못함 · 기기 없음
✓ 오늘 있었던 일없음
기록 품질 : 분석 가능 측정하지 못한 값도 사유와 함께 저장되어 연구에 도움이 됩니다
오늘 기록 제출수정하려면 뒤로
임시 저장
차단하지 않는다누락이 있어도 제출을 막지 않습니다. 품질 플래그만 남기고 통과시키세요. 제출을 막는 순간 사람들은 거짓 값으로 채웁니다 — 그게 최악의 데이터입니다.
→
9:41● ● ●
L4 · 완료
✓ 완료
오늘 기록 끝!
2분 걸렸어요. 내일도 같은 시간에 부탁드려요.
방금 보냄이번 달 기록
내 변화 보기
오늘
걷기
내 기록
더보기
전송완료 즉시 로컬 커밋 → POST /records/day/. 실패해도 화면은 성공으로 넘어갑니다(백그라운드 재시도).
용어UUID·큐·백오프·재시도 전부 노출 금지. "보낸 자료 / 보내는 중" 두 단어로 충분합니다.
M-02
알림 · 참여 정보 · 도움말
참여 중단은 화면이 아니라 절차입니다.
9:41● ● ●
M5 · 알림 설정
알림
기록 알림켜짐
알림 시각
아침 7:30
걷기 알림꺼짐
주간 변화 요약켜짐
매일 같은 시각에 재는 것이 정확한 비교의 핵심이에요
일관성 지원 PRG-04
방법론 보조알림은 편의 기능이 아니라 측정 시각 일관성을 지키는 장치입니다. 기본 ON으로 두세요.
→
9:41● ● ●
M6 · 연구 참여 정보
연구 참여 정보
동의서 버전v2 · 2026-04-01
동의 항목3건 ›
연구 책임기관○○대학교 ›
내 자료 내려받기 (CSV)
연구 참여 중단하기
중단하시면 그동안 보낸 자료도 모두 지워집니다
법적 플로우철회는 3단계여야 합니다 — ① 안내(파기 범위 고지) ② 확인(되돌릴 수 없음) ③ 서버 파기 + 감사 로그. 앱에서 로컬만 지우고 끝내면 법 위반입니다.
→
9:41● ● ●
M7 · 도움말 · 접근성
도움말
글씨 크게켜짐
가 나 다 → 가 나 다 미리보기
혈압은 어떻게 재나요?›
워치가 없어도 되나요?›
비 오는 날은요?›
기록을 빼먹었어요›
문의하기
FAQ 선정추상적 질문 대신 실제 이탈 사유를 항목으로 씁니다. "기록을 빼먹었어요"가 가장 많이 눌릴 항목입니다.
공통
안전 응답 · 알림 · 인수 기준
전 화면 공통 규칙 · v0.4 추가
S-01
안전 응답 처리 — 전 화면 공통 분기
통증·상처·어지러움 응답은 어느 화면에서 나와도 같은 분기를 탑니다: 무보행 사유(T6), 설문(EMA), 안전 확인(T1S).
9:41● ● ●
SAFE1 · 안전 안내
!
오늘은 무리하지 마세요 통증이나 상처가 있을 때는 쉬는 것이 먼저입니다.
증상이 심하거나 계속되면 의료기관과 상담하세요.
활동오늘은 중단 권장
기록그대로 저장됨
이 안내는 진단이 아니에요. 기록은 연구에 그대로 반영됩니다.
확인했어요기록 계속하기
코디네이터에게 문의
문구 규칙진단처럼 들리는 표현 금지("~병일 수 있습니다" ×). 약 복용을 중단하라는 문구는 절대 금지. 안내 노출 여부(safety_notice_shown)를 응답과 함께 저장해 연구 로그로 남깁니다.
→
9:41● ● ●
SAFE2 · 코디네이터 문의
문의 보내기
연구 코디네이터가 확인하고 답해드려요.
증상 요약 (선택)
발바닥에 물집이…
통증·상처기기 문제기록 문의기타
회신은 앱 알림으로 옵니다 보통 1일 이내
보내기긴급하면 119
콘솔 연동안전 문의는 운영 콘솔 품질 큐의 최우선 순위로 들어갑니다(안전 응답 > 동의 철회 > 누락). 처리 상태와 안내 이력이 기록됩니다.
NOTIF
알림 설계
하루 최대 2회 · 조용한 시간 제외 · 죄책감을 자극하는 문구 금지.
상황
문구 예시
탭 시 이동
비고
아침 기록 미완료
"오늘의 기록을 남겨 주세요. 약 1분이면 됩니다."
내 기록 › 오늘 기록
사용자 지정 시각
활동 기록 유도
"오늘은 맨발걷기를 했나요? 쉬었다면 그 기록도 중요해요."
걷기 여부 선택
미실시를 동등하게 취급
2일 연속 누락
"기록을 다시 시작해도 괜찮아요. 놓친 날은 '기억나지 않음'으로 남길 수 있어요."
지난 기록 캘린더
죄책감 자극 금지
평가 시작
"4주 평가가 준비됐어요. 약 3분이 걸립니다."
평가 설문
4주/12주 시점
안전 응답 후
"오늘은 무리하지 마세요. 증상이 계속되면 의료진과 상담하세요."
도움말·문의
진단 표현 금지
알림도 넛지다
알림 발송 이력은 근처 참여자 카드와 마찬가지로 행동을 유발하는 개입입니다.
발송 시각·종류·탭 여부를 저장해, "알림 받고 기록한 날"을 분석에서 구분할 수 있게 하세요.
AC
개발 인수 기준
이 7가지가 통과되지 않으면 출시하지 않습니다. QA 시나리오의 뼈대입니다.
#
기준
확인 방법
1
걷지 않은 날에도 60초 안에 유효한 일일 기록을 제출할 수 있다
스톱워치 실측 (신규 사용자 기준)
2
활동 기록 없이도 수면·기분·교란변수 기록을 끝낼 수 있다
무보행 시나리오 E2E
3
모든 필수 변수에 없음/모름/측정 못함/답변 안 함 결측 옵션이 있다
스키마·화면 전수 점검
4
자동 연동값·수동값·수정값의 출처와 시각이 보존된다
DB 레코드 감사
5
품질 플래그는 남기되 제출 자체는 차단하지 않는다
누락 제출 시나리오
6
개인 리포트는 기준선·기간·완성도를 병기하고 인과를 단정하지 않는다
전 화면 카피 검수
7
동의 철회 시 수집이 즉시 중지되고 데이터 처리 기준이 안내된다
철회 E2E + 감사 로그 확인
BUILD
화면 목록 · API 매핑
총 43화면 · 개발 착수용
INV
전체 화면 인벤토리
화면ID · 진입 경로 · 상태 분기 · 서버 API. 이 표가 곧 작업 목록입니다.
ID
화면명
탭
진입
상태 분기 · 검증
서버 API
T1
인트로
오늘
앱 최초 실행
—
GET /protocol/current/
T1S
안전·적합성 확인
오늘
T1 →
위험 응답 시 참여 보류 분기 · 노출 로깅
POST /screening/
T2
참여 동의
오늘
T1 →
필수/선택 분리
POST /consent/
T3
권한·기기 연결
오늘
T2 →
권한 거부 시 수기입력 모드
—(OS 권한)
T4
준비기간 안내
오늘
T3 →
시작 시 baseline_start 확정
POST /me/baseline/start/
T5
오늘 · 준비기간
오늘
탭1 · S1
걷기 탭 잠금
GET /me/status/
T6
오늘 · 미기록
오늘
탭1 · S3
기본 상태
GET /me/status/
T7
오늘 · 완료
오늘
탭1 · S4
—
GET /me/summary/
T8
오늘 · 12주 종료
오늘
탭1 · S5
연장 선택
GET /me/summary/
W1
걷기 홈
걷기
탭2 기본
최근 코스 없으면 코스찾기로
GET /courses/recent/
W2
코스 선택
걷기
W1 →
선택 전 시작 불가
GET /courses/?near=
W3
세션 진행
걷기
W2 →
자동감지 실패 시 수동 시작
—(로컬)
W4
종료 확인
걷기
W3 →
맨발 아님 선택 시 세션 제외
POST /sessions/
W5
코스 지도
걷기
탭2 · 세그2
필터 상태 유지
GET /courses/?bbox=
W6
코스 상세
걷기
W2·W5 →
등급별 표시 차등
GET /courses/{id}/
W7
코스 등록
걷기
W5 →
C등급 · 검수 대기
POST /courses/
W8
단체 일정
걷기
탭2 · 세그2
지회 소속 없으면 숨김
GET /events/ · POST /events/{id}/checkin/
W9
걸은 기록 캘린더
걷기
탭2 · 세그3
—
GET /sessions/calendar/
W10
걸은 기록 지도
걷기
W9 세그
좌표 미표시(코스 핀만)
GET /sessions/places/
W11
세션 상세
걷기
W9·W10 →
수정 이력 저장
GET /sessions/{id}/
W12
걷기 통계 기간별
걷기
탭2 · 세그4
—
GET /stats/walk/?period=
W13
지면별 비교
걷기
W12 →
표본 5회 미만 숨김
GET /stats/surface/
W14
기록 완결성
걷기
W12 →
랭킹 없음
GET /stats/adherence/
L1
오늘 기록 1/3
내 기록
탭3 기본
자동값 없으면 수기 전환
GET /health/today/
L2
오늘 기록 2/3
내 기록
L1 →
걷기 전/후 분리
—(로컬)
L3
오늘 기록 3/3
내 기록
L2 →
미선택 시 완료 불가
—(로컬)
L3R
제출 전 검토
내 기록
L3 →
품질 플래그 표시 · 제출 차단 없음
—(로컬 검증)
L4
기록 완료
내 기록
L3 →
—
POST /records/day/
L5
지난 기록 캘린더
내 기록
탭3 · 세그2
—
GET /records/calendar/
L6
날짜별 상세
내 기록
L5 →
수정 시 이력 저장
GET /records/{date}/
L7
빠진 날 채우기
내 기록
L5 →
7일 경과 시 차단
POST /records/backfill/
L8
내 변화(잠금)
내 기록
탭3 · 세그3
4주 미만
GET /me/status/
L9
4주·12주 리포트
내 기록
L8 해제 후
—
GET /me/summary/?period=
L10
지표별 상세
내 기록
L9 →
인과 문구 고정
GET /me/summary/{metric}/
M1
더보기 홈
더보기
탭4 기본
—
—
M2
내 정보
더보기
M1 →
가명 ID만 표시
GET /me/
M3
기기 연결
더보기
M1 →
필수 항목 해제 불가
GET /protocol/current/
M4
자료 보내기
더보기
M1 →
실패 시 배너 연동
GET /sync/status/ · POST /sync/run/
M5
알림 설정
더보기
M1 →
기본 ON
PATCH /me/notifications/
M6
연구 참여 정보
더보기
M1 →
철회 3단계
GET /consent/ · POST /consent/withdraw/
M7
도움말·접근성
더보기
M1 →
글씨 크게 즉시 반영
—
SAFE1
안전 안내
공통
위험 응답 시
노출 로깅 필수 · 진단 표현 금지
POST /events/safety-notice/
SAFE2
코디네이터 문의
공통
SAFE1 →
콘솔 안전 큐 최우선 연동
POST /support/safety/
구현 순서 제안1) T1~T5 + L1~L4 (온보딩·준비기간·일일기록) → 이것만으로 기저치 수집이 가능해 파일럿을 돌릴 수 있습니다.
2) W1~W4 + W6 (코스 선택·세션) → 걷기 데이터 수집 개시.
3) L5~L10 · W9~W14 (조회·리포트) → 참여 지속 장치.
4) M1~M7 (설정·법적 플로우) → 단, M6(참여 중단)은 1단계에 함께 넣어야 IRB 요건을 충족합니다. 마찬가지로 T1S(안전 확인)와 SAFE(안전 안내)도 1단계 필수입니다 — 안전 프로토콜 없이 수집을 시작할 수 없습니다.
전역 규칙 · 개발 시 항상 적용
① 모든 POST에 client_uuid를 실어 재전송해도 중복 저장되지 않게 합니다(멱등).
② 위도·경도는 연구 추출 대상에서 제외. 서버 저장은 하되 export에서 빼세요.
③ 화면 문구에 기술 용어(UUID·큐·백오프·HRV 원문)를 노출하지 않습니다.
④ 필수 항목·기간(준비 14일, 최소 4주)은 하드코딩하지 말고 GET /protocol/current/에서 받습니다.
⑤ 모든 필수 변수는 없음/모름/측정 못함/답변 안 함 중 하나를 반드시 저장합니다 — 빈칸(NULL) 금지. 결측의 종류가 곧 분석 정보입니다.
⑥ 측정값에는 출처(자동/수동/수정)·측정 시각·기기 종류를 메타데이터로 함께 저장합니다. 혈압은 3회 평균 여부 포함.
⑦ 프로토콜·설문 변경은 새 버전으로 발행(적용일·참여자 노출 문구 기록)하고, 이미 수집된 데이터에 소급 적용하지 않습니다. 안전 안내 문구에 진단 표현·약 중단 지시는 절대 금지.