블록 추상화
모든 콘텐츠 타입이 블록 조합으로 표현됩니다. 단일 enum + 개별 블록 타입 스키마. 신규 블록 타입 추가 = enum 확장 + 렌더러 1개. DB 마이그레이션 불필요. 업계 유사 패턴: Notion · Gutenberg · Confluence.
QGen 엔진 · 콘텐츠 그리드 · 검증층 · 학습 분류 체계 · 독자 코퍼스 · 평가 관측층 · QGen API. 일곱 레이어가 어떻게 하나로 연결되는지, 한 페이지에서 전체 구조를 보여드립니다.
하나의 엔진, 어떤 모델이든, 어떤 과목이든.
Subject-agnostic. Model-agnostic. Korean-first. Curea의 모든 문제 · 해설 · 변형이 통과하는 파이프라인. Python 3.12 + FastAPI + LangChain + SQLAlchemy 2.0 async 위에 7개 도메인 (generation · batch · qc · embedding · media · shared · model_eval) 이 Clean Architecture 4-layer 로 분리되어 작동합니다. Stamp 1 · Stamp 2 · 교사 도장 통과 후에만 학생에게 도달.
AI에게 자기가 만든 문제를 검수하라고 시키면, 자기 실수를 스스로 눈감아줍니다.— Curea Engineering
AI 하나에게 시험 문제를 통째로 맡기면, 그 AI가 잘 모르는 부분에서 조용히 틀립니다. 더 큰 문제는 — 그 AI에게 자기가 만든 문제를 검수하라고 시키면, 자기 실수를 스스로 눈감아줍니다.
Curea는 그래서 단계마다 다른 AI를 씁니다. 문제를 처음 만드는 AI와 그 문제를 의심하는 AI를 분리하고, 가능하면 서로 다른 벤더나 모델 계열을 배치합니다. 생성 라인의 모델군과 검증 라인의 모델군이 의도적으로 분리되어, 두 라인이 같은 판단 편향을 공유하지 않도록 설계합니다.
단일 모델이 생성과 검증을 겸하면 self-bias가 발생합니다. Curea는 생성 단계와 판정 단계를 분리하고, 판정 특성이 다른 모델 패밀리를 의도적으로 섞어 blind spot을 줄입니다.
빠르고 많이 vs. 느려도 정확. 한 모델이 이 스펙트럼 전체에서 최적일 수 없습니다. AWS Step Functions 기반 상태 기반 워크플로가 단계 전이를 제어하고, 단계마다 맞는 모델이나 프로바이더를 호출합니다.
ABC 베이스 + @lru_cache 싱글톤 위에 실시간 호출은 LangChain, Batch API는 공식 SDK, 이미지·TTS·임베딩이 동일 인터페이스로 다뤄집니다. 어떤 벤더가 어느 단계를 맡고 있는지는 운영 팀이 분기마다 재평가. 모델은 고정 자산이 아니라 교체 가능한 실행 슬롯입니다.
api → application → domain → infrastructure 단방향 의존. 도메인이 인프라를 import 하는 것은 정방향, 그 반대는 금지. 7개 도메인 (generation · batch · qc · embedding · media · shared · model_eval) 이 각각 Controller · UseCase · Service · Provider/Repository 패턴으로 분리되어, 모델·DB·외부 SaaS 교체가 도메인 코드에 영향 없이 가능합니다.
단일 출처. 모든 제품이 같은 그리드에서 읽습니다.
Curea의 모든 콘텐츠는 하나의 그리드에 산다. 풀림이 읽고, 라스쿨이 읽고, 새빛인강이 읽는다. 중복 저장소 금지. 1.2M validated items, 4,800 taxonomy nodes, 한 PostgreSQL 축에 모입니다.
한 덩어리의 콘텐츠가 아니라, 지문 블록 · 선지 블록 · 해설 블록 · 이미지 블록 · 오디오 블록으로 쪼개진 부품. 각각이 독립적이고 교체·재조립이 가능합니다.
그래서 새로운 과목(예: 국어 → 물리)을 추가할 때 시스템을 다시 짓지 않습니다. 블록 한 종류를 더 쓰면 됩니다.
같은 이유로, 문제 한 개에서 시작된 구조가 문제집 · 개념서 · 강의 슬라이드 · 학습 미디어까지 같은 블록 문법으로 확장됩니다.
모든 콘텐츠 타입이 블록 조합으로 표현됩니다. 단일 enum + 개별 블록 타입 스키마. 신규 블록 타입 추가 = enum 확장 + 렌더러 1개. DB 마이그레이션 불필요. 업계 유사 패턴: Notion · Gutenberg · Confluence.
과목은 블록 조합의 프로필일 뿐입니다. 국어 · 수학 · 영어 · 과학 · 사회 · 한국사 모두 동일 스키마 위에서 표현됩니다.
같은 블록이 question · workbook · concept book · slide · shorts 어디서든 ID 참조로 재사용. 풀림 스튜디오(studio 서비스)가 이 조합을 편집하는 레이어.
세 도장. 그렇지 않으면 학습 콘텐츠가 아닙니다.
AI 1차 · AI 2차 (cross-vendor) · verified teacher. 하나라도 빠지면 학생에게 가지 않습니다. soft warning 이 아니라 아키텍처 레벨의 hard gate.
Curea는 하나의 문제에 세 번의 도장을 찍습니다. 하나라도 빠지면 학생에게 가지 않습니다.
빠르고 값싼 모델이 먼저 봅니다. 형식이 맞는지, 명백히 틀린 곳은 없는지, 선지와 지문이 서로 어긋나지 않았는지. 여기서 걸러지면 뒤 단계로 올라가지 못합니다.
1차와 다른 회사 · 다른 성격의 모델이 들어와 의심하며 다시 봅니다. 오답지의 품질, 난이도, 전체가 교육적으로 말이 되는지. 1차에서 놓친 미묘한 결함을 여기서 잡습니다.
두 AI를 모두 통과한 문제는 교사의 책상 위에 올라갑니다. 교사가 “이건 학생에게 줘도 되겠다”고 승인해야 비로소 학생에게 갑니다.
형식 준수, 지문-선지 정합성, 명백한 논리/사실 결함. Stamp 1은 통과·탈락과 무관하게 모든 문항에 적용되는 레이어. 저지연 · 저비용 · 구조화 출력에 강한 모델군이 1차 필터를 맡습니다.
오답지 품질, 난이도 측정, 최종 일관성 · 교육적 적절성. Cross-Vendor 원칙 + 작업 적합성(critique · 비교 · 난이도 판단) + Failure-mode 상보성(생성 라인의 구조화 강점 + 검증 라인의 정성 판단 강점)이 세 가지 이유.
두 AI 도장을 통과한 문제만 교사에게 도달. 교사의 선택은 승인 또는 재생성. 거절 → 새 파이프라인 실행으로 재주입되어 원본은 기록된 채 새 버전이 다시 세 도장을 거칩니다. 교사의 교육적 판단 권한을 아키텍처 레벨에서 보장합니다.
세 도장 중 하나라도 받지 못한 문제는 다음 단계로 넘어가지 못합니다. soft warning이 아니라 hard gate. domain/qc가 BusinessException + ErrorCode 패턴 (QC_EVALUATION_NOT_FOUND 등) 으로 실패를 명시적으로 분류해 다음 라인으로 흐르지 않게 막습니다.
교사의 도장과 재생성 판단은 domain/model_eval로 흘러 신규 모델 자동 적합성 평가 + 인간 피드백의 입력이 됩니다. AI · HUMAN · RLHF × 5차원 매트릭스로 모델 교체 시점을 결정합니다. (Wave 1 · model-eval workstream)
블룸 × 어휘 × 문법. 정량으로 잰 난이도.
"쉬움 / 보통 / 어려움"은 교육학이 아닙니다. Curea 는 블룸 6단계 — 기억 · 이해 · 적용 · 분석 · 평가 · 창조 — 를 직접 매핑하고, 문장 안의 문법 복잡도와 어휘 복잡도를 함께 측정합니다.
“쉬움 / 보통 / 어려움”은 교육학이 아닙니다.
학생이 “단순 암기”에 머물고 있는지, “평가 · 창조” 단계까지 올라왔는지를 시스템이 구분합니다. 그리고 같은 “응용” 단계 안에서도 중학교 2학년용과 고등학교 3학년용을 따로 식별합니다.
2022 개정 교육과정 41 유형 · 1,218 문항 Ground Truth 기준 ±1 등급 일치율 86.8%. 난이도 판정이 “교육학적 감”에 의존하지 않고 정량적으로 교정되어 있습니다.
기억 · 이해 · 적용 · 분석 · 평가 · 창조 — 모든 문제 메타데이터에 포함. 학습 분석 · 개인화 추천의 교육학적 근거.
qc_preprocessing_service.py — 관계절 · 명사절 · 수동태 · 간접화법 분포를 regex로 탐지. OOS 리스트로 목표 학년을 벗어난 어휘 감지.
한국 교육과정 그래프를 PostgreSQL의 LTREE로 계층 관리. qgen-ai 마이크로서비스의 Alembic이 관리하는 9개 Taxonomy 테이블로 구현 — Sovereign · 자체 구축 · 수작업 큐레이션.
다변수 난이도 = 블룸 × 텍스트 복잡도 × 목표 학년 편차. QC Tier 2에서 DIFFICULTY_MISMATCH 판정이 나오면 Retry 큐로 순환합니다.
한국 교육과정 · 자체 구축. 빌려온 것이 아닙니다.
Curea 가 Inventory-First 전략으로 만들어 둔 1.2M 검증 콘텐츠 + 4,800 분류 노드 + 41 유형 1,218 문항 GT. 사용자가 늘어나도 응답 속도와 품질을 안정적으로 유지하는 구조의 원천.
학생이 “문제 주세요” 눌렀을 때 그 순간부터 만들기 시작하면 — 느리고, 비싸고, 품질 편차가 큽니다.
Curea는 대신 미리 만들어 놓은 문제 창고를 둡니다. 수요가 예측되는 유형은 한 번에 수천·수만 건씩 배치 모드로 제작해 창고에 쌓습니다.
창고에 들어가기 전 AI 두 도장은 이미 찍혀 있습니다. 교사가 꺼낼 때 세 번째 도장이 찍히면 그대로 학생에게 갑니다. 학생 입장에서는 “느리게 만들어진 문제”가 아니라 “빠르게 꺼내진 문제”를 받습니다.
속도가 빠른 이유 하나 더 — 반복 수요가 예상되는 유형을 배치로 먼저 만들고 검증합니다. 사용자가 많아져도 학생 요청 시점의 실시간 생성 부담이 커지지 않습니다.
On-Demand 생성이 아닌 배치 사전 생성이 기본. 사용자 요청마다 새로 만드는 구조와 달리, 한번 검증한 재고를 반복 활용하도록 설계되어 운영 부하가 예측 가능합니다.
동일한 Batch Provider 인터페이스로 여러 벤더의 배치 채널을 하나의 추상화로 묶어, 처리량과 안정성이 더 좋은 채널이 등장하면 호출 라우팅을 이동시킵니다.
Keyword Selector → Batch Builder → Batch Poller → QC Pipeline → Main Inventory. Retry Queue가 실패 문항을 실패 사유와 함께 다시 생산 라인으로 돌리고, 모든 생성·검증·교사 도장 이벤트는flywheel_events 테이블에 표준 스키마로 적재되어 데이터 플라이휠 (data-flywheel workstream · shipped)의 입력이 됩니다.
재고 miss 시 실시간 경로로 투명 전환. 교사 입장에서는 두 경로의 차이를 체감할 수 없고, 세 도장 기준은 같습니다.
모든 문항이 재생됩니다. 모든 호출이 감사 가능합니다.
Curea 는 "왜 이 문제가 이렇게 만들어졌는지"를 나중에도 되짚을 수 있게 만들어 둡니다. 어느 모델이, 어떤 프롬프트로, 어떤 지연 시간 안에, 무엇을 만들었는지가 전부 기록에 남습니다.
실패가 재현 가능하면, 재현 가능한 것만 진짜로 고칠 수 있습니다. 관측은 두 층으로 나뉘며, 한 DB 안에서 서로 연결됩니다.
domain/batch 상태 머신이 문제 한 건의 생성·검증· 재시도·아카이브 동선을 기록. 각 단계의 input · output · 상태 전이가 그대로 남습니다.
domain/generation · domain/qc 가 LangChain으로 호출한 모든 LLM 요청을 per-call로 기록 — 프롬프트 · 응답 · 토큰(input · output · cache) · latency.
동일한 session_id로 조인하면 “왜?”라는 질문 하나로 끝까지 따라갈 수 있습니다. PostgreSQL (Supabase · transaction mode port 6543) 한 축에서 SQL 한 줄로 재구성 가능. 외부 SaaS 의존 0.
Step Functions 실행 이력 = auditable event log. 각 Sub Session · Main Session 의 스텝별 input · output · duration · retry · 상태 전이가 보존.
실패한 실행을 특정 스텝부터 리플레이 · 재실행 가능합니다. 실패가 재현 가능해야 진짜 고칠 수 있습니다.
자체 REST API 래퍼를 경유하는 이벤트 드리븐 아키텍처. Helicone · Langfuse 같은 외부 프록시를 두지 않습니다. 관측 데이터 자체가 학습 플라이휠의 입력.
API 단위로 프롬프트 · 응답 · 토큰(input · output · cache hit) · 토큰 · latency · 호출자가 DB에 per-call 기록. P0 로드맵: 골든셋 기반 회귀 감지 확장.
엔진을 라이선스하세요. 자체 브랜드로 운영하세요.
QGen API 는 KB 라스쿨 AI · 새빛인강이 운영 중인 그 엔진 그대로. 다중 벤더 라우팅 계층 위에서 동일한 세 도장 (AI 1차 · AI 2차 · 검증 교사) 을 적용합니다. 파트너 라이선스 기반으로 제공합니다.
파트너 기관이 자체 브랜드로 운영하려 할 때, 콘텐츠 검증과 운영 안정성이 가장 큰 부담입니다. 외부 AI에만 의존하면 출제 품질을 통제하기 어렵고, 자체 시스템을 짓기에는 시간이 부족합니다.
파트너는 Curea의 검증 파이프라인 전체를 호출 가능한 형태로 쓰면서, 학생 화면은 자체 브랜드로 노출합니다. KB 라스쿨 AI · 새빛인강이 이미 같은 구조 위에서 운영 중입니다.
Provider Pattern 기반 multi-tenant 키. 호출 한도와 라우팅 우선순위는 파트너별로 분리.
파트너 호출은 X-Curea-Trace 헤더로 어느 모델이 어느 단계에 들어갔는지 per-call 추적. 동일 데이터가 파트너 자체 분석 도구로도 export 가능합니다.
파트너가 사전 협의한 유형은 Inventory-First 경로로 응답. 미리 검증된 재고에서 즉시 꺼내 파트너의 Stamp 3에 전달합니다.
KB 라스쿨 AI와 새빛인강 운영에서 검증한 트래픽 안정성. 모델 swap 24시간 내, 벤더 장애 자동 fallback.
QGen API · Custom Build · Partner Program. KB 라스쿨 AI · 새빛인강이 이미 같은 구조 위에서 자체 브랜드로 운영 중입니다.