v0.1 — 2026-08-22

Live2D × LLM × MCP
영속형 AI 캐릭터 플랫폼

Live2D 캐릭터가 사용자와 대화하고, 관계와 기억을 장기 유지하며, 자연어에 따라 표정·동작을 수행하고, 외부 LLM/MCP 클라이언트에서도 같은 캐릭터 인스턴스로 이어지는 플랫폼

CoreCharacter Runtime
VisualLive2D Player
ConnectMCP Gateway

1결론

기술적으로 개발 가능하다. 다만 제품을 다음 세 가지로 분리해야 한다.

⚙️

Character Runtime

캐릭터의 대화, 성격, 관계, 현재 감정, 기억, 행동 계획을 관리한다.

🎭

Live2D Player

Runtime이 생성한 행동 계획을 받아 Live2D 모델의 표정·모션·파라미터·립싱크를 실행한다.

🔗

MCP Gateway

외부 LLM이나 에이전트가 같은 캐릭터의 기억을 조회하고, 대화시키고, 동작을 요청할 수 있게 한다.

MCP 연결 자체가 캐릭터의 기억을 보존하지는 않는다. 최신 MCP 코어는 stateless 구조이므로, character_instance_id, conversation_id, state_revision 같은 명시적 식별자를 매 요청에 전달하고, 실제 기억은 별도 DB와 Wiki 계층에 저장해야 한다.

"자연어로 애니메이션을 생성한다"는 기능은 단계적으로 구현해야 한다.

완전히 새로운 상업 품질의 Live2D 모델을 자연어만으로 자동 리깅하는 기능은 MVP에서 제외한다.

2제품 정의

2.1 사용자가 구매하는 것

사용자가 구매하는 핵심 상품은 단순한 .moc3 파일이나 캐릭터 일러스트가 아니다.

사용자별 기억과 관계를 축적하는 영속형 Character Instance

하나의 캐릭터 템플릿을 여러 사용자가 구매하더라도 각 사용자에게는 별도 인스턴스가 발급된다.

Character Template: LUNA v1.3
├─ User A Instance
│  ├─ User A와의 기억
│  ├─ 친밀도와 관계 상태
│  ├─ 행동 취향
│  └─ 사용자 A가 만든 동작
├─ User B Instance
│  ├─ User B와의 기억
│  ├─ 다른 관계 상태
│  └─ 다른 행동 취향
└─ User C Instance

2.2 제품 구성

구성역할
Character Template공통 외형, 기본 성격, 세계관, 보이스, 모션
Character Instance사용자별 기억, 관계, 현재 상태, 커스텀 설정
Character Runtime대화·기억·상태·행동을 생성하고 검증
Character PlayerLive2D 렌더링, 음성 재생, 표정·모션 실행
Character MCP외부 LLM/에이전트 연결
Creator Studio향후 캐릭터 제작자용 등록·테스트·판매 도구
Character Marketplace향후 템플릿 판매 및 수익 배분

2.3 핵심 차별점

기존 AI 캐릭터 서비스가 대체로 LLM + 프로필 이미지 구조라면, 이 제품은 아래 상태를 하나의 버전 관리 가능한 객체로 묶는다.

Character
├─ Identity
├─ Persona
├─ Lore
├─ User Relationship
├─ Long-term Memory
├─ Current Emotion
├─ Behavioral Preferences
├─ Body Capability Manifest
├─ Motion Library
└─ Voice

LLM 공급자가 바뀌어도 Character Instance는 유지된다.

3MVP 목표와 범위

3.1 MVP가 증명해야 할 가설

💬

가설 1

한 캐릭터가 브라우저에서 자연스럽게 대화하고 말에 맞춰 움직인다.

🧠

가설 2

브라우저를 닫고 다시 접속해도 사용자와의 핵심 기억을 유지한다.

🎬

가설 3

자연어 요청을 표정·모션·파라미터 조합으로 변환할 수 있다.

🔌

가설 4

MCP 클라이언트에서 같은 Character Instance를 호출해 동일한 기억과 성격을 사용할 수 있다.

3.2 MVP 포함 범위

영역MVP 범위
플랫폼Web
캐릭터Live2D 캐릭터 1종
사용자로그인 사용자
대화텍스트 입력 + 스트리밍 답변
음성TTS 1종
립싱크오디오 볼륨 기반
표정8종 내외
기본 모션10~15종
절차적 동작고개, 시선, 몸 기울기 등 제한된 오버레이
기억단기·세션 요약·장기 사실·에피소드
관계친밀도, 신뢰도, 호칭, 선호
LLM Wiki비동기 Wiki 컴파일 또는 어댑터 구조
MCP원격 MCP 서버 + 핵심 Resources/Tools
관리자캐릭터 설정, 기억 열람·삭제, 모션 매핑, 테스트
분석대화 비용, 지연시간, 기억 적중률, 모션 성공률

3.3 MVP 제외 범위

4권장 시스템 아키텍처

flowchart LR U[사용자] --> W[Web Character Player] W -->|Text / Audio Input| API[Character Runtime API] API --> AUTH[Auth & Entitlement] API --> ORCH[Conversation Orchestrator] ORCH --> CTX[Context Builder] CTX --> PDB[(PostgreSQL)] CTX --> MEM[Memory Retrieval] MEM --> VDB[(Vector Index)] MEM --> WIKI[Character Wiki] ORCH --> LLM[LLM Provider Adapter] LLM --> PLAN[Turn Plan Validator] PLAN --> STATE[State Engine] PLAN --> ACTION[Action Engine] PLAN --> TTS[TTS Adapter] STATE --> PDB ACTION --> EVT[Realtime Event Gateway] TTS --> OBJ[(Object Storage/CDN)] EVT -->|WebSocket| W OBJ -->|Audio| W MCP[MCP Gateway] --> ORCH MCP --> MEM MCP --> STATE WORKER[Async Worker] --> WIKI WORKER --> VDB WORKER --> PDB ADMIN[Admin / Creator Console] --> API

4.1 중요한 분리 원칙

MCP는 실시간 렌더링 통신이 아니다

MCP는 캐릭터의 Context, Resources, Tools를 외부 AI 애플리케이션에 연결하는 인터페이스다. 실제 Live2D 프레임 제어는 다음 방식으로 처리한다.

외부 MCP 클라이언트가 Live2D를 직접 렌더링하지 못하더라도, 별도의 Character Player가 연결되어 있으면 해당 Player에 애니메이션 이벤트를 전달할 수 있다.

5권장 기술 스택

5.1 MVP 기본안

계층권장 기술
Web PlayerReact/TypeScript + Live2D Cubism SDK for Web
관리 콘솔Next.js 또는 동일 React 모노레포
APITypeScript + Fastify/NestJS 계열
MCP Server공식 MCP TypeScript SDK
DBPostgreSQL
벡터 검색pgvector 또는 별도 Vector DB
캐시/큐Redis + 작업 큐
오브젝트 저장S3 호환 저장소
실시간 이벤트WebSocket
인증OAuth/OIDC 기반 사용자 인증
원격 MCP 인증OAuth 2.1 + PKCE
관측성OpenTelemetry + 구조화 로그
배포컨테이너 기반
CIMCP Inspector + API/브라우저 자동 테스트

5.2 MVP에서 Unity보다 Web SDK를 우선하는 이유

6Character Package 표준

장기적으로 판매 가능한 캐릭터를 만들려면 파일을 임의 폴더로 관리하면 안 된다. 초기부터 패키지 규격을 정의해야 한다.

character-package/
├─ manifest.yaml
├─ assets/
│  └─ live2d/
│     ├─ model.model3.json
│     ├─ model.moc3
│     ├─ textures/
│     ├─ physics.physics3.json
│     ├─ expressions/
│     └─ motions/
├─ persona/
│  ├─ identity.json
│  ├─ persona.md
│  ├─ dialogue_rules.yaml
│  └─ safety_rules.yaml
├─ lore/
│  ├─ index.md
│  └─ ...
├─ voice/
│  └─ voice.yaml
├─ behavior/
│  ├─ capabilities.yaml
│  ├─ action_map.yaml
│  └─ idle_rules.yaml
├─ rights/
│  └─ rights_manifest.yaml
└─ checksums.json

6.1 manifest.yaml 예시

spec_version: character-package/0.1
template_id: luna
template_version: 1.0.0
display_name: Luna
locales: [ko-KR]

assets:
  live2d_model: assets/live2d/model.model3.json

persona:
  identity: persona/identity.json
  system_rules: persona/persona.md
  dialogue_rules: persona/dialogue_rules.yaml

voice:
  config: voice/voice.yaml

behavior:
  capabilities: behavior/capabilities.yaml
  action_map: behavior/action_map.yaml

rights:
  manifest: rights/rights_manifest.yaml

6.2 capabilities.yaml 예시

LLM이 Live2D 파라미터 이름을 직접 생성하지 않게 한다. 먼저 의미 기반 제어 명칭을 정의하고 모델별 파라미터에 매핑한다.

semantic_controls:
  head_yaw:
    live2d_parameter: ParamAngleX
    min: -30
    max: 30
    max_velocity: 60
  head_pitch:
    live2d_parameter: ParamAngleY
    min: -20
    max: 20
  gaze_x:
    live2d_parameter: ParamEyeBallX
    min: -1
    max: 1
  body_yaw:
    live2d_parameter: ParamBodyAngleX
    min: -10
    max: 10

expressions:
  - neutral
  - happy
  - sad
  - angry
  - surprised
  - shy
  - thinking
  - tired

motions:
  - idle_01
  - greet
  - nod
  - shake_head
  - wave
  - laugh
  - think
  - look_away
  - celebrate
  - disappointed

이 구조를 사용하면 모델마다 실제 파라미터 구성이 달라도 Runtime은 head_yaw, gaze_x 같은 공통 의미만 사용한다.

7캐릭터 컨텍스트와 기억 구조

7.1 컨텍스트 계층

계층내용저장 방식LLM 포함 방식
Identity이름, 존재 설정, 금지 변경 항목버전 파일/DB항상
Persona말투, 가치관, 대화 규칙버전 파일/DB항상
Lore세계관, 캐릭터 과거Wiki관련 항목만
Relationship호칭, 친밀도, 신뢰, 경계DB항상 요약
Current State감정, 에너지, 현재 행동DB/캐시항상
Session Buffer최근 대화DB최근 N턴
Session Summary현재 세션 압축DB필요 시
Episodic Memory함께 겪은 사건DB/벡터관련 항목
Semantic Memory안정된 사용자 사실Wiki/DB관련 항목
Behavior Preference선호 표정·말투·금지 행동DB항상 또는 관련 시
Motion Skill학습·저장된 동작DB/Asset요청 시

7.2 매 턴 생성하는 CharacterContextBundle

{
  "character_instance_id": "ci_01...",
  "template_version": "1.0.0",
  "state_revision": 142,
  "identity": {},
  "persona": {},
  "relationship_summary": {},
  "current_state": {},
  "session_summary": "...",
  "recent_messages": [],
  "retrieved_memories": [],
  "retrieved_lore": [],
  "behavior_preferences": [],
  "capability_manifest": {},
  "safety_policy": {},
  "context_hash": "sha256:..."
}

이 번들은 한 턴 동안 불변으로 취급한다. 응답이 잘못됐을 때 어떤 컨텍스트로 생성됐는지 재현할 수 있다.

7.3 메모리 저장 원칙

모든 대화를 장기 기억으로 저장하면 안 된다. 대화 후 비동기 Memory Extractor가 다음 항목만 후보로 추출한다.

각 메모리에는 근거가 필요하다.

{
  "memory_id": "mem_...",
  "type": "user_preference",
  "subject": "user",
  "predicate": "likes",
  "object": "cafe latte",
  "confidence": 0.91,
  "importance": 0.72,
  "source_message_ids": ["msg_123"],
  "created_at": "...",
  "valid_from": "...",
  "valid_to": null,
  "status": "active"
}

사용자가 나중에 "나는 라떼를 안 좋아해"라고 정정하면 기존 기억을 삭제하는 대신 superseded 처리하고 새 사실을 활성화한다.

7.4 기억 검색 점수

retrieval_score =
  semantic_similarity × 0.45
+ recency             × 0.15
+ importance          × 0.20
+ relationship_value  × 0.10
+ explicit_pin        × 0.10

7.5 LLM Wiki 적용 방식

Raw Events
Character Wiki
Character Schema

권장 운영

외부 오픈소스 LLM Wiki를 핵심 런타임에 직접 묶지 않는 이유

따라서 MVP에서는 동일한 개념을 자체 DB에 구현하고, 외부 LLM Wiki는 선택형 Adapter로 둔다.

8대화 턴 처리 파이프라인

sequenceDiagram participant U as User participant P as Character Player participant R as Runtime API participant M as Memory Engine participant L as LLM participant A as Action Engine participant T as TTS participant D as DB participant W as Wiki Worker U->>P: 사용자 입력 P->>R: POST /turns R->>D: Character Instance/State 조회 R->>M: 관련 기억 검색 M-->>R: memories + lore R->>L: CharacterContextBundle L-->>R: TurnPlan R->>A: ActionPlan 검증 R->>D: 메시지/상태/Event 저장 R-->>P: 텍스트 스트림 + 초기 행동 R->>T: 음성 생성 T-->>P: audio URL/stream P->>P: 립싱크 + 모션 재생 R->>W: 메모리 후보/위키 정리 작업 W->>D: 장기 기억과 Wiki 업데이트

8.1 TurnPlan 예시

{
  "assistant_text": "왔어? 오늘은 조금 늦었네. 그래도 기다리고 있었어.",
  "emotion": {
    "primary": "joy",
    "intensity": 0.72,
    "secondary": "relief"
  },
  "action_plan": {
    "expression": { "id": "happy", "weight": 0.85, "fade_ms": 250 },
    "base_motion": { "id": "greet", "priority": 60 },
    "overlays": [
      { "control": "head_yaw", "from": 0, "to": -8, "duration_ms": 600 },
      { "control": "gaze_x", "from": 0, "to": 0.25, "duration_ms": 400 }
    ]
  },
  "state_updates": [
    { "field": "relationship.familiarity", "operation": "add", "value": 0.1 }
  ],
  "memory_candidates": [],
  "safety_flags": []
}

8.2 LLM의 권한 제한

LLM은 다음을 직접 수행하지 못한다.

LLM은 오직 제안된 TurnPlan을 반환한다. Runtime Validator가 스키마, 권한, 범위, 속도, 충돌을 확인한 뒤 실행한다.

9자연어 애니메이션 구조

9.1 MVP: Action Composition

사용자 입력:

"조금 삐친 것처럼 고개를 옆으로 돌리고 흘겨봐."

LLM 출력은 직접 .motion3.json을 만드는 대신 의미 기반 행동을 생성한다.

{
  "expression": "annoyed",
  "base_motion": "look_away",
  "overlays": [
    {"control": "head_yaw", "target": -16, "duration_ms": 500},
    {"control": "gaze_x", "target": 0.6, "duration_ms": 350},
    {"control": "body_yaw", "target": -5, "duration_ms": 700}
  ],
  "hold_ms": 900,
  "return_to": "idle"
}

Runtime이 모델별 Capability Manifest를 읽고 실제 Live2D 파라미터로 변환한다.

9.2 모션 우선순위

우선순위종류
100안전·강제 중지
90시스템 전환
80사용자 명시 동작
70대화 강조 동작
60감정 반응
50기본 모션
40시선 추적
30호흡·눈 깜빡임
20물리 효과
10Idle 변형

9.3 2단계: Motion DSL

motion_draft:
  id: sulky_glance_v1
  duration_ms: 1800
  loop: false
  tracks:
    - control: head_yaw
      keys:
        - {t: 0, value: 0, easing: ease_out}
        - {t: 500, value: -16, easing: ease_out}
        - {t: 1300, value: -16, easing: linear}
        - {t: 1800, value: 0, easing: ease_in}
    - control: gaze_x
      keys:
        - {t: 0, value: 0}
        - {t: 400, value: 0.6}
        - {t: 1300, value: 0.6}
        - {t: 1800, value: 0}
  constraints:
    max_velocity: true
    clamp_to_manifest: true
    collision_check: true
Natural Language
Motion Intent
Motion DSL
Schema Validation
Model Capability Mapping
Preview
Approval
Saved Motion Skill

MVP에서는 DSL 생성·저장을 실험 기능으로 두고, 자동 게시하지 않는다.

10Live2D Player 구현

10.1 Player 기능

렌더링

모델 로딩, 기본 Idle, 자동 눈 깜빡임, 호흡

애니메이션

표정 전환, 모션 재생, 절차적 Parameter Overlay

음성

TTS 오디오 재생, 볼륨 기반 립싱크

시스템

이벤트 큐/우선순위, 상태 복구, Capability 검사, 연결 끊김 시 안전한 Idle 복귀

10.2 이벤트 예시

{
  "event_id": "evt_...",
  "turn_id": "turn_...",
  "character_instance_id": "ci_...",
  "type": "character.render",
  "payload": {
    "text": "반가워.",
    "expression": {"id": "happy", "fade_ms": 250},
    "motion": {"id": "greet", "priority": 60},
    "audio": { "url": "signed-url", "duration_ms": 2160 },
    "lip_sync": { "mode": "volume" }
  }
}

10.3 업데이트 순서

Base Motion
Expression
Procedural Overlays
Eye Blink / Gaze
Lip-sync
Physics
Model Update
Render

10.4 립싱크 단계

MVP

향후

11MCP 설계

11.1 MCP의 역할

11.2 최신/구형 MCP 호환

MVP 서버는 가능하면 다음 두 프로토콜 시대를 지원한다.

내부 서비스는 항상 stateless API로 구현하고, MCP Adapter만 프로토콜 차이를 흡수한다.

11.3 모든 상태 호출에 필요한 식별자

{
  "character_instance_id": "ci_...",
  "conversation_id": "conv_...",
  "actor_id": "user_...",
  "player_session_id": "player_...",
  "expected_state_revision": 142,
  "idempotency_key": "..."
}
식별자용도
character_instance_id어떤 캐릭터 인스턴스인지
conversation_id어떤 대화 흐름인지
actor_id권한 검증 대상
player_session_id어느 Live2D Player에 보낼지
state_revision동시 수정 충돌 방지
idempotency_key재시도 시 중복 응답·중복 과금 방지

11.4 MCP Resources

character://instances/{id}/profile
character://instances/{id}/state
character://instances/{id}/relationship
character://instances/{id}/capabilities
character://instances/{id}/memory/index
character://instances/{id}/memory/{memory_id}
character://instances/{id}/motion-library
character://templates/{template_id}/lore/{page}

11.5 MCP Tools

P0

character.turn
character.get_context
character.get_state
character.search_memory
character.play_motion
character.set_expression
character.remember
character.forget
character.list_capabilities

P1 이후

character.create_motion_draft
character.preview_motion
character.save_motion_skill
character.change_outfit
character.export_instance
character.clone_instance
character.invite_character

11.6 character.turn 입출력 예시

입력

{
  "character_instance_id": "ci_...",
  "conversation_id": "conv_...",
  "message": "오늘 기분 어때?",
  "player_session_id": "player_...",
  "locale": "ko-KR",
  "response_mode": "text_audio_action"
}

출력

{
  "turn_id": "turn_...",
  "text": "오늘은 네가 와서 꽤 좋아졌어.",
  "emotion": {"primary": "joy", "intensity": 0.7},
  "action_plan": {},
  "audio_url": "signed-url",
  "state_revision": 143
}

11.7 MCP Apps 활용

MCP Apps 지원 호스트가 늘어나면 Live2D Character Player를 MCP Tool의 UI로 제공할 수 있다. 다만 MVP는 호스트별 지원 차이를 피하기 위해 독립 Web Player를 기준으로 하고, MCP App은 후속 호환 기능으로 둔다.

11.8 인증과 권한

character:profile:read
character:state:read
character:chat
character:memory:read
character:memory:write
character:animation:control
character:instance:export
character:admin

원격 MCP는 OAuth 2.1 + PKCE를 적용한다. character_instance_id만 안다고 접근할 수 없게 하고, 토큰의 사용자·테넌트·Scope와 인스턴스 소유권을 모두 검사한다.

12데이터베이스 구조

12.1 핵심 테이블

사용자 및 판매

users organizations entitlements subscriptions usage_ledger

캐릭터

character_templates character_template_versions character_instances character_instance_settings character_assets character_rights

대화

conversations messages turns turn_context_snapshots

상태와 관계

character_state relationship_state state_events behavior_preferences

기억

memories memory_sources memory_embeddings memory_revisions memory_contradictions wiki_pages wiki_links wiki_build_jobs

애니메이션

expressions motion_assets motion_skills motion_drafts action_events player_sessions

보안·감사

oauth_clients mcp_tokens audit_logs consent_records deletion_jobs

12.2 중요한 모델 분리

character_template          — 공통 성격·세계관·자산
character_template_version  — 업데이트 가능한 버전
character_instance          — 특정 사용자가 소유한 캐릭터
character_instance_state    — 사용자별 관계·기억·감정·설정

템플릿 업데이트가 사용자의 기억을 덮어쓰면 안 된다.

12.3 이벤트 소싱 적용 범위

모든 것을 완전한 이벤트 소싱으로 만들 필요는 없지만 다음 항목은 이벤트를 남긴다.

현재 상태는 Snapshot으로 저장하고, 감사·복구에 필요한 이벤트를 별도 보존한다.

13API 및 실시간 채널

13.1 REST/HTTP API

POST   /v1/characters/{instanceId}/turns
GET    /v1/turns/{turnId}
GET    /v1/characters/{instanceId}/state
GET    /v1/characters/{instanceId}/memories
POST   /v1/characters/{instanceId}/memories
DELETE /v1/characters/{instanceId}/memories/{memoryId}
POST   /v1/characters/{instanceId}/players
POST   /v1/characters/{instanceId}/motions/preview
GET    /v1/characters/{instanceId}/capabilities
POST   /mcp

13.2 WebSocket

WS /v1/player-sessions/{playerSessionId}/events

이벤트 종류:

turn.started
text.delta
emotion.changed
expression.play
motion.play
parameter.overlay
audio.ready
audio.sync
state.updated
turn.completed
turn.failed

13.3 재시도와 중복 방지

최신 MCP HTTP는 요청 실패 시 재호출될 수 있으므로, 모든 쓰기성 Tool/API에는 idempotency_key를 요구한다.

14저장소 구조

character-platform/
├─ apps/
│  ├─ web-player/
│  ├─ admin-console/
│  ├─ api/
│  ├─ mcp-server/
│  └─ worker/
├─ packages/
│  ├─ character-schema/
│  ├─ character-package/
│  ├─ live2d-adapter/
│  ├─ action-engine/
│  ├─ motion-dsl/
│  ├─ memory-engine/
│  ├─ wiki-compiler/
│  ├─ llm-adapter/
│  ├─ tts-adapter/
│  ├─ auth/
│  └─ observability/
├─ infra/
│  ├─ docker/
│  ├─ migrations/
│  └─ deployment/
├─ tests/
│  ├─ conversation-consistency/
│  ├─ memory-recall/
│  ├─ action-plans/
│  ├─ mcp-contract/
│  └─ security/
└─ docs/

15MVP 개발 단계

15.1 Phase 0 — 기술 검증 스파이크

목적: 전체 제품을 만들기 전에 가장 위험한 연결만 검증한다.

구현

Go/No-Go 기준

15.2 Phase 1 — MVP 본개발

기반

Live2D Player

대화 Orchestrator

기억

음성·행동

MCP

관리자와 안정화

QA와 비공개 베타

16개발 인력과 규모

16.1 권장 팀

역할인원핵심 업무
Tech Lead / AI Backend1Orchestrator, Memory, MCP, 아키텍처
Frontend / Live2D1Player, WebSocket, 립싱크, 애니메이션
Backend / Infra1DB, Auth, Queue, Storage, 운영
Live2D Artist/Rigger0.5표준 파라미터, 모션·표정 제작
Product/QA0.5시나리오, 평가셋, 테스트

16.2 개발 난도

기능난도이유
Live2D 모델 표시공식 SDK와 샘플 활용 가능
표정·모션 실행자산 규격과 우선순위 필요
볼륨 립싱크Web Audio 연동
일반 LLM 대화공급자 Adapter로 해결
장기 기억추출·모순·삭제·회상 평가 필요
MCP 연결중상인증·호환·상태 식별자 필요
자연어 모션 조합모델별 파라미터·충돌 제어
자유 Motion 생성매우 상품질·안전·검수 파이프라인 필요
자동 리깅R&D모델링·Deformer·Keyform 자동화 문제

17MVP 완료 기준

17.1 기능 기준

17.2 품질 목표

지표목표
ActionPlan 스키마 통과율99% 이상
유효하지 않은 파라미터 실행0건
30개 기억 평가셋 Recall@585% 이상
명시적 사용자 사실 회상 정확도90% 이상
사용자 간 기억 누출0건
p95 첫 텍스트 응답3초 이내
p95 첫 음성 재생5초 이내
Player 이벤트 유실률1% 미만
기억 삭제 반영즉시 또는 1분 이내

17.3 데모 시나리오

  1. 사용자: "나는 제주에 살고 라떼를 좋아해."
  2. 캐릭터가 웃으며 고개를 끄덕이고 답변
  3. 브라우저 종료
  4. 새 대화에서 "내가 어디 살지?" 질문
  5. 캐릭터가 제주를 정확히 회상
  6. 사용자: "삐친 것처럼 옆을 보고 말해."
  7. 캐릭터가 표정과 고개·시선을 조합해 반응
  8. 외부 MCP 클라이언트에서 같은 Character Instance 호출
  9. 동일한 기억과 관계 상태로 응답
  10. 사용자 설정에서 라떼 기억 삭제 후 재질문
  11. 삭제된 기억을 더 이상 확정 사실로 사용하지 않음

18테스트 전략

18.1 대화 일관성 테스트

각 테스트는 다음을 고정한다.

18.2 기억 테스트

18.3 행동 테스트

18.4 MCP 계약 테스트

19보안·개인정보·안전

19.1 기억은 사용자 데이터다

필수 기능:

19.2 Prompt Injection 방어

Wiki와 사용자 기억은 신뢰할 수 없는 데이터로 취급한다.

19.3 상태 핸들 보안

20Live2D 라이선스 선행 과제

이 사업은 여러 캐릭터 모델을 추가·판매하고 하나의 서비스에서 접근하게 할 계획이므로 Live2D의 Expandable Application 분류에 해당할 가능성이 매우 높다.

Live2D 공식 설명은 다음 유형을 Expandable Application 예시로 들고 있다.

따라서 다음을 Phase 0에서 바로 진행한다.

  1. Live2D에 서비스 구조 사전 문의
  2. MVP 비공개 검증과 상용 공개의 경계 확인
  3. Expandable Application 심사·계약 조건 확인
  4. 캐릭터 판매 매출과 런타임 구독 매출의 라이선스 산정 방식 확인
  5. Creator Marketplace의 권리·수익 배분 구조 확인
  6. 이용약관에 필요한 Live2D 고지 문구 확인

이 항목은 기술 개발보다 먼저 법무·사업 리스크로 관리한다.

21주요 리스크와 대응

리스크영향대응
Live2D Expandable Application 승인/비용매우 큼Phase 0 사전 문의
장기 기억이 틀리게 고착근거·신뢰도·정정·삭제 모델
사용자 간 기억 누출치명적테넌트 격리, 권한 테스트
자연어 모션 품질 불안정의미 기반 제한 스키마부터 시작
응답과 음성 지연스트리밍, 비동기 기억 처리
LLM 비용 증가Context Budget, 요약, 캐시
특정 LLM 종속Provider Adapter
TTS/보이스 권리상업 이용 계약과 권리 Manifest
캐릭터 원저작권 분쟁업로드 검증, Rights Manifest
MCP 클라이언트별 호환 차이최신/레거시 Adapter, Inspector CI
Wiki Prompt Injection데이터/지시 분리, 구조화 Context
자동 생성 모션이 모델을 깨뜨림범위·속도 제한, Preview, 승인

22MVP 이후 상세 로드맵

Phase 2 — Private Beta / 다중 캐릭터

Phase 3 — Creator Studio

Phase 4 — Natural-language Motion Studio

Phase 5 — Marketplace

Phase 6 — 외부 생태계 SDK

Phase 7 — 외형 생성과 반자동 리깅 R&D

  1. 기존 Rig에 호환되는 색상·액세서리 변경
  2. 준비된 레이어 의상 교체
  3. 템플릿 Rig 기반 헤어·의상 생성
  4. 레이어 분리 자동화
  5. 파라미터 매핑 보조
  6. 사람 검수 기반 반자동 리깅
  7. 장기적으로 자동 Rig 연구

완전 자동 생성보다 먼저 호환 가능한 모듈형 Character Package를 만드는 것이 사업적으로 안전하다.

23판매 및 과금 구조 초안

23.1 수익원

상품과금
Character Template1회 구매
Character Instance Runtime월 구독
장기 기억 용량구독 등급
음성 사용량포함량 + 초과 사용
MCP/APICreator/Developer 요금제
추가 Motion/Expression개별 판매
Creator Marketplace판매 수수료
Brand CharacterB2B 구축·운영
Game NPC RuntimeMAU/호출량 기반

23.2 MVP부터 수집할 원가 데이터

LLM input tokens
LLM output tokens
Embedding calls
Memory retrieval count
Wiki build count
TTS characters
Audio seconds
Storage bytes
CDN transfer
Average turn latency
Active Character Instances
Turns per active user
Memory count per instance

캐릭터 판매 가격보다 월간 Runtime 원가와 재방문율이 사업성 판단에 더 중요하다.

24즉시 착수 백로그

Sprint 0

첫 구현 순서

  1. Web Player에서 Live2D 표시
  2. 코드로 Expression/Motion 호출
  3. WebSocket 이벤트로 호출
  4. LLM이 ActionPlan 생성
  5. Validator로 안전하게 실행
  6. TTS와 립싱크
  7. DB에 대화·상태 저장
  8. Memory Retrieval
  9. MCP character.turn
  10. 관리자 기억·모션 테스트 UI

25최종 권고

MVP의 핵심 IP는 다음 네 가지다.

Character Context Bundle

LLM이 바뀌어도 같은 캐릭터를 유지하는 컨텍스트 계약

Character Package Standard

외형·성격·보이스·동작·권리를 묶는 판매 단위

Natural-language Action Engine

자연어를 안전한 Live2D 행동으로 변환

Persistent Character Instance

사용자별 기억과 관계를 장기간 보존

LLM Wiki는 영속 기억을 사람이 읽을 수 있는 지식으로 정리하는 계층이고, MCP는 이 Character Runtime을 다른 AI와 연결하는 표준 인터페이스다.

즉, 제품의 본체는 LLM Wiki도, MCP도, Live2D도 단독으로는 아니다.

본체는 이 세 기술을 하나의 사용자별 Character Instance로 결합하는 Character Runtime이다.

26공식 기술 근거

상세 개발 계획서 보기 →

Character Runtime — MVP 기획 및 개발 계획서 v0.1

2026-08-22