🏠 홈 🛠️ 웹툴
설문지
📋 상세 🔑 로그인
🏠 홈 🛠️ 웹툴 목록 📋 상세 🔑 로그인
기능 보강 · 클라이언트 + 서버 대시보드

근처 참여자 · 설문 알림 · 무보행일 기록
그리고 운영 대시보드

클라이언트에 3가지 기능을 더하고, 그렇게 쌓인 데이터를 운영자·연구자가 감시하는 대시보드를 설계합니다. 핵심은 셋 다 연구 데이터를 오염시키지 않으면서 참여를 끌어올리는 방식으로 구현하는 것입니다.

DOCUX-EXT+DASH
REVv0.1 / DRAFT
CLIENT12 화면
SERVER6 화면
설계 축 프라이버시 PRIVACY 편향 통제 BIAS 응답률·품질 RESPONSE 개인 내 대조 CONTROL
KEY

세 기능에 대한 핵심 판단

요청을 그대로 구현하지 않고, 연구 설계와 충돌하지 않는 형태로 바꿨습니다.

요청그대로 하면바꾼 설계얻는 것
5km 내 걷는 친구 수 실시간 위치 상시 수집 → 재식별 위험 최상위
사회적 압박 → 좋은 날만 걷는 편향
위치 대신 코스 체크인 기반
"황성공원에 지금 8명"
+ 지회 단위 집계
GPS 없이 동일 효과 · 프라이버시 비용 0
"어디로 가면 사람이 있다"는 실용 정보
특정 시간 설문 발송 응답만 저장 → 3시간 뒤 답한 것과
즉시 답한 것이 같은 데이터로 섞임
알림→응답 지연(latency) 기록
기한 경과 시 자동 '무응답' 저장
실시간 응답과 회상 응답을 분리 가능
응답률이 참여자 품질 지표가 됨
안 걸은 날 상세 상태 항목만 늘면 입력 부담↑ → 완결률↓
데이터 품질은 항목 수가 아니라 완결률
계층 입력(없음 1탭 / 있으면 상세)
+ 안 걸은 날도 몸·마음 상태 필수
개인 내 대조 성립 — 같은 사람의
걸은 날 vs 안 걸은 날 비교
가장 큰 수확 세 번째가 이 보강의 진짜 가치입니다. 안 걸은 날 데이터가 상세할수록 같은 사람 안에서 대조군이 생깁니다. 개인차(나이·기저질환·생활습관)가 자동으로 통제되므로, 참여자 수가 적어도 통계적 검정력이 올라갑니다. 단 조건이 있습니다 — 안 걸은 날에도 몸 상태·마음 상태를 똑같이 받아야 비교가 성립합니다.
반드시 기록해야 할 것 근처 참여자 표시와 설문 알림은 둘 다 행동을 유발합니다. 유발된 걷기는 자연 관찰이 아닙니다. 그래서 넛지 노출 여부(nudge_shown)와 알림 발송 이력을 세션·기록에 함께 저장해야, 연구자가 "알림 받고 걸은 날"을 분석에서 통제할 수 있습니다. 이걸 빼면 나중에 되돌릴 수 없습니다.
PART A

클라이언트 보강 — 3가지 기능

안드로이드 · 12 화면
A-MAP

기능이 붙는 위치

새 탭을 만들지 않습니다. 기존 4탭 안에 흡수시켜 초보자 부담을 늘리지 않습니다.

기능붙는 위치새 화면수집 데이터동의 필요
근처 참여자오늘 탭 카드 + 걷기 탭 코스 목록A1~A4course_presence, nudge_shown선택 동의(끄기 가능)
설문 알림푸시 → 전용 응답 화면 (탭 무관)A5~A8survey_response, latency_sec기존 동의 범위
무보행일 상세내 기록 탭 · 3단계 확장A9~A12daily_context(음주·흡연·회식…)민감정보 별도 고지
A-01

근처 참여자 — 위치 없이 구현

코스 체크인 데이터만으로 "지금 어디에 몇 명"을 계산합니다.

9:41● ● ●
A1 · 오늘 탭 · 근처 카드
4주차 · 26일째
🚶 지금 근처에서 12명이 걷고 있어요
황성공원 8명 · 중랑천 4명
오늘 기록하기2분 · 아직 안 했어요
걷기 시작황성공원 · 1.2km
노출 기록됨 nudge_shown
오늘
걷기
내 기록
더보기
넛지 로깅이 카드가 보였는지·눌렀는지를 저장합니다. 연구자가 "알림 보고 걸은 날"을 분리할 수 있어야 합니다.
9:41● ● ●
A2 · 근처 현황
지금 걷고 있는 분들
누구인지는 표시되지 않아요. 인원만 보여드립니다.
황성공원 천년 맨발길8
중랑천 맨발 황톳길4
○○근린공원표시 안 함
5명 미만인 곳은 표시하지 않아요
(누구인지 짐작될 수 있어서요)
k-익명성 5 PRV-04
이 시간대 평균 보기
k-익명성시골 코스에서 "지금 1명"은 그 사람이 누구인지 특정됩니다. 임계값(5명) 미만은 아예 숨기세요. 이건 선택이 아니라 필수 요건입니다.
9:41● ● ●
A3 · 지회 · 시간대
지금시간대우리 지회
시간대별 사람
시간대 막대그래프
06시 ▓▓▓▓ · 07시 ▓▓▓▓▓▓
아침 6~7시에 가장 많아요
우리 지회 오늘24
이번 주 참여18 / 32
개인 순위는 표시하지 않습니다
랭킹 없음
집계만지회 단위 참여 인원은 보여주되 개인 순위는 절대 만들지 않습니다. 앞서 정한 반(反)리더보드 원칙 유지.
9:41● ● ●
A4 · 참여 현황 공유 설정
내 참여 현황 공유
더보기 › 연구 참여 정보 안에 있습니다.
인원 집계에 포함켜짐
지회 현황에 포함켜짐
공유되는 것 : 걷는 중인 코스, 걸은 시각

공유되지 않는 것 : 이름, 위치 좌표,
건강 정보, 기록 내용
공유 끄기
꺼도 연구 참여에는 영향 없어요
분리 동의연구 참여 동의와 별개의 선택 동의입니다. 껐다고 불이익이 없다는 점을 명시해야 강압적 동의가 되지 않습니다.
A-02

설문 알림 — 응답 지연까지 측정

알림 발송 → 응답 → 전송. 언제 답했는지가 응답 내용만큼 중요합니다.

19:00● ● ●
A5 · 알림 도착
잠금화면
맨발걷기 시민과학지금
오늘 저녁 설문이 도착했어요
3문항 · 1분이면 됩니다. 2시간 안에 답해주세요.
탭 → 설문 화면 직행
발송 시각19:00
응답 기한21:00
발송시각 저장 sent_at
매일 같은 시각에 보냅니다
고정 시각 권장연구적으론 무작위 시각이 예측 편향을 줄이지만, 중장년 참여자는 고정 시각의 응답률이 훨씬 높습니다. 순응도를 우선하세요.
19:04● ● ●
A6 · 설문 응답
1 / 3 · 저녁 설문
지금 몸이 어떠세요?
아주 좋음좋음 보통나쁨아주 나쁨
답을 고치셔도 됩니다
설문 문항은 서버에서 내려옵니다
(연구 프로토콜과 동일 원칙)
다음2 / 3
문항은 서버에서설문 정의를 앱에 넣지 마세요. GET /surveys/{'{'}id{'}'}/로 받아 렌더링해야 연구 중간에 문항을 바꿀 수 있습니다.
19:06● ● ●
A7 · 확인 후 전송
이렇게 보낼게요
몸 상태좋음
기분보통
오늘 걸었나요네 · 31분
알림 받고 6분 뒤 답하셨어요
빠른 응답일수록 정확한 자료가 됩니다
지연 기록 latency 360s
보내기수정하려면 뒤로
고치기
지연이 곧 데이터 품질알림→응답 간격을 저장하면, 분석 시 즉시 응답(30분 이내)만 골라 민감도 분석을 할 수 있습니다. 이 필드 하나가 논문의 방어력을 크게 높입니다.
21:00● ● ●
A8 · 미응답 처리
답하지 못한 설문이 있어요
괜찮습니다. 못 한 것도 기록으로 남습니다.
어제 저녁 설문무응답
기한이 지난 설문은 답할 수 없어요.
그 시점의 상태를 묻는 것이라
나중에 답하면 정확하지 않습니다.
이번 주 응답률5 / 7
무응답도 저장 no_response
알림 시각 바꾸기
기한 후 입력 차단사후 응답을 허용하면 회상 데이터가 실시간 데이터로 위장됩니다. 차단하고 무응답으로 저장하는 편이 정직합니다.
A-03

무보행일 상세 — 대조군 만들기

걷지 않은 날에도 같은 항목을 받습니다. 그래야 비교가 됩니다.

9:41● ● ●
A9 · 안 걸은 날 진입
오늘은 걷지 않으셨군요
괜찮아요. 안 걸은 날의 기록이 오히려 더 중요합니다. 걸은 날과 비교할 수 있으니까요.
이유 (선택)
날씨몸이 안 좋아서 시간이 없어서약속·일정그냥
몸 상태와 마음 상태는
오늘도 기록해 주세요
대조군 데이터 CTL-01
오늘 상태 기록하기걸은 날과 같은 항목이에요
카피가 설계다"왜 안 걸었나요"가 아니라 "안 걸은 날 기록이 더 중요합니다". 질책하는 순간 사람들은 기록 자체를 안 하고, 그 결과가 생존자 편향입니다.
9:41● ● ●
A10 · 오늘 있었던 일 (계층 1)
3 / 3 · 오늘 있었던 일
몸 상태에 영향을 준 일이 있나요?
있어요 없어요
어떤 일인가요? (여러 개 가능)
담배회식·모임 야근여행·외출잠 부족 아픔·감기약 복용스트레스
항목 더 보기
다음고른 항목만 자세히
계층 입력"없어요" 한 번이면 끝납니다. 있는 사람만 상세로 진입하므로 대다수의 입력 시간이 늘지 않습니다.
9:41● ● ●
A11 · 정도 입력 (계층 2)
얼마나 드셨어요?
대략이면 충분해요.
1~2잔3~5잔 6잔 이상기억 안 남
마신 시각
점심저녁밤늦게
회식·모임
2시간 이내2~4시간4시간 이상
정확한 숫자보다 구간이 낫습니다
기록 완료수고하셨어요
구간 입력"몇 잔"을 정확히 기억하는 사람은 없습니다. 구간 선택이 정확도도 높고 입력도 빠릅니다. '기억 안 남'도 유효한 답으로 둡니다.
9:41● ● ●
A12 · 완료 · 대조 안내
✓ 오늘도 기록 완료
안 걸은 날도 기록됐어요
이번 달 걸은 날20
안 걸은 날 (기록됨)6
기록 안 한 날1
걸은 날과 안 걸은 날을 비교하면
맨발걷기의 효과를 더 정확히
알 수 있어요
개인 내 대조 CTL-02
동기 부여안 걸은 날 기록이 왜 가치 있는지를 참여자에게 설명합니다. 이유를 알면 계속 기록합니다.
PART B

서버 대시보드 — 수집 감시와 관리

Django · 웹 · 6 화면
B-MAP

대시보드가 답해야 할 질문

화면을 기능이 아니라 질문 단위로 설계했습니다.

질문화면핵심 지표조치
오늘 데이터가 제대로 들어오나?D1 메인활성 참여자 · 수신 레코드 · 전송 실패장애 원인 추적
설문이 잘 걷히고 있나?D2 설문 운영응답률 · 평균 지연 · 무응답발송 시각 조정
데이터에 편향이 끼고 있나?D3 품질 감시무보행일 기록률 · 교란변수 입력률참여자 독려
누가 이탈하려 하나?D4 참여자 관리연속 미기록 · 순응도 하락개별 연락
걸은 날과 안 걸은 날이 다른가?D5 대조 분석보행일 vs 무보행일 지표 차가설 탐색
논문용 데이터를 어떻게 빼나?D6 내보내기추출 조건 · 감사 이력CSV 생성
D-01

메인 대시보드

운영자가 아침에 열어 30초 안에 이상 유무를 판단하는 화면입니다.

https://research.barefoot.kr/dashboard/ 운영자

2026 봄 코호트 · 오늘

7월 23일 09:41 기준 · 자동 새로고침 5분
활성 참여자
1,284
오늘 기록
1,012 79%
오늘 걷기
741
설문 응답률
83%
전송 실패
14
시간대별 수신 레코드 스트림 (24시간)
06~08시 피크 · 현재 정상 범위

지금 확인이 필요한 것

구분내용규모영향조치
전송인증 만료로 업로드 실패14명데이터 지연푸시 발송
품질무보행일 기록률 임계 미달코호트 전체 9%생존자 편향 위험안내 발송
설문어제 19시 발송분 응답률 저조61%표본 축소시각 조정 검토
참여7일 이상 미기록23명이탈 임박개별 연락
설계 원칙메인 화면에 차트를 많이 올리지 마세요. 운영자가 필요한 건 "오늘 뭐가 문제인가"입니다. 상단 5개 지표 + 조치가 필요한 항목 목록이면 충분하고, 분석은 하위 화면으로 보냅니다.
D-02

설문 운영 · 응답 지연 감시

응답률만 보면 안 됩니다. 언제 답했는지가 데이터 가치를 결정합니다.

https://research.barefoot.kr/surveys/ 연구자

저녁 설문 (매일 19:00)

3문항 · 응답 기한 2시간
발송
1,284
응답
1,066 83%
평균 지연
18
30분 초과 응답
241
응답 지연 분포 히스토그램
0~10분 ▓▓▓▓▓▓ · 10~30분 ▓▓▓ · 30분+ ▓▓
발송일응답률평균 지연즉시응답(≤30분)무응답판정
07-2283%18분77%218양호
07-2161%47분52%500저조
07-2085%15분81%193양호

발송 설정

발송 시각
19:00
응답 기한
2시간
문항 버전
v2
즉시응답률이 진짜 지표7월 21일은 응답률 61%인데 평균 지연이 47분입니다. 응답한 사람마저 늦게 답했다는 뜻이라, 그날 데이터는 분석에서 별도 취급해야 합니다.
D-03

품질 감시 · 참여자 관리

편향이 끼는 것을 조기에 잡고, 이탈 직전 참여자를 찾아냅니다.

https://research.barefoot.kr/quality/ 연구자

무결성 지표

4주차 · 임계값 미달 항목 강조
원칙지표현재임계추세판정
정직성무보행일 기록 비율9%≥ 10%미달
맥락교란변수 입력 완료율81%≥ 90%주의
일관성혈압 측정 시각 편차±22분≤ 30분양호
최소기간4주 이상 연속 참여68%≥ 70%주의
편향 통제넛지 노출 후 걷기 비율34%모니터링관찰

이탈 위험 참여자

참여자마지막 기록순응도무보행 기록설문 응답조치
P-0040776일 전41%0건29%연락 필요
P-0042108일 전38%2건14%연락 필요
P-0039951일 전72%0건91%편향 주의
두 종류의 위험P-004077은 이탈 위험(기록을 안 함)이고, P-003995는 편향 위험(성실한데 무보행 기록이 0건 = 걸은 날만 기록)입니다. 성격이 다르니 조치도 달라야 합니다 — 전자는 독려, 후자는 "안 걸은 날도 기록해 달라"는 안내.
D-04

대조 분석 — 새 기능이 만든 화면

무보행일 상세 데이터가 쌓이면 이 화면이 연구의 중심이 됩니다.

https://research.barefoot.kr/analysis/within-subject/ 연구자

걸은 날 vs 안 걸은 날 (개인 내 비교)

동일 참여자 내 비교 · 교란변수 보정 전/후
분석 대상자
862
보행일
18,204
무보행일
5,911
교란변수 보정
적용
지표보행일 평균무보행일 평균차이음주일 제외 시비고
수면 시간6h 48m6h 21m+27분+31분일관
HRV 주간평균34.231.8+2.4+3.1일관
스트레스(1~10)4.15.0−0.9−0.7일관
기분(1~10)7.06.2+0.8+0.5약화
교란변수별 층화 보기
[음주] [회식] [야근] [잠 부족] [아픔] · 각 조건 제외 시 효과 변화
주의관찰 데이터입니다. 인과가 아니라 연관이며, 걷지 않은 이유(아픔 등)가 역인과일 수 있습니다.
이 화면이 왜 중요한가같은 사람 안에서 비교하므로 나이·성별·기저질환·생활습관이 자동 통제됩니다. 여기에 교란변수(음주·회식)로 층화까지 하면, RCT 이전 단계에서 낼 수 있는 가장 강한 관찰 증거가 됩니다. 단 역인과(아파서 안 걸었다)를 반드시 함께 검토해야 합니다.
API

추가되는 API

기존 설계에 더해지는 엔드포인트와 저장 필드입니다.

기능엔드포인트메서드핵심 필드비고
근처 참여자/presence/nearby/GETcourse_id, count5명 미만 코스는 응답에서 제외
근처 참여자/presence/heartbeat/POSTcourse_id, session_active좌표 전송 없음 · 세션 중에만
넛지 로깅/events/nudge/POSTtype, shown_at, clicked편향 통제용 · 필수
설문/surveys/pending/GETsurvey_id, sent_at, deadline문항 정의 포함
설문/surveys/{id}/respond/POSTanswers, responded_at, latency_sec기한 초과 시 400
설문/surveys/{id}/miss/POSTreason=timeout무응답도 레코드로 저장
무보행일/records/day/POSTwalked=false, no_walk_reason, context[]기존 엔드포인트 확장
상세 맥락/records/day/POSTalcohol_level, smoking, gathering_hours…구간값 저장 · 민감정보 분류
대시보드/admin/dashboard/summary/GETkpi[], alerts[]5분 캐시
대시보드/admin/surveys/stats/GETresponse_rate, latency_dist일자별
대시보드/admin/quality/metrics/GETintegrity[], risk_participants[]임계값은 설정에서
대시보드/admin/analysis/within/GETwalk_vs_nowalk, stratify_by무거운 쿼리 · 야간 집계 권장
저장 시 주의음주·흡연은 민감정보입니다. 동의서에 항목을 명시하고, 연구 추출 시 가명 ID와만 결합하세요. ② presence는 보관하지 마세요. 실시간 집계용이므로 TTL(예: 30분)로 자동 소멸시키고 이력을 남기지 않습니다 — 남기는 순간 위치 이력이 됩니다. ③ 넛지 로그는 연구 데이터의 일부로 취급해 내보내기에 포함시킵니다.