바디 컴포넌트 카테고리별 공급 진단
Component Type 17종 × 사이즈 × 블록수 × visual_focus · build_supply_data.py로 실서버에서 재생성
⓪ AS-IS → TO-BE 카테고리 개편
구 카테고리(
categories, 소문자 snake_case 13종) → 신 Component Type(PascalCase 17종). 상세 기준은 category_classification.md가장 큰 변화 3가지
1
grid 하나 → 5종으로 세분화이전에는 "나열형"이면 전부
grid 한 카테고리였다. 이제는 정보 구조에 따라 List · RadialList · BigNumber · Takeaway · QuoteTestimonial 5종 중 하나로 더 정확하게 분류된다.2
grid_with_images 타입 자체를 없앰"이미지가 들어간 것"은 더 이상 별도 타입이 아니다. 각 타입 안에서
visual_focus=Image 속성 하나로 표현한다 — 타입과 속성을 섞어 쓰던 것을 분리했다.3
circular_list → RadialList로 통합가운데 하나를 중심으로 퍼지는 hub&spoke 형태도 결국 방사형 나열이라, 별도 타입을 만들지 않고
RadialList에 함께 묶었다.⓪-2 카테고리 타입별 공급량 비교 — AS-IS vs TO-BE
AS-IS =
data/body_key.csv(2026-07-27 export, 재태깅 전 구 categories) status=ACTIVE –건 · TO-BE = 프로덕션 Postgres bodies ⋈ masters(body_id) WHERE masters.page_role IN ('Role.Page.Content','Role.Page.NoUse') AND bodies.status='active' (조회일 2026-08-11) –건 — 같은 바디로 매칭하지 않고, 각 시점의 active 모집단을 독립적으로 집계전체 active 바디 증감
–
–
AS-IS (구 카테고리, 2026-07-27)
TO-BE (신 Component Type, 2026-08-11)
AS-IS 분포 (14종 — 13종 + 미분류)
TO-BE 분포 (17종)
★ maxCandidates 조작 — 운영값을 바꿔가며 타입별 영향 확인
프론트는 백엔드가 넘긴 후보 풀에서 균등 랜덤으로 1개를 뽑는다. 풀
maxCandidates칸을 요청 타입으로 다 못 채우면 남는 칸은 등급 6(타입 불일치)이 채우고, 그만큼 다른 타입이 렌더될 확률이 생긴다.전체 평균 타입 불일치 확률
–
모든 타입·프레임 균등 가중
타입 불일치 확률 30% 이상 타입
–
17종 중 — 3회 중 1회 이상 엉뚱한 타입
보완 필요 수량 합계
–
전 타입이 풀을 채우게 하는 최소 추가 건수
트레이드오프 — 슬라이더를 낮추면 타입 불일치 확률은 즉시 내려가지만, 풀이 작아지는 만큼 같은 바디가 반복 노출될 확률이 올라간다(세션 내 다양성 저하). 열린 논점 (n)
maxCandidates 5 vs 10이 바로 이 균형점을 찾는 문제다.
① 타입 불일치 확률 — 그 타입을 골랐을 때 다른 타입이 렌더될 확률
1 − 평균( min(요청타입 후보수, maxCandidates) ÷ maxCandidates ) · 후보수는 등급 1~5(top-1 일치 + top-2·3 일치) 중 사이즈가 맞는 전량
연한 바 = top-1 태깅만 셀 때 (참고용, 과대추정)
진한 바 = 실제 오타율 (top-2·3 구제 반영)
회색 = 오타율 0 (문제 없음)
①-2 타입별 후보수 분포 — 풀을 채울 재고가 있는가
Content 프레임 1,252개 각각에서 "사이즈가 맞는 이 타입 후보가 몇 개 있는지" 센 뒤, 후보가 적은 프레임부터 많은 프레임까지 줄 세웠다. 회색 막대 = 대부분(80%) 프레임이 속하는 범위, 점 = 딱 중간(중앙값)인 프레임의 후보 개수. 붉은 선 = 지금 설정된 풀 크기(
maxCandidates)점(대표 프레임)이 붉은 선보다 왼쪽이면 절반 이상의 프레임에서 풀을 못 채운다 = 구조적 공급 부족. 회색 막대의 오른쪽 끝(후보 많은 쪽 10%)까지 왼쪽이면 어떤 프레임에서도 못 채운다는 뜻.
①-3 보완 필요 수량 — 몇 개를 어떤 크기로 만들면 되는가
현재
maxCandidates 기준. 추가 바디를 – 이하로 만들면 Content 프레임의 95%에 들어가므로, 그 프레임군의 최소 후보수를 maxCandidates까지 끌어올리는 개수보완 필요 수량 0 = 이미 모든 프레임에서 풀을 채운다. 이 표가 곧 디자인팀 요청서다 — 타입 · 개수 · 최대 크기 · 블록수가 다 들어있다.
③ Information Type(대분류)별 공급 비중
미태깅 260건 포함, 검색 풀 1,473건 기준
Enumeration이 717건(49%)으로 압도적이고, Hierarchy는 54건(3.7%) · Highlight는 37건(2.5%)뿐이다. 미태깅 260건은 그 자체로 Sequence 전체(262건)와 맞먹는 규모라, 태깅 작업만 마쳐도 이 분포가 크게 바뀐다.
④ 바디 사이즈 → 커버 가능한 Content 프레임 %
보충 스펙 산출 기준. 어떤 크기로 만들면 몇 %의 프레임에 들어가는가
모든 타입이 1,100 × 480 이하 변형을 최소 1개씩 가지면 프레임의 94.2%를 커버할 수 있다. 반면 1,650×640처럼 큰 규격은 28%밖에 못 덮는다 — 지금 Versus의 최소 규격이 1,598×447(커버 71%)에 머물러 있는 것도, Staircase가 1,549×527(74%)인 것도 이 때문이다.
⑤ 타입 × 블록수 — '타입 유지' 커버리지 %
top-1 일치 & 사이즈 fit & 블록수 일치 후보가 1개 이상인 프레임 비율. 낮을수록 등급 2 이하로 추락(내용 누락·재생성)
- 사선 해칭 = 조치 필요 — 이 블록수 조합은 의미상 성립하는데 커버리지가 50% 미만이다.
- 회색 N/A = 애초에 의미상 성립하지 않는 조합이다(SWOT·Quadrant는 블록 4개 고정, Versus는 2개 중심). 공급도 0건이라 문제로 취급하지 않는다. 단, 범위 밖이어도 실제 공급이 있으면 N/A 대신 수치를 그대로 보여준다.
- Pyramid 블록5 · NestedScope 블록5 · Cycle 블록6 · Takeaway 블록2는 공급이 0건이라, 사이즈를 아무리 맞춰도 커버리지가 100% 추락한다.
⑥ 타입 × 블록수 공급 분포
블록수는 순서 있는 값이라 단일 색 순차 램프(연함→진함). List(572건)는 스케일 지배로 제외
Transformation·Versus는 공급이 블록 2개짜리에 몰려있어 3개 이상을 비교해달라는 요청을 받을 수 없다. Pyramid·Quadrant·SWOT·Staircase·NestedScope·Cycle은 블록 5~6개짜리 공급이 전혀 없다.
⑦ 타입 × visual_focus 분포
다중 태깅 전개, 타입 내 비율(%). List 제외
- Comparison·Hierarchy 계열은 Plain(강조 없음)에 치우쳐 있다 — Versus 24건 중 18건, Quadrant 23건 중 17건, HierarchicalTree 15건 중 10건, Pyramid 30건 중 15건이 Plain이다. CLAUDE.md에 적힌 "강조 평탄화" 문제가 이 데이터에 그대로 드러난다.
- 반대로 NestedScope는 9건 중 8건이 Metric(수치 강조)에 쏠려 있어, Plain 표현을 요청하면 고를 대안이 거의 없다.
표로 보기 — 타입별 전체 수치 (현재 maxCandidates 반영)
타입 불일치 확률%이 헤드라인 지표 — 30% 이상은 붉게 표시된다.
- 풀미달% — 풀
maxCandidates칸을 다 못 채우는 프레임의 비율 - 완전소실% — 후보가 0개인 프레임의 비율
- 후보수 — 프레임 1개당 요청 타입 후보 개수의 분위수(p10/중앙/p90)
- 밴드미달% — 타입은 맞지만 프레임보다 작아서 등급 3으로 떨어지는 비율
밴드미달%이 높은데 소실%은 낮은 Takeaway(36.3%)·HierarchicalTree(22.8%)는 공급 문제가 아니라 밴드 정책 문제다 — 타입별
scaleToleranceRate 검토 대상(열린 논점 g).유저 사용량 집계
Component AIP Phase 1 (마스터+바디 랜덤 조합 생성) · usage='COMPONENT_BASED' ∧ type='PRESENTATION_CONTENT' (생성 1건 = 1 row) 기준
① 일별 생성 수 추이
2026-07-14 배포 이후 · PRESENTATION_CONTENT 타입 기준(생성 1건당 1row)
배포 직후(7/15) 피크 10,420건 이후 점감 추세다. 8/4 Beta 서비스 전환(점선 표시) 이후 급감한 것은 트래픽 통제에 따른 자연스러운 감소로 해석한다.
② 인기 표지(cover) 템플릿 Top 30 — 언어별
템플릿 자체의
language로 구분한다(유저가 요청한 언어가 아니라 실제 뽑힌 템플릿의 언어). 선택 빈도 기준.조인 기준 자세히 보기
request.outline.cover.templatePageKey→template_page.idx→template_item.template_idx→ai_presentation_templates.language순으로 조인해 언어를 판정한다.- 썸네일은
template_page.json_thumb_key를 우선 쓰고, 없으면thumb_key로 대체한다. - 요금제는
ai_presentation_templates.template_idx=designhub.template_item.registered_id조인의content_tier값이다(STANDARD=무료 /PREMIUM=유료).
③ NPS 평균
COMPONENT_BASED 생성 이력이 있는 계정의 NPS 응답만 필터링 (2025-01-01 이후)
Phase1 배포일(7/14)이
aip_dynamo의 11점 척도 전환일(2026-06-02)보다 뒤라, 척도가 섞여 들어갈 위험은 없다.