자동화&툴 리뷰

Show GN: 모두의 사과문 — 사고 전에 미리 써두는 사과문 비상 키트 (ModuSorry)

노동1호 2026. 6. 23. 02:01

Show GN: 모두의 사과문(ModuSorry) — 사고 전에 미리 써두는 "사과문 비상 키트"

2026년 6월 현재, 보안 사고는 "일어날지"가 아니라 "언제 일어나는지"의 문제가 됐다. AI가 코딩 속도를 10배로 끌어올린 만큼 취약점을 찾는 시도도 10배가 됐다. 코드 10배 × 프로젝트 10배 × 공격 시도 10배를 곱하면 사고가 터질 확률은 이전 대비 1,000배 수준이라는 주장도 나올 만하다. 실제로 모두의 창업, MS, 티빙, 듀오, 패스트캠퍼스 등 보안 사고 발생 빈도가 빠르게 늘고 있다. "절대 사고 안 나게 하는" 방식만으로는 한계가 있고, "불이 나기 전에 대피 훈련을 받는" 사고 대응 프레임이 필요해졌다.

ModuSorry apology letter security incident preparation

바로 그 출발점에서 등장한 서비스가 모두의 사과문(ModuSorry, https://modusorry.vercel.app) 이다. laeyoung 개발자가 안드레 카파시의 LLM-wiki 스타일 Open Spec 프로젝트로 만든 이 도구는, 평정심이 있는 시점에 사과문 초안과 대응 산출물을 미리 만들어두고, 실제 사고가 터지면 그 초안 위에 구체적 사실만 채워 넣어 1시간 안에 사과문 + 재발방지대책 + 통지문 + 신고 체크리스트까지 묶어내는 워크플로를 제공한다.

  • --

왜 만들었나 — 사고 확률은 10×10×10 = 1,000배

바이브 코딩이 보편화되면서 한 사람이 만드는 프로젝트 수가 폭증했다. 그에 비례해 다음 세 가지가 함께 곱해진다.

  • 코드 10배 — AI로 더 많은 기능을 더 빠르게
  • 프로젝트 10배 — 1인 개발자·소규모 팀의 산출물 증가
  • 공격 시도 10배 — 자동화 스캔, 크리덴셜 스터핑, LLM 에이전트 조작

이 셋을 곱하면 사고가 터질 확률은 10 × 10 × 10 = 1,000배. 통계적으로 "우리 서비스는 안 당한다"는 가정이 더 이상 유효하지 않다. 그래서 등장한 사고 대응 프레임은 두 가지다.

  1. 예방(prevention) — 코드리뷰, 시크릿 스캔, SBOM, 침투 테스트
  2. 대응(response) — 사고가 났을 때 빠르게 사과하고, 통지하고, 재발방지책을 내놓는 것

모두의 사과문은 ②번에 집중한다. 소방 점검이나 대피 훈련처럼, 사고가 나기 전부터 매뉴얼을 만들어두는 게 현실적 대응이라는 발상이다.

  • --

핵심 설계 원칙 — 사과문 vs 변명문

사고가 터진 직후 사람은 방어 본능이 작동한다. 무의식적으로 "~때문에 어쩔 수 없었다" 같은 변명문을 쓰게 된다. 하지만 좋은 사과문의 구조는 이미 잘 알려져 있다.

> 인정 → 책임 → 경위 → 영향 → 현재 조치 → 재발방지 → 연락처

모두의 사과문은 이 7단계 구조와 톤·가치관을 평정심이 있을 때 미리 확정해두고, 사고 시에는 구체적 사실만 채워 넣게 설계했다. 즉 사고 상황에서의 판단력·문장력에 의존하지 않도록 한 것이다.

| 구분 | 변명문 | 사과문 |

| --- | --- | --- |

| 톤 | "~때문에 어쩔 수 없었다" | "우리의 과실로 인해..." |

| 책임 | 회피·축소 | 명확한 인정 |

| 경위 | 모호한 표현 | 사실 조각 기반 시간순 |

| 영향 | 추상적 | 구체적 범위·항목 |

| 향후 | "앞으로 조심하겠다" | 재발방지대책 + 통지·신고 절차 |

  • --

주요 기능 — 6가지 시나리오 + 점수 + 산출물 세트

모두의 사과문은 v1에서 다음 6가지 사고 시나리오를 기본 제공한다.

| 시나리오 | 대상 사건 예시 | 통지 의무 | 사전 예방 |

| --- | --- | --- | --- |

| DB 유출 | 사용자 테이블 평문 노출 | 개인정보보호법 통지·신고 | 컬럼 암호화, 접근 로그 |

| 인증 토큰 노출 | 세션 토큰, API 키 유출 | 영향 사용자 통지 | 토큰 TTL 단축, 회전 |

| 외부 침입 | 랜섬웨어, 백도어 | 침해사고 신고 | EDR, 네트워크 분리 |

| 결제정보 노출 | 카드번호, 빌링키 유출 | PG사·카드사·사용자 통지 | PCI-DSS, 토큰화 |

ModuSorry apology letter security incident preparation

| 제3자 위탁사 사고 | 외주 SaaS 사고 | 위탁사·사용자 통지 | 위탁사 감사, 책임 조항 |

| 소스코드 유출 | 비공개 레포지토리 노출 | 고객·파트사 통지 | 레포 접근 제어, 시크릿 스캔 |

각 시나리오는 설명·예시 문구·통지 체크리스트 프리셋을 함께 제공한다. 사용자는 시나리오를 선택한 뒤 "사실 조각"만 입력하면 AI가 7단계 구조에 맞춰 초안을 생성한다.

핵심 보조 지표는 Lighthouse식 100점 만점 사과문 점수 하나다. 책임 인정·구체성·변명 표현 부재·필수 항목 충족·피해자 관점·톤을 합산해 점수를 매기고, 변명 회피 문장은 하이라이트로 피드백을 준다.

| 점수 구간 | 의미 | 조치 |

| --- | --- | --- |

| 0–49 | 🔴 변명문에 가까움 | 대폭 수정 필요 |

| 50–89 | 🟡 사과문이지만 보완 필요 | 일부 표현 다듬기 |

| 90–100 | 🟢 진짜 사과에 가까움 | 채널별 텍스트 변환 가능 |

  • --

어떻게 쓰나 — 평상시 vs 사고 발생 모드

평상시 — "대피 훈련"

  1. 시나리오 라이브러리에서 사고 유형 선택 (DB 유출, 인증 토큰 노출 등)
  2. 서비스 기본 정보 1회 입력 → 모든 시나리오에서 재사용
  3. 7단계 구조 템플릿에 사실 조각만 입력 → AI 초안 생성
  4. 사과문 점수로 변명 회피 문장 자동 감지·피드백
  5. 완성된 초안을 시나리오별로 저장 → 사고 시 꺼내 쓸 "비상 키트"

실제 사고 발생 시

  1. "사고 발생" 버튼 클릭 → 사고 유형 선택
  2. 두 가지 진입 경로 — (a) 평상시 초안 불러오기 OR (b) 빈 템플릿에서 바로 시작
  3. 이번 사고의 구체 사실만 채워 넣기 (발생 시각, 영향 범위, 유출 항목, 발견 경위)
  4. AI가 산출물 세트 생성 — 사과문 + 재발방지대책 + 개인정보보호법 통지문 + 신고 절차 체크리스트
  5. 사과문을 이메일용·공지용 채널별 텍스트로 변환 후 복사·내보내기 (실제 발송·신고는 사용자가 직접 수행)

> ⚠️ 법적 고지: AI 생성물은 참고용이며 법적 자문을 대체하지 않는다. 법령은 개정되므로 실제 대응 시 최신 기준을 반드시 재확인할 것. 법정 양식 자동 제출·기한 자동 계산은 v1 범위가 아니다.

  • --

기술 스택과 보안 · 프라이버시

Next.js (App Router) · React · TypeScript · Tailwind · Firebase (Auth + Firestore) · OpenAI · Vercel 배포. AI 호출은 Next.js Route Handler(서버 경계)가 담당하며 클라이언트는 이 서버 엔드포인트만 호출한다. OpenAI API 키는 서버 환경변수로만 다루며 클라이언트에 절대 노출되지 않는다.

이 서비스가 다루는 데이터(사고 사실 + 미리 작성한 사과문 초안)는 그 자체로 민감하다. 유출되면 "이 주체가 어떤 사고를 겪었다 / 유출을 대비하고 있었다"는 사실이 드러나기 때문이다. 그래서 "제품이 스스로 자기 사과문 기준을 지킨다(도그푸딩)" 를 설계 가치로 삼았다.

  • 피해자 PII 원본 비입력 원칙 — 사고 사실은 "무엇이·언제·어느 범위"만 기록, 실제 피해 고객의 개인정보 원본은 넣지 않도록 안내
  • 사용자는 초안·사고 기록을 언제든 삭제 가능
  • Firestore 보안 규칙으로 본인 데이터만 read/write
  • --

v1 범위와 비목표

| 포함 | 비목표 |

| --- | --- |

| 평상시 초안 작성·저장 | 사고 자동 감지·연동 |

| 사고 발생 모드 | 자동 발송·신고 제출 |

| 산출물 세트 생성 | 법정 양식 자동화·기한 자동 계산 |

| 채널 변환 | 커스텀 시나리오, 정기 리마인더 |

| 사과문 점수·변명 감지 | 팀 협업·권한, PII 자동 마스킹 |

대상 사고는 고객의 개인정보가 침해되었거나 영구적인 서비스 장애에 한정한다. 일시적 다운타임이나 일반 버그는 대상에서 제외된다. 한국 외 법규·다국어 대응은 v1 범위가 아니다.

  • --

추천 대상

모두의 사과문은 다음 사람에게 특히 유용하다.

  • 별도 보안·법무 인력 없이 개발팀이 사과문을 써야 하는 1인 개발자·소규모 스타트업
  • LLM 에이전트·자동화로 사고 빈도가 급증한 AI 네이티브 제품 운영팀
  • GDPR·개인정보보호법 통지 의무를 한 번도 다뤄본 적 없는 주니어 개발자
  • 사고 매뉴얼을 만들어두고 싶지만 어디서부터 시작할지 모르는 CTO·테크리드

안드레 카파시 LLM-wiki처럼 Open Spec 프로젝트로 공개되어 있어, PRD 문서(MayDay_PRD.md)를 Claude Code나 Codex에 던지고 같은 도구를 직접 만들 수도 있다. 저자 본인은 Fable 5로 oneshot 프롬프트 한 번으로 거의 최종 버전까지 만들어봤다고 한다. 소스 코드 전체는 GitHub Star 31개 이상 시 공개 예정 — 현재 README와 PRD만 공개 상태다.

  • 사고는 반드시 일어난다. 차이는 "당황해서 변명문을 쓰는가" vs "평정심에 만든 매뉴얼로 사과문을 쓰는가"다. 모두의 사과문은 후자를 위한 가장 가벼운 도구다.*