AI에게 그냥 부탁하면 줄글로 답할 수 있습니다. 웹서비스에서 바로 쓰려면 제목, 장면, 자막처럼 정해진 칸에 맞춰 답하게 해야 합니다.
대본 구조화와 프롬프트 엔지니어링
📚1단계: 주요 개념 설명
구조화된 숏폼 프롬프트를 설계하고 JSON 출력 규격을 강제화한다.
숏폼 맞춤형 시나리오 구성
- 쇼츠는 첫 문장이 재미없으면 바로 넘겨질 수 있습니다.
- 그래서 프롬프트에 '첫 문장은 강한 후킹으로 시작' 같은 조건을 넣습니다.
- 장면을 나누면 자막, 이미지, 음성을 차례로 만들기 쉬워집니다.
🛠️2단계: 따라하기 실습
3교시에서 만든 대본 생성기를 한 단계 키웁니다. 지금은 긴 줄글로 오는 대본을, 제목·후킹·장면으로 나뉜 JSON으로 받아 화면에 장면별 카드로 예쁘게 뿌립니다.
AI가 정해진 JSON 구조로만 답하게 만듭니다.
app/api/script/route.ts의 system 메시지를 고쳐줘. 대본을 title(제목), hook(첫 문장), scenes(장면 배열, 각 장면은 narration과 caption)로 나눈 JSON만 출력하고, 다른 설명은 절대 붙이지 말라고 지시해줘.
- 줄글은 사람은 읽기 쉽지만 프로그램은 다루기 어렵습니다. JSON은 항목이 딱 나뉘어 있어 화면에 바로 꽂을 수 있습니다.
- 'JSON만 출력하라'고 못 박는 것이 핵심입니다 — 사족이 붙으면 다음 단계(파싱)가 깨집니다.
AI가 형식을 살짝 어겨도 앱이 죽지 않게 합니다.
route.ts에서 AI 응답을 JSON으로 변환(parse)하도록 바꿔줘. 혹시 응답 앞뒤에 코드블록 표시나 설명이 붙어도, 첫 '{' 부터 마지막 '}' 까지만 잘라서 안전하게 파싱하도록 해줘.
- AI는 가끔 코드블록 표시나 '네, 만들었습니다' 같은 말을 붙입니다. 중괄호 사이만 잘라내면 이런 경우에도 안전합니다.
- 실패했을 때 빈 값이나 에러 메시지를 돌려주도록 하면 화면이 멈추지 않습니다.
구조화된 데이터의 이점을 화면에서 확인합니다.
app/page.tsx에서 결과를 장면(scene)별 카드로 보여줘. 각 카드에 narration과 caption을 나눠서 표시하고, 맨 위에 title과 hook을 크게 보여줘.
- scenes 배열을 반복(map)하면 장면 수가 몇 개든 자동으로 카드가 만들어집니다.
- 이것이 JSON으로 받은 진짜 이유입니다 — 데이터 구조가 곧 화면 구조가 됩니다.
우측 레고 블록 모양의 프롬프트 토큰들을 클릭해 '역할', '스키마 조건', '주제 인자'들을 순서대로 적재하여 프롬프트 완성도 점수를 100점으로 달성해 보세요.
def build_prompt(topic, tone, scenes_count=4):
return f"""너는 쇼츠 동영상 작가다.
주제: {topic}
영상 톤: {tone}
출력 규격:
반드시 다음 JSON 포맷으로 출력하고 다른 말은 절대 덧붙이지 마라.
{{
"title": "쇼츠 제목",
"scenes": [
{{ "scene": 1, "narration": "대사", "image_prompt": "이미지 지시문" }}
]
}}"""💡 코딩 중 막히나요? 모범 솔루션 코드
🧩3단계: 개념 검증 퀴즈
하단에 출력된 프롬프트에 역할, 주제, 톤, 길이, JSON 출력 조건이 모두 들어갔는지 확인합니다.
Q1. LLM이 프로그램에서 바로 쓰기 좋게 답하도록 강제하는 출력 형식은?
Q2. 쇼츠 대본에서 '후킹(Hook)'을 첫머리에 두는 이유는?
프롬프트에 포함할 조건 요소들을 아래에서 클릭해 조립해 보세요.