| 항목 | 내용 |
| 기능 ID | FEAT-TRUST |
| 연결 시스템 | 마스터 시스템⑩ 신뢰안전망 · ⑤ 가족연결 · ⑨ 지자체 |
| 한 줄 정의 | 의심 전화·문자·링크를 경고하고, 위험 거래를 차단하며, 가족·기관에 신고한다 |
| 관련 액터 | PWA실벗서버아리가족 |
설계 철학 — 어르신을 노리는 사기는 점점 교묘해집니다. 아리가 "이건 위험해요"라고 먼저 알려주고, 의심스러우면 가족에게 확인하게 만들어 피해를 막습니다.
▍설계 7계층 체크리스트
| 계층 | 이 문서의 섹션 |
| ① UI | 위험 경고 / 신고 화면 SCR-TRUST-01·02 |
| ② Flow | 탐지 → 경고 → 차단/신고 상태 머신 |
| ③ Data | risk_signals / scam_reports / blocklist |
| ④ API | 위험 검사·신고·차단목록 엔드포인트 |
| ⑤ Seq | 의심 링크 검사 → 경고 → 가족 확인 시퀀스 |
| ⑥ Comp | 위험 탐지·차단 모듈 |
| ⑦ Test | 검수 체크리스트 |
② 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 보강·기관 연계
| 모듈 | 책임 |
RiskEvaluator | blocklist 대조 + 사칭 키워드 패턴으로 위험도 산정. 보수적으로(과소평가 금지). |
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계층으로 설계했습니다. 한 사람의 신고가 모두를 지키는 집단 면역 구조입니다.