사이드프로젝트 slecs

하루 만에 범죄예방 교육 플랫폼 RAW를 만든 이유

목차

새벽에 RAW 만들기 시작했다

오전 2시. 친구한테서 카톡이 왔다.

"야 벌금형 받았을 때 교육 이수 증명서 만들어야 하는데 어디서 해? 다 이상해 보여."

그 한 마디가 시작이었다. 잠이 달아났다. 아침까지 기존 사이트 10개쯤 뒤졌다.

보면 볼수록 불편했다

범죄예방 교육 시장, 꽤 크다. 그런데 이상했다.

"한국○○센터", "○○연구원" — 공공기관처럼 보이는 이름들. 문장 스타일도 공문서를 흉내냈다. 강사가 누구인지 나와있는 곳이 없었다. 수료증 양식은 관공서 도장을 연상시켰다.

표시광고법상 명시적 거짓말은 아닐 수 있다. 하지만 오해하게 만드는 구조다. 법원이 "이 교육을 인정한다"고 한 적도 없는데, 홍보 문구는 그 선을 아슬아슬하게 건드렸다.

불편함이 확신이 됐다. 이걸 정면으로 거부하는 걸 만들자.

정직 모델이라는 차별화

세 가지 원칙을 정했다.

첫째, 홈페이지 첫 줄에 "RAW는 사설 교육기관입니다"를 박는다. 효력 재량도 명시한다. 수강자가 알고 선택해야 한다.

둘째, 강사 자격을 공개한다. 임상심리사, 상담사 — 이름과 자격증이 보여야 한다.

셋째, HMAC 서명 수료증. QR 스캔하면 서버에서 서명 검증. 위조 불가, 제출처에서 바로 진위 확인 가능.

JPA를 갈아엎은 이유

기술 결정에서 가장 많이 고민한 부분이었다.

처음엔 Spring Boot + JPA로 시작했다. 도메인이 명확하고 관계도 단순해서 자연스러운 선택이었는데 — DB가 두 개였다. raw_dbinsightflow. JPA 멀티 데이터소스 설정이 복잡하고, 수료증 HMAC 검증이나 진행률 집계처럼 SQL을 직접 제어하고 싶은 부분이 많았다.

갈아엎는 데 두 시간 걸렸다. MyBatis로 전환하고 나서는 두 데이터소스를 명확하게 분리하고, 쿼리 하나하나를 내 손으로 제어할 수 있었다. 결과적으로 맞는 결정이었다.

AI 의견서 — 사람이 마지막에 있어야 한다

claude-haiku-4-5로 의견서 초안을 자동으로 뽑는다. 수강자가 워크북을 제출하면 30~60초 안에 초안이 나온다.

그런데 그걸 그대로 수료증에 붙이진 않는다. 강사가 검토하고 서명한다. Human-in-the-loop.

AI가 의견서를 완성한다는 구조는 처음부터 배제했다. 법적 효력이 있는 문서에 AI 단독 판단이 들어가면 안 된다고 생각했고, 지금도 그 생각은 변하지 않았다.

프롬프트는 few-shot과 안전 가드레일을 포함한 v2로 개선했다. 과도하게 유리한 서술, 사실 확인 불가 내용은 시스템 프롬프트 수준에서 막는다.

워커 협업이 없었으면 하루는 불가능했다

executor, writer 에이전트를 병렬로 돌렸다. 나는 의사결정만 했다.

  • executor: Spring Boot 골격 → MyBatis 전환 → 보안 취약점 수정
  • writer: 홈페이지 카피, 이 글

하루 만에 풀스택이 가능했던 건 이 구조 덕분이다. 코드를 한 줄 한 줄 짜는 데 시간을 쓰는 게 아니라 무엇을 만들지 계속 생각할 수 있었다.

보안 — Codex가 잡아낸 것들

Codex 보안 감사를 돌렸다. 빠르게 만들다 보면 놓치는 게 생기니까.

CRITICAL 4개가 나왔다. 결제 완료 API 인증 누락, 수료증 소유권 검증 부재, 결제 idempotent 키 미적용, DB 비밀번호 하드코딩. 당일 다 잡았다.

HIGH 7개는 우선순위 정해서 처리 중이다.

흥미로운 건 — 회색지대에서 운영 중인 사이트들이 이런 걸 챙기는지 의문이라는 거다. 결제와 개인정보를 다루면서.

아직 남은 것들

기술은 올라갔다. 사람이 더 필요하다.

임상심리사를 찾고 있다. 워크북을 제대로 설계하고 의견서를 검토할 사람. 변호사도 필요하다. 콘텐츠 표현 검수용.

포트원 결제와 PASS 본인인증 계약은 진행 중이다. 1~2주.

사업자 형태도 아직 결정 못 했다. 비영리 사단법인 vs 주식회사. 교육기관 신뢰성을 택할지, 투자 유치 가능성을 택할지.

새벽 2시 카톡 한 통이 여기까지 왔다. 다음 새벽엔 뭘 결정하게 될지 모르겠다.

  • 라이브: https://raw.hedvion.com/
  • GitHub: https://github.com/hedvionCorp/raw

댓글 0

첫 댓글 달아줘.