04 · 연구 · 문제 → 해결

AD Video Generation

DSPy 기반 광고 영상 프롬프트 생성 프레임워크 연구

광고다움은 화질이 아니라 장면의 순서에서 나옵니다.

2025 – 2026 · JCCT 등재연구 · 프롬프트 설계 · 실험 · 평가IPACT 국내학술대회 우수논문상
  • DSPy
  • Vertex AI · VEO
  • CLIP ViT-B/32
  • Gemini 2.5 Flash VQA
  • AIDA

Project Brief

무엇을, 누구를 위해, 어디까지.

타겟
생성 모델로 외식업 숏폼 광고를 만들려는 사람
문제 정의
모델에 광고를 만들라고 하면 광고가 아니라 메뉴 설명 영상이 나온다
내 역할
연구 · 프롬프트 설계 · 실험 · 평가
기간
2025 – 2026
연구 성격
외식업 시나리오 3개, 생성 영상 15개를 대상으로 한 방법론 중심 파일럿 연구
결과
JCCT 등재 · IPACT 국내학술대회 우수논문상
공동 연구자
김정이 (공동저자)

Screens

썸네일을 누르거나 좌우 화살표로 넘기고, 큰 이미지를 누르면 확대됩니다.

논문 — 광고 장면 구조 분석 기반 DSPy 프롬프트 생성 프레임워크

By the numbers

구조를 설명하는 숫자들.

0개 영상

외식업 시나리오 3개 × 프롬프트 방식 5개

0중 평가

CLIP · VQA 3회 반복 · 전문가 — 통합점수 없이 따로 해석

0장면

Hook · Showcase · Highlight · CTA로 재구성한 AIDA

Problem

생성 모델에 음식점 광고를 만들라고 하면 메뉴 설명 영상이 나옵니다. 광고답게 만드는 것은 화질이 아니라 장면의 순서인데, 프롬프트에는 그 구조가 들어갈 자리가 없었습니다.

Key Decisions

  1. 01

    AIDA를 장면 단위로 다시 쓴다

    마케팅 이론인 AIDA를 그대로 쓰지 않고 Hook, Showcase, Highlight, CTA라는 숏폼 장면 구조로 재구성했습니다. 프롬프트가 채워야 할 칸이 명시적으로 생깁니다.

  2. 02

    프롬프트를 문장이 아니라 명세로 다룬다

    묘사를 길게 쓰는 것만으로는 장면 순서가 생기지 않습니다. DSPy의 Signature로 입력과 출력 필드를 선언하고 Module이 네 장면 구조를 주입하게 해, 어떤 제품이 들어와도 같은 절차로 프롬프트가 만들어지게 했습니다.

  3. 03

    평가를 한 점수로 뭉개지 않는다

    CLIP은 프레임이 문장과 닮았는지만 보고, 시간 흐름과 CTA는 보지 못합니다. 그래서 CLIP, Gemini VQA, 전문가 평가를 따로 두고 각각 무엇을 설명하는 지표인지 한정해서 해석했습니다.

Validation

버거, 디저트 크로플, 샐러드볼 세 시나리오에 다섯 방식을 적용해 영상 15개를 만들고 비교했습니다. CLIP은 직접 LLM 프롬프트가 가장 높았지만 광고 구조 항목은 DSPy 구조화 프롬프트가 3.83으로 가장 높았고, 전문가 3인 평가에서도 세 시나리오 모두 최상위 경향이었습니다. 소규모 파일럿이라 일반적 우위가 아니라 이 조건에서 관찰된 경향으로만 보고했습니다. 결과는 JCCT에 등재되었고 IPACT 국내학술대회에서 우수논문상을 받았습니다.

How it's built

구조를 그렇게 잡은 이유.

  1. 01

    AIDA를 장면 단위로 다시 썼다

    AIDA는 소비자 심리 단계를 설명하는 모델이라 프롬프트에 그대로 넣을 수 없습니다. Hook, Showcase, Highlight, CTA라는 숏폼 장면 기능으로 재정의해 프롬프트가 채워야 할 칸을 명시적으로 만들었습니다. 빠진 장면이 바로 보입니다.

  2. 02

    DSPy를 최적화가 아니라 구조화에 썼다

    optimizer나 teleprompter는 돌리지 않았습니다. Signature와 Module 개념으로 제품 정보, 광고 목적, 대상 시청자, 장면 구조, 제약 조건을 필드로 고정해, 즉흥적인 문장 확장에서 매번 빠지던 장면 흐름과 CTA가 절차 안에 항상 들어가게 했습니다.

  3. 03

    평가를 셋으로 나누고 합치지 않았다

    CLIP은 프레임과 문장의 의미 대응, Gemini VQA는 광고 구조와 CTA 식별, 전문가 평가는 광고 시안으로서의 활용 가능성을 봅니다. 셋은 같은 뜻의 품질 점수가 아니어서 통합점수를 만들지 않았습니다.

  4. 04

    비교군을 다섯으로 뒀다

    사용자 기본, 직접 LLM, DSPy 구조화, 수동 템플릿, 루브릭 반영 프롬프트를 같은 세 시나리오에 적용했습니다. 장면 구조가 프롬프트에 반영되는 정도와 방식만 다르게 두어, 구조화가 어느 항목에서 차이를 만드는지 조건별로 확인했습니다.

  5. 05

    모델 평가는 세 번 반복했다

    멀티모달 모델의 채점은 같은 입력에도 흔들립니다. 동일한 대표 프레임과 동일한 평가 프롬프트로 영상당 3회 반복해 평균과 표준편차를 같이 보고했습니다. 점수만이 아니라 그 점수가 얼마나 흔들리는지도 결과로 남겼습니다.

  6. 06

    실제 광고에서는 구조만 빌렸다

    공개된 외식업 광고 사례를 분석하되 브랜드명, 로고, 고유 메뉴명, 유명 인물, 캠페인 문구는 가져오지 않고 장면 기능과 제품 제시 방식만 추상화했습니다. 표본 수를 미리 정하지 않고, 새 구조 범주가 더 나오지 않을 때까지 단계적으로 분석했습니다.

Research Design

이 연구에서 제가 설계한 세 가지입니다.

  1. 01Scene Structure

    AIDA를 프롬프트가 채울 네 칸으로

    왜

    AIDA는 주의, 관심, 욕구, 행동이라는 소비자 반응의 흐름을 설명합니다. 그런데 영상 프롬프트에 적어야 하는 것은 심리 단계가 아니라 장면의 기능, 제품을 보여주는 방식, 마지막 행동 유도입니다.

    어떻게

    공개된 외식업 광고에서 반복되는 장면 기능을 뽑아 Attention은 Hook, Interest는 Showcase, Desire는 Highlight, Action은 CTA로 대응시키고, 장면마다 프롬프트에 반영할 요소를 조작적으로 정의했습니다. 새 광고 이론이 아니라 기존 설득 흐름을 프롬프트 설계용으로 다시 쓴 분석 틀입니다.

    • Hook — 첫 장면, 시선 유도, 움직임, 강한 제품 단서
    • Showcase — 제품 형태, 재료, 조리 또는 제공 상황
    • Highlight — 질감, 맛, 신선함, 차별적 장점
    • CTA — 방문·주문·구매, 마무리 화면, 메시지가 들어갈 여백
  2. 02DSPy Signature

    한 줄 요청을 입출력 명세로 분해

    왜

    사용자 요청을 LLM의 즉흥적인 문장 확장에 맡기면 제품 정보, 장면 흐름, CTA, 금지 조건이 일관되게 들어가지 않습니다. 빠지는 항목이 매번 다릅니다.

    어떻게

    요청을 제품 정보, 광고 목적, 대상 시청자, 장면 구조, 제약 조건 다섯 입력 필드로 나누고, 스토리보드형 프롬프트와 Veo 프롬프트 두 출력으로 내보내는 Signature를 정의했습니다. 장면 구조는 Module이 고정값으로 넣습니다.

    • 입력 필드 5개, 출력 필드 2개로 절차를 고정
    • 같은 절차를 버거, 크로플, 샐러드볼 세 시나리오에 그대로 재사용
    • optimizer는 실행하지 않았고, 논문에도 그렇게 명시
    • 표현을 "DSPy 기반 최적화"가 아니라 "Signature/Module 개념 기반 생성 프레임워크"로 한정
  3. 03Evaluation

    지표마다 설명할 수 있는 범위를 한정

    왜

    프레임에 제품과 재료가 보이기만 하면 CLIP Score는 잘 나옵니다. 그 영상이 Hook에서 CTA까지 흐르는지는 CLIP으로 알 수 없습니다. 한 점수로 합치면 이 차이가 사라집니다.

    어떻게

    CLIP은 의미 대응 보조 지표, VQA는 모델 기반 준정량 보조 평가, 전문가 평가는 광고 시안 관점의 보완 자료로 역할을 나눴습니다. VQA는 같은 프레임과 같은 평가 프롬프트로 세 번 반복해 채점 변동성을 같이 봤습니다.

    • CLIP — 영상당 8프레임 균등 추출, 프레임과 프롬프트의 의미 유사도
    • VQA — 대표 4프레임을 시간순으로 주고 5개 항목을 1~5점으로 채점
    • 깨지거나 읽을 수 없는 생성 텍스트에는 점수를 주지 않도록 평가 프롬프트에 명시
    • 전문가 문항은 프레임워크를 몰라도 답할 수 있는 쉬운 자연어로 구성

Prompt Framework

한 줄짜리 요청이 Veo 프롬프트가 되기까지.

  1. 사용자 요청

    "수제 버거 광고를 만들어줘" 같은 한 줄에서 시작합니다. 이 문장만으로도 제품 외형은 나오지만, 주목 유도에서 행동 유도까지의 흐름은 안정적으로 만들어지지 않습니다.

    비교군 A는 이 요청을 그대로 사용

  2. 필드 추출

    요청에서 제품 정보, 광고 목적, 대상 시청자, 제약 조건을 분리합니다. 넣지 말아야 할 것, 즉 금지 조건도 이 단계에서 제약 조건 필드로 따로 잡습니다.

    product_info · ad_goal · target_audience · constraints

  3. 장면 구조 배치

    추출한 정보를 Hook, Showcase, Highlight, CTA 네 장면에 나눠 놓습니다. 어떤 정보가 어느 장면에서 쓰이는지가 여기서 정해집니다.

    scene_structure = Hook → Showcase → Highlight → CTA

  4. Signature 구성

    입력과 출력의 관계를 DSPy Signature로 선언합니다. 긴 문자열 프롬프트를 시행착오로 고치는 대신, 무엇이 들어가고 무엇이 나와야 하는지를 먼저 고정합니다.

    InputField 5 · OutputField 2

  5. 스토리보드형 프롬프트 생성

    Module이 장면 구조를 주입해 장면 단위의 스토리보드 프롬프트를 만듭니다. 장면별로 빠진 칸이 있는지 이 출력에서 바로 확인할 수 있습니다.

    storyboard_prompt

  6. Veo 프롬프트 출력

    스토리보드를 영상 생성 모델이 읽는 최종 프롬프트로 내보내고, Vertex AI의 Veo로 세로형 숏폼 광고 영상을 생성합니다.

    veo_prompt · Vertex AI

Signature

프레임워크의 뼈대는 이 선언 하나입니다.

ad_prompt.py

class AdPromptSignature(dspy.Signature):
    product_info = dspy.InputField()
    ad_goal = dspy.InputField()
    target_audience = dspy.InputField()
    scene_structure = dspy.InputField(desc="Hook, Showcase, Highlight, CTA")
    constraints = dspy.InputField()
    storyboard_prompt = dspy.OutputField()
    veo_prompt = dspy.OutputField()


class AdPromptModule(dspy.Module):
    def forward(self, product_info, ad_goal, target_audience, constraints):
        scene_structure = ["Hook", "Showcase", "Highlight", "CTA"]
        return generate_prompt(product_info, ad_goal, target_audience,
                               scene_structure, constraints)

논문에 실은 의사코드입니다. DSPy의 선언적 입출력 구성만 가져왔고 optimizer는 실행하지 않았습니다.

VQA Rubric

Gemini 2.5 Flash가 채점한 다섯 항목과, VQA 평균을 낼 때 쓴 비중입니다. 이 평균은 순위가 아니라 해석용 보조 점수입니다.

  • 광고 구조

    25/ 100%

    Hook, Showcase, Highlight, CTA 흐름이 식별되는가. 1점은 장면 역할 식별이 어려움, 5점은 역할과 흐름이 명확함

  • 제품 정보 반영

    25/ 100%

    제품의 재료, 형태, 질감, 분위기가 드러나는가

  • 시각적 완성도

    20/ 100%

    광고 영상으로서 구도, 조명, 질감이 자연스러운가

  • 생성 안정성

    15/ 100%

    왜곡, 깨짐, 비정상 객체, 깨진 텍스트가 적은가

  • CTA 적합성

    15/ 100%

    방문, 주문, 구매를 유도하는 장면 또는 여백이 확인되는가

Results

그룹별 평균입니다. 열마다 가장 높은 값을 강조했고, 색이 깔린 행이 제안 방식입니다.

방식CLIPVQA 평균표준편차광고 구조제품 반영시각 품질생성 안정성CTA전문가 평가
A사용자 기본0.3183.830.272.564.394.784.832.72중간 이상
B직접 LLM0.3293.760.352.174.834.724.722.39상위
CDSPy 구조화0.2893.970.653.834.564.333.782.94최상위
D수동 템플릿0.2782.961.052.173.563.562.562.89하위
E루브릭 반영0.2743.790.902.724.564.613.673.33중간
  • CLIP은 직접 LLM(B)이 가장 높은데, 광고 구조는 B가 가장 낮습니다. 묘사가 풍부해지면 프레임은 문장과 닮아가지만 장면 순서가 생기지는 않았습니다.
  • DSPy 구조화(C)는 광고 구조 3.83으로 나머지 그룹(2.17~2.72)과 차이가 가장 컸습니다. 반면 시각 품질과 생성 안정성은 A, B보다 낮았습니다. 구조 항목의 이득과 안정성 항목의 손해가 함께 나타났습니다.
  • CTA는 루브릭 반영(E)의 3.33이 최고였습니다. 행동 유도 장면은 어느 방식에서도 아직 뚜렷하게 나오지 않았습니다.
  • 전문가 평가는 원점수 대신 그룹별 상대 경향으로 보고했습니다. 평가자 3명, 영상 15개 기준입니다.

Experiment Specs

결과를 읽을 때 근거가 되는 실험 조건입니다.

실험 설계

시나리오
버거 · 디저트 크로플 · 샐러드볼
프롬프트 방식
A 사용자 기본 · B 직접 LLM · C DSPy 구조화 · D 수동 템플릿 · E 루브릭 반영
생성 영상
15개 · 세로형 숏폼 광고
생성 모델
Google Veo (Vertex AI)
통합점수
산출하지 않음 — 세 평가를 따로 해석

모델 기반 평가

CLIP 모델
openai/clip-vit-base-patch32
CLIP 프레임
영상당 8장 균등 간격 추출
VQA 모델
Gemini 2.5 Flash
VQA 프레임
대표 4장 · 시간순 입력
척도 · 반복
5개 항목 1~5점 · 영상당 3회, 평균과 표준편차
출력 형식
항목별 점수와 근거를 JSON으로 고정

전문가 평가

평가자 · 대상
3명 · 영상 15개 · 1~5점
문항
광고 흐름 · 음식 인식 · 재료와 질감 · 구도와 조명 · 생성 오류 · 행동 유도 · 시안 활용 가능성
문항 원칙
프레임워크를 몰라도 답할 수 있는 쉬운 자연어
보고 방식
원점수 대신 그룹별 상대 경향
향후 보완
CVI (I-CVI · S-CVI/Ave) 기반 평가표 타당도 검토

Claims & Limits

어디까지 말할 수 있는 결과인지 선을 그었습니다.

이 조건에서 관찰된 것

  • DSPy 구조화 프롬프트가 VQA 광고 구조 항목에서 가장 높음 (3.83)
  • 전문가 3인 평가에서 세 시나리오 모두 DSPy 구조화가 최상위 경향
  • 직접 LLM 프롬프트가 CLIP(0.329)과 제품 반영(4.83)에서 가장 높음
  • 지표마다 1위 그룹이 다름 — CLIP만으로는 광고 구조를 판단할 수 없음
  • 수동 템플릿은 평균이 가장 낮고 반복 평가 편차(1.05)도 가장 큼

주장하지 않는 것 · 한계

  • 특정 방식의 일반적 우위 — 시나리오 3개, 영상 15개의 파일럿
  • DSPy 자동 최적화의 효과 — optimizer를 쓰지 않았으므로 검증 대상이 아님
  • VQA 점수의 절대성 — 사람 평가를 대체하지 않는 모델 기반 보조 자료
  • 광고 효과 — 실제 소비자 반응이나 집행 성과는 다루지 않음
  • 저작권 · 상표권 · 초상권 · 브랜드 모방 가능성은 향후 검토 과제

다음 단계는 평가자 규모를 늘리고, CVI로 평가표를 검토하고, 실제 사용자 평가를 병행하는 것입니다.