RPT-024 위젯 생성 프롬프트 고도화 전략

작성: 우드(AIO) + CTL(개발팀장) | 2026-03-31 | T3 개발팀

1. 현황 분석

1.1 현재 워크플로우 AS-IS

사용자 입력 ("삼성전자 주가 대시") │ ▼ [Stage 1] 의도 파싱 (LLM) ─→ type: info, category: finance, features: [stock, price] │ ▼ [Stage 2] 질문 생성 (LLM) ─→ 2-3개 질문 + 선택지 │ ▼ 사용자 답변 수집 (텔레그램: 직접 / Creator: 자동 응답) │ ▼ [Stage 4-B] 위젯 HTML 생성 (LLM) ├── 시스템 프롬프트: widget_prompt.md (16,883자) ├── 유저 프롬프트: 사이즈 + 콘텐츠 가이드 + 의도 + 답변 └── 출력: JSON {html, reason, explanation} │ ▼ 후처리: sanitize → wrap_full_page → playground 저장 → 스크린샷

1.2 현재 문제점

문제원인영향
컴포넌트 선택이 LLM 임의사용자가 원하는 컴포넌트를 지정할 수 없음차트가 없거나 불필요한 요소 포함
분야별 전문성 부족모든 카테고리에 동일 프롬프트 사용금융 위젯에 날씨 스타일, 건강 위젯에 금융 스타일
레이아웃 고정사이즈별 1가지 레이아웃만 가이드비주얼 다양성 부족
Creator 자동 응답질문 단계를 "자동"으로 건너뜀텔레그램 대비 퀄리티 저하
데이터 현실성 부족LLM이 임의 숫자 생성"123", "78" 같은 의미없는 값

2. 유스케이스 분류 체계

2.1 1차 분류: 도메인 (8대 카테고리)

도메인대표 유스케이스핵심 컴포넌트액센트 컬러
금융 (Finance)주가, 환율, 코인, 포트폴리오라인 차트, 캔들스틱, 등락폭, 전일종가선#E53935 (상승) / #1A73E8 (하락)
날씨 (Weather)현재 날씨, 주간 예보, 미세먼지온도 커브, 날씨 아이콘(SVG), 습도 바, UV 인덱스#2196F3
건강 (Health)운동, 수면, 심박수, 칼로리원형 프로그레스, 바 차트, 목표 달성률, 링#4CAF50
생산성 (Productivity)할일, 캘린더, 타이머, 메모체크리스트, 프로그레스 바, 카운트다운, 태그#FF9500
교통 (Commute)지하철, 버스, 네비, 도착예정타임라인, 경로 표시, 도착 카운트다운, 노선 컬러#9C27B0
미디어 (Media)음악, 팟캐스트, 뉴스, 영상앨범아트(placeholder), 프로그레스 바, 웨이브폼#E040FB
비즈니스 (Business)매출, 재고, 고객, 카페 메뉴바 차트, 파이 차트, KPI 카드, 테이블#FF5722
라이프 (Lifestyle)취미, 반려동물, 요리, 독서프로그레스 링, 카운터, AI 메시지, 일러스트#00BCD4

2.2 2차 분류: 컴포넌트 풀 (Component Pool)

컴포넌트설명적합 사이즈SVG 필요
Area Chart베지어 커브 + 그래디언트 fill + 엔드포인트Medium, Large, XLYes
Line Chart스파크라인, 트렌드 표시Small 이상Yes
Bar Chart수직/수평 바, 비교 데이터Medium 이상Yes
Progress Ring원형 프로그레스 (달성률, 배터리)Tiny 이상Yes
Progress Bar선형 프로그레스Widesmall 이상No
Detail Grid2-3열 데이터 카드Medium 이상No
Badge/Tag카테고리 식별 뱃지Medium 이상No
Icon Container28px 컬러 박스 + SVG 아이콘Tiny 이상Yes
Timeline세로 타임라인 (교통, 일정)Large 이상No
Checklist체크박스 리스트Medium 이상No
Waveform오디오 파형 시각화Widesmall 이상Yes
Refresh Button26px 원형 새로고침Medium 이상Yes
Grid Lines차트 배경 격자선Large 이상Yes
Reference Line전일종가, 목표선 (점선)Large 이상Yes

2.3 사이즈 × 컴포넌트 매트릭스

컴포넌트TinySmallWSMediumLargeXL
Icon Container
H1 Number
Badge
Refresh Button
Sparkline
Area Chart
Grid Lines
Reference Line
Detail Grid✅(2)✅(3-4)✅(3-5)
X-axis Labels✅(4)✅(5)
Progress Ring
Timeline

3. 제안 워크플로우 TO-BE

사용자 입력 ("삼성전자 주가 대시") │ ▼ S1 의도 파싱 (LLM) ├── type: info ├── category: finance ├── features: [stock, price, chart, change] └── NEW: suggested_components: [area_chart, badge, detail_grid, reference_line, change_indicator] │ ▼ S1.5 컴포넌트 자동 선정 (NEW) ├── 도메인 × 사이즈 매트릭스 조회 ├── LLM이 5개 핵심 컴포넌트 선정 + 이유 ├── 사이즈별 가용 컴포넌트 필터링 └── 출력: {components: [...], reasoning: "..."} │ ▼ S2 사용자 확인 (레이아웃 베리에이션) ├── 선정된 컴포넌트 기반 레이아웃 3종 제안 │ ├── A: 정보 밀집형 (데이터 중심) │ ├── B: 비주얼 중심 (차트 대형화) │ └── C: 균형형 (차트 + 데이터 그리드) └── 사용자 선택 또는 "Auto" (AI 추천) │ ▼ S3 도메인 전문 프롬프트 조합 ├── 기반: widget_prompt.md (공통 디자인 시스템) ├── 추가: domain_prompts/{category}.md (도메인별 전문 지식) ├── 추가: 선정 컴포넌트 상세 CSS/SVG 가이드 ├── 추가: 레이아웃 배치 지시 (선택된 베리에이션) └── 추가: 도메인별 현실적 샘플 데이터 │ ▼ S4 위젯 HTML 생성 (LLM) ├── 시스템 프롬프트: widget_prompt.md + domain prompt ├── 유저 프롬프트: 사이즈 + 컴포넌트 + 레이아웃 + 데이터 └── 출력: JSON {html, reason, explanation} │ ▼ S5 품질 검증 (NEW) ├── widget-root 사이즈 일치 확인 ├── 필수 컴포넌트 존재 확인 (DOM 파싱) ├── overflow 검사 └── 실패 시 → 1회 재생성 (피드백 포함)

4. 도메인별 전문 프롬프트 구조

4.1 domain_prompts 파일 구조

design/domain_prompts/
├── finance.md — 주가, 환율, 코인 (차트 패턴, 등락 표기, 거래량)
├── weather.md — 기온, 습도, 미세먼지 (날씨 아이콘 SVG, 온도 커브)
├── health.md — 운동, 수면, 심박수 (프로그레스 링, 목표 달성)
├── productivity.md — 할일, 캘린더 (체크리스트, 타이머)
├── commute.md — 지하철, 버스 (타임라인, 노선 컬러)
├── media.md — 음악, 뉴스 (웨이브폼, 프로그레스 바)
├── business.md — 매출, 재고 (바 차트, KPI 카드)
└── lifestyle.md — 취미, 반려동물 (카운터, AI 메시지)

4.2 도메인 프롬프트 예시 (finance.md)

## Finance Domain — 금융 위젯 전문 가이드 ### 필수 데이터 포인트: - 현재가 (H1, 44px bold, tabular-nums) - 등락폭 (H2, 상승=#E53935 ▲, 하락=#1A73E8 ▼) - 등락률 (괄호 안 퍼센트, 소수점 2자리) - 전일종가 (참조선, 점선, opacity:0.3) - 거래량 또는 시가총액 (detail grid) ### 샘플 데이터 (현실적 범위): - 삼성전자: 72,000~85,000원 범위 - 비트코인: $60,000~$100,000 범위 - 원/달러: 1,300~1,400 범위 - 코스피: 2,400~2,800 범위 ### 차트 패턴 (5일 기준): - 상승 추세: M0,80 C50,75 100,60 150,45 200,30 250,20 282,10 - 하락 추세: M0,20 C50,25 100,40 150,55 200,70 250,80 282,90 - V자 반등: M0,30 C50,70 100,90 150,80 200,50 250,25 282,15 ### 색상 규칙: - 전일 대비 상승: #E53935 (빨강) — 한국 증시 규칙 - 전일 대비 하락: #1A73E8 (파랑) - 보합: #666666

5. 컴포넌트 자동 선정 워크플로우 (S1.5)

5.1 입력 → 컴포넌트 선정 LLM 프롬프트

시스템: 당신은 위젯 컴포넌트 분석기입니다. 사용자의 위젯 요청을 분석하여 최적의 컴포넌트 5개를 선정합니다. 가용 컴포넌트 풀: - area_chart: 영역 차트 (트렌드, 시계열) - line_chart: 라인 차트 (스파크라인) - bar_chart: 바 차트 (비교, 분포) - progress_ring: 원형 프로그레스 (달성률) - progress_bar: 선형 프로그레스 - detail_grid: 상세 데이터 그리드 (2-3열) - badge: 카테고리 뱃지 - icon_container: 아이콘 박스 - timeline: 세로 타임라인 - checklist: 체크리스트 - waveform: 오디오 파형 - reference_line: 참조선 (전일종가 등) - change_indicator: 등락 표시 (화살표 + 퍼센트) - grid_lines: 차트 배경 격자 JSON으로 응답: { "components": ["area_chart", "badge", "detail_grid", "change_indicator", "reference_line"], "reasoning": "주가 위젯이므로 시계열 차트와 등락 표시가 핵심...", "accent_color": "#E53935", "sample_data": {"value": "84,500원", "change": "+1,200", "pct": "+1.44%"} }

5.2 사이즈별 컴포넌트 필터링

S1.5에서 선정된 5개 컴포넌트가 선택된 사이즈에서 사용 가능한지 매트릭스 조회 후 필터링. 예: Tiny 선택 시 area_chart, detail_grid, reference_line은 자동 제외.

6. 레이아웃 베리에이션

베리에이션특징컴포넌트 비중적합 카테고리
A. 정보 밀집형데이터 최대한 표시, 차트 최소화Detail Grid 60%, Chart 20%비즈니스, 생산성
B. 비주얼 중심차트 대형화, 데이터 최소화Chart 70%, Data 15%금융, 건강
C. 균형형차트 + 데이터 균등 배분Chart 40%, Grid 40%날씨, 교통
D. 카드 분할형복수 작은 카드로 분할Mini Cards 80%라이프, 미디어
E. 리스트형세로 리스트 (타임라인)List Items 70%교통, 일정

7. 구현 로드맵

단계작업담당예상 소요
P1도메인별 프롬프트 8개 작성 (finance, weather, health...)DD + CTL각 1개 작성 후 검증
P2S1.5 컴포넌트 자동 선정 엔진 구현CTL (BE 팀)stage15_component.py 신규
P3stage4_widget_html.py에 도메인 프롬프트 로드 + 병합CTLgenerate() 함수 수정
P4Creator sub-sidebar에 컴포넌트 선택 반영 (LLM 추천)UZL (FE)JS 연동
P5레이아웃 베리에이션 프리뷰 (3종 동시 생성)CTL + UZL병렬 생성 API
P6S5 품질 검증 자동화 (DOM 파싱, 컴포넌트 존재 확인)QADpost-generation 검증
P7도메인별 샘플 데이터 DB (현실적 범위의 더미 데이터)CTLJSON 데이터 파일

8. 기대 효과

지표현재 (AS-IS)목표 (TO-BE)
위젯 퀄리티 (레퍼런스 대비)70-80%95%+
컴포넌트 적중률임의 생성LLM 추천 5개 → 사용자 확인
도메인 전문성공통 프롬프트 1개8개 도메인 전문 프롬프트
레이아웃 다양성1종 고정5종 베리에이션
데이터 현실성"123", "78" 임의도메인별 현실적 샘플
품질 검증없음자동 DOM 검증 + 재생성

9. 즉시 적용 가능한 Quick Win

  1. 도메인별 샘플 데이터를 프롬프트에 포함 — "삼성전자 84,500원" 같은 현실적 값이 나오도록 _get_content_guide에 샘플 데이터 추가
  2. intent.category 기반 액센트 컬러 자동 지정 — finance=#E53935, weather=#2196F3 등을 generate() 프롬프트에 강제
  3. Creator의 자동 응답을 첫 번째 옵션 + 프롬프트 기반으로 개선 (이미 완료)