10

신뢰안전망

기능설계 ⑩ — 보이스피싱·사기로부터 어르신을 지킨다

항목내용
기능 IDFEAT-TRUST
연결 시스템마스터 시스템⑩ 신뢰안전망 · ⑤ 가족연결 · ⑨ 지자체
한 줄 정의의심 전화·문자·링크를 경고하고, 위험 거래를 차단하며, 가족·기관에 신고한다
관련 액터PWA실벗서버아리가족
설계 철학 — 어르신을 노리는 사기는 점점 교묘해집니다. 아리가 "이건 위험해요"라고 먼저 알려주고, 의심스러우면 가족에게 확인하게 만들어 피해를 막습니다.

설계 7계층 체크리스트

계층이 문서의 섹션
① UI위험 경고 / 신고 화면 SCR-TRUST-01·02
② Flow탐지 → 경고 → 차단/신고 상태 머신
③ Datarisk_signals / scam_reports / blocklist
④ API위험 검사·신고·차단목록 엔드포인트
⑤ Seq의심 링크 검사 → 경고 → 가족 확인 시퀀스
⑥ Comp위험 탐지·차단 모듈
⑦ Test검수 체크리스트

① UI · 화면 명세

위험 경고 화면 SCR-TRUST-01

영역요소 / 동작
큰 경고 배너🚨 "이건 사기일 수 있어요!" 빨간 풀스크린, 큰 글씨·음성
위험 설명"○○은행을 사칭한 문자예요. 링크를 누르지 마세요"
안전 액션"무시하기" / "가족에게 물어보기" / "신고하기" 큰 버튼

신고 화면 SCR-TRUST-02

영역요소 / 동작
간편 신고의심 번호/링크 자동 첨부, 한 번 탭으로 신고
가족 알림"가족에게 알릴까요?" → 가족이 함께 확인

② Flow · 탐지·경고·차단

의심 신호 입력 위험도 평가 경고 표시 차단/신고 / 가족 확인

위험도 단계

레벨예시동작
높음(차단)알려진 피싱 번호·링크접근 차단 + 풀스크린 경고 + 가족 자동 알림
중간(경고)금융 사칭 의심 문구경고 배너 + "가족에게 물어보기" 권유
낮음(안내)광고성가벼운 안내

③ Data · DB 스키마

MariaDB · UTF8MB4 · InnoDB
CREATE TABLE blocklist ( id BIGINT PRIMARY KEY AUTO_INCREMENT, kind ENUM('phone','url','keyword'), value VARCHAR(255), level ENUM('high','mid','low') DEFAULT 'high', source VARCHAR(40), -- '경찰청','신고','내부' UNIQUE KEY uq_block (kind, value) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE risk_signals ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, kind ENUM('phone','url','sms','keyword'), raw VARCHAR(255), level ENUM('high','mid','low'), action ENUM('blocked','warned','ignored'), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE scam_reports ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, signal_id BIGINT, status ENUM('reported','forwarded','closed') DEFAULT 'reported', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
설계 포인트 — 신고는 blocklist를 키운다(집단 면역). 한 어르신이 당한 사기는 모든 회원을 보호하는 데이터가 된다.

④ API · 엔드포인트 명세

M경로설명
POST/trust/check전화/문자/링크 위험도 검사
POST/trust/report사기 신고(가족·기관 연계)
GET/trust/blocklist차단목록 동기화(단말 캐시)
POST /api/v1/trust/check · 200
{ "success":true, "data":{ "level":"high", "action":"blocked", "message":"○○은행 사칭 문자예요. 링크를 누르지 마세요!", "notify_family":true } }

⑤ Seq · 의심 링크 → 경고 → 가족 확인

PWA
의심 문자/링크 감지(공유·붙여넣기) → POST /trust/check
실벗
blocklist 대조 + (중간) 키워드 패턴 평가 → 위험도 산정
PWA
high면 접근 차단 + 풀스크린 경고(음성)
실벗
notify_family면 가족에게 "어머니에게 의심 문자가 왔어요" 알림
가족
함께 확인 → 안심/신고. 신고 시 blocklist 보강
오프라인 가드 — 단말은 blocklist 캐시를 보유해 서버 없이도 1차 차단. 새 위협은 온라인 시 동기화.

⑥ Comp · 컴포넌트 / 모듈 구조

프론트엔드 (PWA)

features/trust/ ├─ RiskWarning.js # 풀스크린 경고 ├─ ReportView.js # 간편 신고 └─ blocklistCache.js # 단말 1차 차단 캐시

백엔드 (PHP)

app/ ├─ Controllers/TrustController.php └─ Services/ ├─ RiskEvaluator.php # blocklist+패턴 위험도 └─ ReportService.php # 신고→blocklist 보강·기관 연계
모듈책임
RiskEvaluatorblocklist 대조 + 사칭 키워드 패턴으로 위험도 산정. 보수적으로(과소평가 금지).
ReportService신고를 blocklist에 반영해 전체 회원 보호(집단 면역).

⑦ Test · 검수 체크리스트

ID시나리오기대 결과
T-01알려진 피싱 링크 검사level=high, 접근 차단 + 풀스크린 경고
T-02금융 사칭 의심 문구level=mid, 경고 + "가족에게 물어보기"
T-03위험 감지 + 가족 알림가족에게 함께 확인 알림 발송
T-04신고 접수blocklist 보강, 다른 회원도 보호
T-05오프라인 상태로 차단 링크 접근단말 캐시로 1차 차단 동작
T-06정상 링크 검사오탐 없이 통과(level=low/none)
완료 판정 — T-01~T-06 통과 시 FEAT-TRUST 완료. T-05(오프라인 차단)·T-06(오탐 방지)가 신뢰의 핵심.
기능설계 ⑩ 완성 — 신뢰안전망을 7계층으로 설계했습니다. 한 사람의 신고가 모두를 지키는 집단 면역 구조입니다.