머리말-본문-꼬리말 프롬프트 패턴
복잡한 여러 작업 프롬프트에도 확장할 수 있는 일관된 프롬프트 구조를 익힙니다.
머리말-본문-꼬리말 프롬프트 패턴은(는) CoddyKit의 무료 AI Prompt Engineering 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AI Prompt Engineering 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.
문서로서의 Prompt
보고서, 기사, 이메일과 같은 장문 문서는 인지적으로 탐색하기 쉬운 머리말/본문/꼬리말 구조를 사용합니다. 독자는 각 영역에서 무엇을 기대해야 하는지 알고 있습니다.
Prompt에도 같은 원칙이 적용됩니다. Prompt가 몇 문장을 넘어 길어지면 머리말/본문/꼬리말 구조를 통해 내용을 훑어보기 쉽고, 유지 관리하기 쉬우며, 일관되게 만들 수 있습니다.
이 패턴은 여러 모델에서 작동하며 간단한 Prompt부터 매우 복잡한 Prompt까지 확장할 수 있습니다.
머리말 부분
머리말은 두 가지 질문에 답합니다. 당신은 누구입니까? 그리고 작업은 무엇입니까?
머리말은 모델의 정체성(페르소나 또는 역할)을 설정하고 Prompt의 주요 목표를 명시합니다. 나머지 모든 요소는 이 토대 위에 구축됩니다.
효과적인 머리말은 간결하며 일반적으로 2~4문장으로 구성됩니다. 예시, 제약 조건 또는 출력 규칙은 포함하지 않습니다.
header = '''
<header>
You are an expert technical writer specializing in API documentation.
Your task is to write clear, developer-friendly documentation
for the API endpoint described in the body of this prompt.
</header>
'''
print(header)본문 부분
본문에는 모델이 작업을 수행하는 데 필요한 콘텐츠 또는 맥락이 들어 있습니다. 본문은 주요 데이터 영역입니다.
- 처리할 원본 문서
- 대화 기록
- 구조화된 데이터(JSON, CSV 일부)
- 참고 자료
- 사용자가 실제로 입력한 내용
본문은 가장 큰 부분이며, 실행 시점에 동적으로 주입되는 경우가 가장 많습니다.
def build_body(endpoint_spec):
return f'''
<body>
<endpoint_specification>
{endpoint_spec}
</endpoint_specification>
</body>
'''
spec = 'POST /api/v2/users\nRequest body: {email: string, role: admin|user}\nReturns: {id: string, created_at: ISO8601}'
print(build_body(spec))꼬리말 부분
꼬리말에는 형식 지시 사항과 출력 구조가 들어 있습니다. 꼬리말이 마지막에 나오는 이유는 다음과 같습니다.
- 모델은 위에서 아래로 읽으며 방금 처리한 내용에 형식 규칙을 적용합니다
- 끝부분에 가까운 형식 지시 사항은 무시될 가능성이 낮습니다
- 꼬리말은 동일한 출력 유형을 사용하는 여러 Prompt에서 재사용하기 쉽습니다
꼬리말은 보기 좋게 형식을 지정하십시오가 아니라 다음 필드를 포함하는 JSON 객체를 반환하십시오처럼 명확해야 합니다.
footer = '''
<footer>
Format your response as a JSON object with these fields:
{
"endpoint": "string",
"summary": "string (one sentence)",
"parameters": [{"name": "string", "type": "string", "required": true|false, "description": "string"}],
"response_example": "string (JSON)",
"error_codes": [{"code": "number", "meaning": "string"}]
}
Do not include any text outside the JSON object.
</footer>
'''
print(footer)전체 패턴 조립하기
머리말, 본문, 꼬리말을 결합해 완전하고 재사용 가능한 Prompt 함수를 만들어 보겠습니다.
def build_api_doc_prompt(endpoint_spec):
header = '<header>\nYou are an expert technical writer. Document the API endpoint in the body.\n</header>'
body = f'<body>\n<endpoint>\n{endpoint_spec}\n</endpoint>\n</body>'
footer = '<footer>\nReturn JSON: {"summary": str, "parameters": [...], "response_example": str}\nNo text outside JSON.\n</footer>'
return '\n\n'.join([header, body, footer])
spec = 'GET /api/products/:id\nReturns product details by ID'
print(build_api_doc_prompt(spec))이 순서가 효과적인 이유
머리말/본문/꼬리말 순서는 모델이 맥락을 처리하는 방식을 따릅니다.
- 머리말이 먼저 — 정체성과 목표를 설정해 모델이 뒤에 나올 내용을 준비하도록 합니다
- 본문이 두 번째 — 이제 모델은 설정된 역할과 작업을 기준으로 콘텐츠를 처리합니다
- 꼬리말이 마지막 — 형식 지시 사항이 모델이 응답을 생성하기 직전에 나오므로 출력 구조에 미치는 영향이 극대화됩니다
형식 지시 사항을 머리말에 배치하면(처음에 배치하면) 모델이 응답을 작성할 때쯤에는 그 내용을 일부 잊게 됩니다.
복잡한 프롬프트로 확장하기
프롬프트가 복잡해질 때 헤더/본문/푸터 패턴은 자연스럽게 확장됩니다:
def build_complex_prompt(persona, task, context_docs, constraints, output_schema):
header = f'<header>\n{persona}\nTask: {task}\n</header>'
docs = '\n'.join(f'<document id="{i+1}">\n{d}\n</document>' for i, d in enumerate(context_docs))
body = f'<body>\n{docs}\n</body>'
constraint_list = '\n'.join(f'- {c}' for c in constraints)
footer = f'<footer>\n<constraints>\n{constraint_list}\n</constraints>\n<output_schema>\n{output_schema}\n</output_schema>\n</footer>'
return '\n\n'.join([header, body, footer])푸터 템플릿 재사용하기
푸터는 출력 구조를 정의하므로 가장 재사용하기 좋은 섹션입니다. 일반적인 푸터 템플릿은 다음과 같습니다:
FOOTER_JSON = '<footer>\nReturn a valid JSON object. No text outside JSON. No markdown code fences.\n</footer>'
FOOTER_MARKDOWN = '<footer>\nFormat your response as markdown.\nUse ## for section headers.\nUse bullet points for lists.\nMaximum 500 words.\n</footer>'
FOOTER_STRUCTURED = '<footer>\nRespond using this exact structure:\n1. Summary (1 sentence)\n2. Key Findings (bullet list)\n3. Recommendation (1 paragraph)\n</footer>'
print('Footer templates ready for reuse.')본문에 동적 콘텐츠 주입하기
본문은 런타임에 동적으로 구성되는 경우가 가장 많은 섹션입니다. 본문에 동적 콘텐츠를 주입할 때의 모범 사례:
- 주입하는 콘텐츠는 항상 이름이 지정된 XML 태그로 감싸기
- 프롬프트 주입을 방지하도록 사용자 입력을 주입하기 전에 정제하기
- 매우 긴 문서는 잘라 내고 본문에 잘린 사실 기록하기
- 주입하는 각 부분에 명확한 레이블 지정하기 (document_1, user_query, chat_history)
def safe_inject(user_content, max_chars=3000):
safe = user_content.replace('<', '<').replace('>', '>')
if len(safe) > max_chars:
safe = safe[:max_chars] + '... [TRUNCATED]'
return f'<user_input>\n{safe}\n</user_input>'
raw = 'User provided text here. Could be very long.'
print(safe_inject(raw))코드베이스 전체에서 일관된 구조 유지하기
헤더/본문/푸터 패턴의 진정한 강점은 애플리케이션 전체에서 동일한 패턴을 일관되게 사용할 때 나타납니다. 이점:
- 새 팀원도 어떤 프롬프트든 즉시 이해할 수 있습니다
- 코드 검토에서 프롬프트를 검토하기 쉽습니다 — 검토자가 정확히 어디를 살펴봐야 하는지 알 수 있습니다
- 자동화된 테스트로 각 섹션을 독립적으로 검증할 수 있습니다
- 모델 간 프롬프트 이전이 간단합니다 — 구조가 아니라 콘텐츠만 변경하면 됩니다
헤더/본문/푸터에서 흔히 발생하는 실수
패턴의 효과를 저해하는 실수:
- 헤더에 형식 지침 배치 — 응답 생성과 너무 멀리 떨어져 있어 모델이 일부 무시합니다
- 본문에 작업 설명을 묻어 두기 — 모델이 이를 지시가 아니라 처리해야 할 데이터로 취급할 수 있습니다
- 섹션마다 제약 조건을 나누어 배치 — 점검하기 어렵고 모순을 일으킵니다
- 푸터 없음 — 프롬프트가 복잡해질수록 출력 구조를 예측할 수 없게 됩니다
빠른 확인
헤더/본문/푸터 패턴에서 출력 형식 지침은 어디에 배치해야 하며, 그 이유는 무엇입니까?
헤더/본문/푸터 — 핵심 요점
헤더/본문/푸터 패턴은 프롬프트 엔지니어링에 문서 구조화 원칙을 적용합니다:
- 헤더: 자신의 역할과 작업 — 이후 모든 내용의 틀을 설정합니다
- 본문: 콘텐츠와 맥락 — 동적으로 주입되며 의미를 나타내는 XML 태그로 감쌉니다
- 푸터: 형식 지침과 출력 스키마 — 출력 구조에 최대한 영향을 주도록 마지막에 배치합니다
- 이 패턴은 단순한 프롬프트부터 매우 복잡한 프롬프트까지 자연스럽게 확장됩니다
- 푸터 템플릿은 동일한 출력 유형을 사용하는 여러 프롬프트에서 재사용할 수 있습니다
- 코드베이스 전체의 일관성 덕분에 프롬프트를 검토하고 테스트하며 유지 관리할 수 있습니다
AI 튜터와 함께 AI Prompt Engineering을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 53
- 레슨
- 199
자주 묻는 질문
“머리말-본문-꼬리말 프롬프트 패턴” 강의는 무료인가요?
네 — “머리말-본문-꼬리말 프롬프트 패턴” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Prompt Engineering 강의 전체를 잠금 해제할 수 있습니다. AI Prompt Engineering 강의에는 총 4개의 강의가 포함되어 있습니다.
“머리말-본문-꼬리말 프롬프트 패턴”에서 뭘 배우나요?
복잡한 여러 작업 프롬프트에도 확장할 수 있는 일관된 프롬프트 구조를 익힙니다. 브라우저에서 직접 실행하는 실습 코드로 AI Prompt Engineering을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AI Prompt Engineering을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AI Prompt Engineering은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“머리말-본문-꼬리말 프롬프트 패턴” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AI Prompt Engineering 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AI Prompt Engineering 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- XML 태그를 구분자로 사용하기
- 모듈식 프롬프트 섹션
- 머리말-본문-꼬리말 프롬프트 패턴
- 프롬프트 구성 모범 사례