본문 바로가기
에듀테크

아이마음 휴게소 보건실용 앱 개발 ver. 1.0

by 참리더 2025. 7. 20.
반응형

 

🔐 데이터 보안 중심 보건실 문진 앱 설계안 (v2)

🧩 핵심 개념

요소 설계 의도

학생 응답 데이터 암호화 저장 (AES256 등), 단방향 제출
보건교사만 열람 가능 인증 로그인 후 대시보드 접근
고통 정도 척도화 주관적 표현이 가능한 1~5단계 스케일 도입
구글시트 연동은 배제 자체 DB로 전환 (Firebase Firestore, Supabase 등 추천)

📝 학생용 앱 구성

1. 학생 문진 화면

항목 설명

기본 정보 입력 학년 / 반 / 이름 또는 교번 (선택 가능)
증상 선택 복통, 두통, 열, 외상 등 (다중 선택 가능)
고통 정도 척도 다음과 같이 정의된 1~5 척도 중 택 1:① 불편하지만 참을 수 있음② 약간 아픔③ 지속적인 아픔④ 많이 아픔⑤ 소리 지르며 울고 싶을 정도로 아픔
추가 서술 입력란 (선택) 예: “아침부터 아팠어요”, “급식 후 배가 아팠어요”
제출 후 화면 “문진이 제출되었으며, 보건 선생님께 전달됩니다. 자리에 앉아 대기해 주세요.” 메시지 표시

🛡️ 데이터 처리 및 보안 설계

1. 데이터베이스 보안 구조

항목 내용

데이터베이스 Firebase Firestore or Supabase (선택 가능)
데이터 저장 방식 AES256 또는 Field-Level Encryption 적용
응답 데이터 구조 예시  
{
  "timestamp": "2025-07-20T09:45:00Z",
  "student_hash": "dkf29fa2a9...",  // 익명화 처리
  "grade_class": "4-1",
  "symptoms": ["두통", "기침"],
  "pain_level": 4,
  "memo": "점심 먹고 갑자기 아픔"
}

| 교사 인증 방식 | 이메일/비밀번호 기반 로그인 or 교내 계정 연동 |
| 접근 권한 제어 | 보건교사 외 열람 금지 (Role-based Access Control 적용) |


👩‍⚕️ 보건교사용 웹 대시보드 (로그인 필요)

기능 상세 설명

🔒 로그인 인증 교사 전용 이메일 계정 로그인
📥 실시간 응답 보기 시간순 / 학급별 응답 정렬 및 필터링
📊 고통 수준 알림 고통 척도 4 이상 시 자동 강조 표시 또는 알림 표시
📈 통계 보기 증상별 빈도, 고통 척도 평균 등 간단한 차트 제공
📁 데이터 내보내기 CSV로 익명화된 데이터 다운로드 가능

💡 선택적 추가 기능 (향후 개발 고려)

  • 학생별 ID 대체용 해시 처리 → 개인 정보 비노출
  • 🧠 증상-고통 패턴 분석 → 유사 증상군 자동 그룹화
  • 🔔 긴급 상황 알림 기능 → 고통 척도 5 선택 시 즉시 알림 (앱 푸시 or 메일)
  • 📱 태블릿 설치형 앱 제공 → 오프라인 환경에서 사용 가능하도록 제작 가능

✨ 요약 흐름도

[학생 앱]
  ▼
문진 제출 (고통 척도 포함)
  ▼
암호화된 응답 저장 (Firestore)
  ▼
[교사용 웹]
  ▲
로그인 → 실시간 응답 열람
  ▲
고통 수준 4~5 응답 강조 표시

 


🏥 보건실 문진 앱 Supabase 기반 설계서

앱 이름 (예시): 아이마음 체크인
대상: 초등학교 보건실
개요: 학생이 보건실에서 대기 중 작성하는 문진 응답 데이터를 Supabase에 암호화 저장하고, 보건교사만 로그인해 실시간으로 열람하는 웹/앱


📌 전체 아키텍처 요약

구성 요소 도구/기술

학생 응답 수집 FlutterFlow 또는 Lovably (앱 빌더)
백엔드 데이터 저장 Supabase (PostgreSQL 기반)
인증/보안 Supabase Auth (Role-based Access)
데이터 암호화 클라이언트 측 AES256 → Supabase 저장
관리자 화면 Supabase Dashboard 또는 웹뷰 연결된 관리자 전용 페이지

⚙️ 1단계. Supabase 프로젝트 및 DB 설계

📁 테이블 이름: symptom_responses

필드 이름 타입 설명

id UUID (PK) 자동 생성
timestamp timestamptz 제출 시각
grade integer 학년
class_number integer
student_id_hash text 이름 또는 번호의 해시값 (SHA256 등)
symptoms text[] ["복통", "두통", …] 다중선택
pain_level integer 1~5 척도
memo text 학생이 입력한 설명
encrypted_payload text (옵션) 전체 응답을 암호화한 JSON 문자열

✅ 보안 설정

  • Supabase Auth로 role=teacher만 SELECT 가능
  • insert는 누구나 가능 (학생 앱은 인증 없이 제출)
  • RLS(Row-Level Security) 활성화 및 정책 설정

📱 2단계. 학생용 앱 설계 (무인 문진용)

화면 구성

  1. 학생 정보 선택
    • 학년/반 드롭다운
    • 이름은 입력 대신 “이름 초성 + 번호” → 해시 처리
  2. 증상 선택 화면
    • 다중 선택: 두통, 복통, 열, 외상, 기침, 기타
  3. 고통 정도 척도
    • 1️⃣ 불편하지만 참을 수 있음
    • 2️⃣ 약간 아픔
    • 3️⃣ 지속적으로 아픔
    • 4️⃣ 많이 아픔
    • 5️⃣ 소리 지르며 울고 싶을 정도로 아픔
  4. 기타 입력
    • 메모 자유 입력란
  5. 제출 후 대기 화면
    • 제출 완료 메시지
    • 자동 타이머 후 ‘대기 화면’으로 돌아감

🔐 응답 처리

  • AES256으로 클라이언트에서 pain_level, symptoms, memo를 암호화
  • 또는 전체 JSON {응답내용}을 암호화 후 encrypted_payload에 저장

👩‍⚕️ 3단계. 교사용 관리자 화면 (보건교사 전용)

로그인

  • Supabase Auth 이메일/비밀번호 로그인
  • role=teacher 권한 사용자만 symptom_responses 테이블 열람 가능

기능

기능 설명

📥 실시간 응답 목록 시간순 정렬, 고통 척도 4 이상 강조
🔎 필터링 학년/반별 조회
📊 통계 대시보드 일간 응답 수, 고통 평균 등
🔔 알림 (옵션) 5점 응답 발생 시 푸시알림 (Webhook 가능)
🔒 CSV 내보내기 익명화된 응답만 다운로드 허용

🛠️ 4단계. Supabase 설정 단계 요약 (구현자용)

  1. Supabase 프로젝트 생성
  2. symptom_responses 테이블 생성
  3. RLS 활성화 + 정책 설정 (예: role=teacher만 select 가능)
  4. auth.users 연결 → teacher role 세팅
  5. API 키 또는 service role 키로 FlutterFlow, Lovably 등 연결
  6. .env 설정 공유: SUPABASE_URL, SUPABASE_ANON_KEY

🔒 5단계. 데이터 암호화 방식

항목 방식

이름 또는 고유정보 SHA256 해시로 처리 (복호화 불가, 비교용)
전체 응답 AES256-CBC 방식으로 클라이언트 측 암호화
암호화 키 관리 앱에 Key 저장하지 않고, 서버 호출 후 세션 단위로 전달 (고급 적용 시)
관리자 해독 로그인 인증된 후, 복호화 처리 (별도 함수 필요)

노코드 빌더에서는 전체 암호화 적용이 어려운 경우, 해시 처리 + 민감정보 분리 저장으로 대응 가능


📦 참고용 패키지 및 기술 스택

목적 기술

실시간 DB Supabase Realtime
암호화 CryptoJS (AES256), bcryptjs (Hash)
인증 Supabase Auth
대시보드 UI Retool / Figma 연동 Lovably 화면 or custom Next.js

🎯 구현 요약

  • ✅ 무인 문진 앱 (학생 대기 중 작성 → 자동 저장)
  • ✅ 고통 수준 척도화
  • ✅ Supabase에 암호화 저장
  • ✅ 보건교사만 열람 가능 (로그인 기반)
  • ✅ 데이터 필터링, 알림, 통계 기능 포함
반응형