말로 들려주면 캐릭터·삽화·내레이션까지 자동 생성하는 모바일 PWA
StoryMine은 아이가 말로 들려준 이야기를 받아, 아이를 닮은 주인공 캐릭터를 만들고, 페이지마다 삽화를 그리고, 목소리로 읽어주는 모바일 우선 동화책 PWA입니다. 한국어와 영어를 지원하며, "한 번 만들면 끝나는 장난감"이 아니라 책장·시리즈·다운로드·과금까지 갖춘 하나의 작은 서비스로 설계했습니다.
말하기/입력 설계 집필 삽화 + 낭독(동시) 리더
(STT·사진) ─▶ 이야기 구조 ─▶ 페이지 글 ─▶ gpt-image-1 ┐ 자동 넘김
아이 이름·나이 (gpt-5.4) (gpt-5.4) Neural TTS ┘─▶ 저장 ─▶ ◀ 이전/다음 ▶
┌──────────────────────────── Azure ────────────────────────────┐
모바일 브라우저 │ │
(PWA, 단일 HTML) │ Container Apps (FastAPI) │
│ HTTPS │ │ 키리스(Managed Identity, AAD 토큰) │
└───────────┼─────▶│──▶ Azure OpenAI gpt-5.4 (이야기 설계·집필) │
│ │──▶ Azure OpenAI gpt-image-1 (페이지 삽화) │
│ │──▶ Azure AI Speech Neural TTS (페이지 음성) │
│ │──▶ (vision) 멀티모달 — 사진→캐릭터 묘사, 사진 미저장 │
│ │ │
│ └──▶ PostgreSQL Flexible Server (키리스/MI) │
│ · 사용자·세션·책·페이지·사용량(과금) │
│ · assets 테이블(BYTEA): 표지·삽화·음성 바이트 │
└────────────────────────────────────────────────────────────────┘
assets 테이블(BYTEA) 에 저장하고, 앱이 /api/assets/...로 프록시해 내보냅니다(브라우저가 스토리지에 직접 접근하지 않음).| 구성 | 역할 | 메모 |
|---|---|---|
| Azure OpenAI gpt-5.4 | 이야기 설계 + 페이지 집필 + 사진→캐릭터 묘사(vision) | 키리스(AAD) |
| Azure OpenAI gpt-image-1 | 페이지 삽화 1024² | 텍스트 앵커로 캐릭터 일관성 유지 |
| Azure AI Speech (Neural TTS) | 페이지 음성 낭독(SSML) | ko/en 프리셋 보이스, 키리스(resource_id) |
| Container Apps | FastAPI 호스팅(스케일 0~N) | 이미지는 ACR |
| PostgreSQL Flexible | 책·페이지·사용량 + 에셋 바이트 | 키리스(MI), 자산까지 한 곳 |
이미지 모델에는 페이지 간 동일 인물을 보장하는 seed가 없습니다. 그래서 vision이 만든 영어 캐릭터 묘사(anchor) 를 모든 페이지 프롬프트 앞에 고정으로 붙여 같은 주인공을 유지합니다. 대신 페이지마다 "이 장면의 핵심 행동·배경·카메라 앵글을 다르게"를 강제해 그림이 스토리 진행을 적극적으로 반영하도록 했습니다(비슷비슷한 그림 방지).
삽화와 음성은 페이지 간 독립적이라 ThreadPool로 동시에 생성합니다(동시성 조절 가능). 8~16페이지를 순차로 그리면 수 분이 걸리지만, 병렬화로 체감 대기를 크게 줄였습니다. "만드는 동안 다른 책을 보거나 또 만들 수 있게" 비동기 진행 UX와 짝을 이룹니다.
OpenAI·Speech·DB 모두 키 없이 AAD 토큰/Managed Identity로 접근합니다. 키 유출·로테이션 부담이 없고, 환경변수에 비밀이 없습니다.
중앙 거버넌스가 스토리지 publicNetworkAccess를 주기적으로 잠그는 환경입니다. 에셋이 모두 앱 프록시(브라우저가 스토리지에 직접 안 감)라는 점을 이용해, 이미지·음성 바이트를 Postgres assets(BYTEA) 로 옮겨 거버넌스와 무관하게 동작하도록 했습니다. URL은 그대로 유지됩니다.
아이 사진은 캐릭터 묘사를 만드는 순간에만 쓰고 즉시 폐기합니다. 보관 항목은 로그인 계정 + 아이 별명(이름) + 글로 된 캐릭터 설명뿐이며, 썸네일은 사진이 아니라 이름 기반 익명 아바타(SVG) 로 만듭니다. 시작 시 과거에 저장됐던 사진 자산도 자동 삭제합니다.
책·아이 프로필·사용량은 모두 로그인 user_id로 격리됩니다(다른 사람 책장이 섞이지 않음). 과금은 무료(평생 1권) / $9(월 10권) / $19(월 30권) 로, 사용량 테이블로 월 한도를 강제합니다(개발 중에는 한도를 크게 열어둠).
아동 대상 서비스라 데이터 보호가 1순위입니다.
규제 수치·요건은 시점에 따라 바뀔 수 있어 공식 출처(
law.go.kr,pipc.go.kr) 확인을 전제로 합니다.
키리스 Azure AI(스토리·삽화·음성) + Container Apps + Postgres 위에, 개인정보 최소화(사진 미저장) 와 병렬 생성으로 빠른 체감을 핵심 가치로 얹은, 아이가 주인공인 개인용 동화 서비스입니다.