프롬프트 기본

효과적인 프롬프트는 원하는 결과를 안정적으로 얻는 핵심입니다. 이 페이지에서는 프롬프트 작성의 기본 원칙과 실용적인 기법을 다룹니다.

처음 시작하기

🎓 프롬프트 엔지니어링이 처음이신가요?

핵심 원칙 3가지:

  1. 명확하게 - "코드 작성해줘" ❌ → "Python으로 CSV 읽는 함수 작성해줘" ✅
  2. 맥락 제공 - 목적, 대상 독자, 제약사항 명시
  3. 예제 포함 - 원하는 출력 형식의 예시 제공

💡 비유: 프롬프트는 "요리 레시피"와 같습니다. 재료(입력), 조리법(단계), 완성품 사진(예시)이 명확할수록 좋은 결과!

프롬프트 품질 개선 프로세스 ❌ 모호한 프롬프트 "코드 작성해줘" 결과: 불만족 개선 🟡 세부사항 추가 "Python으로 CSV 읽는 함수" 정제 🔵 맥락 + 제약 + 제약사항 + 예상 입출력 완성 ✅ 우수한 프롬프트 정확한 결과! 품질 지표 ❌ 모호함 (30% 성공률) 🟡 부분 명확 (60%) 🔵 명확 (85%) ✅ 우수 (95%+) 목표: 95% 이상! 우수한 프롬프트의 5가지 요소 1️⃣ 명확한 목적: 무엇을 원하는지 구체적으로 2️⃣ 충분한 맥락: 대상, 제약사항, 목적 명시 3️⃣ 명시적 형식: JSON, Markdown 등 출력 형식 지정 4️⃣ 예제 제공: 원하는 스타일의 샘플 5️⃣ 제약사항: 피해야 할 것, 지켜야 할 규칙

그림 1: 프롬프트 품질 개선 프로세스 - 모호함에서 우수함으로

프롬프트 구조 아키텍처

효과적인 프롬프트는 여러 요소를 적절히 조합합니다. 각 요소의 역할을 이해하면 상황에 맞게 프롬프트를 설계할 수 있습니다.

효과적인 프롬프트의 5가지 구성 요소 1. 작업 지시 무엇을 할지 명시 2. 맥락/배경 왜 필요한지 설명 3. 입출력 형식 JSON, Markdown 등 4. 예시 원하는 스타일 샘플 5. 제약 지켜야 할 규칙 예시: 실제 프롬프트 매핑 [지시] "다음 CSV 데이터를 분석해주세요" [맥락] "이 데이터는 온라인 쇼핑몰의 3개월 매출 기록입니다" [형식] "결과는 JSON 형식으로, sentiment와 summary 필드 포함" [제약] "100자 이내 요약, Python 코드 미포함" [예시] "입력: [데이터] → 출력: {"sentiment": "긍정", "summary": "매출 15% 증가"}"

그림 2: 프롬프트 구조 아키텍처 - 5가지 구성 요소와 실제 매핑 예시

💡 핵심 원칙

Golden Rule: 프롬프트를 동료에게 보여주고 따라 하라고 해보세요. 동료가 이해할 수 없으면 AI도 이해하지 못합니다. (Anthropic 공식 가이드에서 권장하는 검증 방법)

기본 원칙

명확하게

프롬프트는 구체적이고 명확해야 합니다. 모호한 요청보다는 정확한 지시사항을 제공하세요.

❌ 나쁜 예
코드 좀 써줘
✅ 좋은 예
Python으로 CSV 파일을 읽어서 각 행의 두 번째 열 값을 합산하는 함수를 작성해주세요.
함수 이름은 sum_second_column이어야 하고, pandas를 사용하지 말고 표준 라이브러리만 사용해주세요.

맥락 제공

작업의 목적, 대상 독자, 제약사항 등을 명시하면 더 나은 결과를 얻을 수 있습니다.

✅ 좋은 예
초등학교 5학년 학생들을 위한 광합성 설명을 작성해주세요.
전문 용어는 피하고, 쉬운 비유를 사용해서 설명해주세요.
3-4 문단 정도의 길이로 작성해주세요.

단계별 분해

복잡한 작업은 여러 단계로 나누어 요청하세요.

✅ 좋은 예
다음 작업을 단계별로 수행해주세요:

1. 주어진 텍스트에서 이메일 주소를 모두 추출
2. 추출한 이메일 주소의 도메인별로 그룹화
3. 각 도메인별 개수를 JSON 형식으로 출력

텍스트: [...]

형식 지정

원하는 출력 형식을 명시하면 AI 모델이 일관된 형식으로 응답합니다.

구조화된 출력

프롬프트
다음 제품 리뷰를 분석하고 JSON 형식으로 결과를 제공해주세요:

{
  "sentiment": "긍정/중립/부정",
  "rating": 1-5,
  "key_points": ["포인트1", "포인트2", ...],
  "summary": "한 줄 요약"
}

리뷰: [...]

마크다운 형식

프롬프트
Python 리스트 컴프리헨션에 대한 가이드를 작성해주세요.

다음 형식으로 작성해주세요:
- 제목은 ## 마크다운 헤더 사용
- 코드 예제는 ```python 코드 블록 사용
- 핵심 포인트는 **볼드** 처리
- 주의사항은 > 인용구 사용

예제 제공

원하는 스타일이나 형식의 예제를 제공하면 AI 모델이 패턴을 파악하여 유사한 출력을 생성합니다.

프롬프트 (Few-shot)
다음 형식으로 제품 설명을 작성해주세요:

예제 1:
입력: 노트북 - 16GB RAM, 512GB SSD, 15.6" 화면
출력: 🖥️ **강력한 성능**: 16GB RAM으로 멀티태스킹이 원활합니다.
💾 **넉넉한 저장공간**: 512GB SSD로 빠른 부팅과 파일 접근이 가능합니다.
📺 **몰입감 있는 화면**: 15.6인치 대화면으로 작업 효율을 높입니다.

예제 2:
입력: 스마트폰 - 128GB, 6.5" OLED, 5G
출력: 📱 **대용량 저장**: 128GB로 사진과 영상을 마음껏 저장하세요.
✨ **선명한 디스플레이**: 6.5인치 OLED로 생생한 화질을 경험하세요.
⚡ **초고속 연결**: 5G 지원으로 빠른 인터넷을 즐기세요.

이제 다음 제품을 같은 형식으로 설명해주세요:
입력: 태블릿 - 256GB, 11" LCD, WiFi

제약사항 명시

지켜야 할 규칙이나 피해야 할 사항을 명확히 하세요.

프롬프트
JavaScript로 배열에서 중복을 제거하는 함수를 작성해주세요.

제약사항:
- ES6+ 문법 사용
- Set을 사용하지 말 것
- 원본 배열은 변경하지 말 것
- 시간 복잡도는 O(n)이어야 함
- 함수 이름: removeDuplicates

역할 부여

모델에게 특정 전문가 역할을 부여하면 해당 관점에서 응답합니다.

시스템 프롬프트
당신은 20년 경력의 시니어 백엔드 개발자입니다.
코드 리뷰를 수행할 때 다음 사항에 집중합니다:
- 성능과 확장성
- 보안 취약점
- 코드 가독성과 유지보수성
- 베스트 프랙티스 준수

건설적이고 구체적인 피드백을 제공하되, 긍정적인 부분도 언급합니다.

반복적 개선

첫 응답이 완벽하지 않다면 추가 지시사항으로 개선하세요.

대화 예시
사용자: Python으로 간단한 계산기를 만들어줘
AI: [기본 계산기 코드 제공]

사용자: 좋아요. 이제 다음 기능을 추가해주세요:
1. 나눗셈 시 0으로 나누는 경우 에러 처리
2. 결과를 소수점 둘째 자리까지 반올림
3. 사용자가 'quit' 입력 시 프로그램 종료

AI: [개선된 코드 제공]

Before / After 비교

실제 프롬프트 개선 사례를 통해 효과적인 프롬프트 작성법을 배워보세요.

예제 1: 코드 작성 요청

❌ Before (모호함) ✅ After (명확함)
프롬프트:
"Python으로 정렬 함수 만들어줘"

문제점:
  • 어떤 정렬 알고리즘?
  • 입력 형식?
  • 제약사항 불명확
프롬프트:
"Python으로 병합 정렬(Merge Sort)을 구현해주세요.

요구사항:
- 함수 이름: merge_sort
- 입력: 정수 리스트
- 출력: 오름차순 정렬된 리스트
- 원본 리스트는 변경하지 않음
- 타입 힌트 포함"

개선점:
  • ✅ 알고리즘 명시
  • ✅ 입출력 형식 명확
  • ✅ 제약사항 구체적

예제 2: 문서 작성 요청

❌ Before ✅ After
프롬프트:
"블로그 글 써줘"

결과:
주제, 어조, 길이 모두 불명확 → 일반적인 글
프롬프트:
"기술 블로그 글을 작성해주세요.

주제: Python 가상환경 사용법
대상 독자: 프로그래밍 입문자
어조: 친근하고 교육적
길이: 800-1000단어
구조:
1. 가상환경이 필요한 이유
2. venv 설치 및 설정 (예제 포함)
3. 자주 하는 실수와 해결법
4. 요약 및 다음 단계"

결과:
정확히 원하는 형식과 내용!

예제 3: 데이터 분석 요청

❌ Before ✅ After
프롬프트:
"이 데이터 분석해줘
[데이터 붙여넣기]"

결과:
일반적인 통계만 제공
프롬프트:
"다음 매출 데이터를 분석해주세요:
[데이터 붙여넣기]

분석 목표:
- 월별 매출 트렌드 파악
- 전년 대비 성장률 계산
- 이상치 탐지 (급증/급감)

출력 형식:
## 요약
- 핵심 인사이트 3가지

## 상세 분석
- 월별 데이터 테이블
- 성장률 그래프 (Python 코드)

## 권장사항
- 비즈니스 액션 아이템"

결과:
구조화된 인사이트 + 실행 가능한 권장사항!
💡 핵심 패턴

모호한 프롬프트 → 명확한 프롬프트 변환 공식:

  1. 무엇: 정확한 작업 정의
  2. : 목적과 맥락 제공
  3. 어떻게: 구체적인 요구사항, 제약사항, 형식
  4. 예시: 원하는 스타일의 샘플

이 패턴을 따르면 90% 이상 원하는 결과를 얻을 수 있습니다!

해야 할 것 / 하지 말아야 할 것

✅ 해야 할 것
  • 구체적이고 명확한 지시사항 제공
  • 원하는 형식과 구조 명시
  • 예제 제공 (Few-shot learning)
  • 제약사항과 요구사항 명확히 하기
  • 복잡한 작업은 단계별로 분해
❌ 하지 말아야 할 것
  • 모호하거나 불명확한 요청
  • 너무 많은 작업을 한 번에 요청
  • 필요한 맥락 정보 생략
  • 암묵적 기대사항 (명시적으로 표현하기)
  • 부정적이거나 공격적인 표현

유용한 템플릿

분석 템플릿

템플릿
다음 [대상]을 분석해주세요:

[대상 내용]

다음 측면에서 분석해주세요:
1. [측면 1]
2. [측면 2]
3. [측면 3]

각 측면에 대해:
- 주요 발견사항
- 근거
- 개선 제안 (해당되는 경우)

코드 작성 템플릿

템플릿
[언어]로 [기능]을 구현해주세요.

요구사항:
- [요구사항 1]
- [요구사항 2]
- [요구사항 3]

제약사항:
- [제약사항 1]
- [제약사항 2]

예상 입력: [입력 예시]
예상 출력: [출력 예시]

Chain-of-Thought (사고 사슬)

Chain-of-Thought(CoT) 프롬프팅은 모델에게 중간 추론 단계를 명시적으로 보여주도록 유도하는 기법입니다. 복잡한 문제 해결, 수학, 논리적 추론에서 특히 효과적이며, Google Research의 Wei et al.(2022) 논문에서 처음 체계화되었습니다.

❌ 일반 프롬프트
상점에서 사과 3개를 개당 1,500원에 사고, 바나나 2송이를 개당 3,000원에 샀습니다.
전체 결제 금액은 얼마인가요?
✅ Chain-of-Thought 프롬프트
상점에서 사과 3개를 개당 1,500원에 사고, 바나나 2송이를 개당 3,000원에 샀습니다.
전체 결제 금액은 얼마인가요?

단계별로 생각해보세요:
💡 "단계별로 생각해보세요"가 핵심

Anthropic 공식 가이드에서는 이 기법을 "thinking"이라고 부르며, Claude의 경우 API에서 thinking 파라미터를 통해 내장 지원합니다. 프롬프트에서 "단계별로", "차근차근", "이유와 함께 설명해줘" 등의 표현으로도 활성화할 수 있습니다.

CoT 변형 기법

기법 설명 활용 사례
Zero-shot CoT 예시 없이 "단계별로 생각해줘"만 추가 빠른 프로토타이핑, 간단한 추론
Few-shot CoT 추론 과정이 포함된 예시 제공 복잡한 수학, 논리 문제
Self-Consistency 여러 경로로 추론 후 가장 일관된 답 선택 높은 정확도가 필요한 의사결정
Tree-of-Thought 여러 추론 경로를 탐색하고 백트래킹 전략적 계획, 복잡한 문제 해결

Zero-shot vs Few-shot 비교

프롬프트 엔지니어링의 두 가지 기본 접근 방식을 이해하는 것이 중요합니다. Zero-shot은 예시 없이 바로 작업을 지시하고, Few-shot은 원하는 결과의 예시를 제공합니다.

프롬프트 기법 스펙트럼: Zero-shot → Few-shot → Chain-of-Thought Zero-shot 예시 없이 바로 지시 + 빠르고 간결 + 간단한 작업에 적합 - 복잡한 형식 지정 어려움 - 일관성 낮을 수 있음 예시 추가 Few-shot 3~5개 예시로 패턴 학습 + 높은 형식 일관성 + 톤/스타일 제어 가능 - 토큰 사용량 증가 - 예시 품질에 의존 추론 추가 Chain-of-Thought 중간 추론 과정 명시 + 복잡한 추론 정확도 향상 + 오류 추적/검증 용이 - 응답 길이 증가 - 간단 작업에는 오버헤드 언제 어떤 기법을 사용할까? • Zero-shot: 간단한 질문, 일반적인 작업, 빠른 응답 필요 시 • Few-shot: 특정 형식/출력 패턴이 필요할 때 (JSON, 테이블, 리뷰 분석 등) • Chain-of-Thought: 수학, 논리, 분석, 의사결정 등 추론이 중요한 작업 • 조합: Few-shot + CoT를 조합하면 복잡한 작업에서도 높은 품질 달성 가능

그림 3: 프롬프트 기법 스펙트럼 - 작업 복잡도에 따른 기법 선택 가이드

XML 태그 구조화 (Claude)

XML 태그는 복잡한 프롬프트를 명확하게 구조화하는 Claude 특유의 강력한 기법입니다. Anthropic 공식 가이드에서 적극 권장하며, 지시사항, 맥락, 예시, 변수 입력을 각각의 태그로 구분하면 해석 오류를 크게 줄일 수 있습니다.

XML 구조화 예시
<instructions>
  다음 리뷰를 분석하고 긍정/부정/중립으로 분류해주세요.
  각 항목에 대해 근거를 인용구로 제시하세요.
</instructions>

<context>
  이 분석은 전자상거래 플랫폼의 고객 만족도 조사를 위한 것입니다.
</context>

<review>
  {리뷰 텍스트가 여기에 들어갑니다}
</review>

<output_format>
  JSON 형식으로 출력해주세요:
  {"sentiment": "긍정/부정/중립", "evidence": "인용문", "confidence": 0.0~1.0}
</output_format>
💡 XML 태그 사용 팁
  • 일관된 이름의 태그를 사용하세요 (<instructions>, <context>, <input> 등)
  • 자연스러운 계층 구조가 있으면 중첩 태그를 사용하세요 (예: <documents> 안에 <document>)
  • 예시는 <examples> 태그로 감싸서 지시사항과 구분하세요
  • 사용자 입력이 들어가는 부분은 <user_input> 등으로 명확히 표시하세요

System Prompt (시스템 프롬프트)

시스템 프롬프트는 모델의 기본 동작, 역할, 톤을 설정합니다. API에서는 system 파라미터로 전달하며, 모든 대화에서 일관되게 적용됩니다.

Python - 시스템 프롬프트 사용
import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=1024,
    system="""당신은 10년 경력의 시니어 Python 개발자입니다.

원칙:
- PEP 8 스타일 가이드 준수
- 타입 힌트 포함
- 명확한 변수명 사용
- 불필요한 주석 제외, 왜(Why)에 대한 주석만 포함
- 에러 처리 포함""",
    messages=[
        {"role": "user", "content": "이메일 유효성 검사 함수를 작성해줘"}
    ]
)
print(message.content)
⚠️ 시스템 프롬프트 주의사항
  • 시스템 프롬프트는 모델의 "성격"을 설정하는 데 적합합니다 (역할, 톤, 원칙)
  • 구체적인 작업 지시는 사용자 메시지에 넣는 것이 더 효과적입니다
  • 시스템 프롬프트가 너무 길면 사용자 메시지에 대한 응답 품질이 떨어질 수 있습니다
  • 보안을 위해 시스템 프롬프트에 API 키나 민감 정보를 포함하지 마세요

핵심 정리

기법 핵심 적합한 상황
명확한 지시 구체적이고 직접적인 언어 사용 모든 프롬프트
맥락 제공 목적, 대상, 배경 설명 전문적/도메인 작업
형식 지정 JSON, Markdown 등 출력 형식 명시 자동화, API 연동
Few-shot 3~5개 예시로 패턴 전달 특정 형식/톤 필요 시
Chain-of-Thought 중간 추론 과정 유도 수학, 논리, 분석
XML 구조화 태그로 프롬프트 요소 구분 복잡한 Claude 프롬프트
시스템 프롬프트 모델 역할/원칙 사전 설정 일관된 톤/행동 필요 시
반복적 개선 첫 결과를 기반으로 점진적 정제 모든 프롬프트

실무 팁

📋 프롬프트 작성 체크리스트
  • 작성 전: 목표와 성공 기준을 먼저 정의하세요
  • 작성 시: 동료가 이해할 수 있는 수준으로 구체적으로 작성하세요
  • XML 활용: 복잡한 프롬프트는 XML 태그로 구조화하세요 (Claude)
  • 예시 포함: 원하는 출력 형식의 예시를 3~5개 제공하세요
  • CoT 활용: 추론이 필요한 작업에는 "단계별로"를 추가하세요
  • 시스템 프롬프트: 역할과 원칙은 시스템 프롬프트에, 작업은 사용자 메시지에
  • 반복 개선: 첫 결과에 만족하지 말고 추가 지시로 정제하세요
  • 모델별 차이: Claude는 XML 선호, GPT는 구어체 지시 선호
  • 토큰 관리: 프롬프트가 길수록 비용과 지연 시간이 증가합니다