같은 모델인데 왜 결과가 다를까?
두 사람이 같은 ChatGPT에게 질문합니다.
A: "마케팅 전략 알려줘"
B: "B2B SaaS 스타트업(월 구독 30만 원, 타겟: 중소기업 HR 담당자)의
신규 고객 획득을 위한 콘텐츠 마케팅 전략 3가지를 알려줘.
각 전략에 실행 방법과 예상 비용을 포함해줘."
A는 교과서 같은 일반론을, B는 즉시 실행 가능한 구체적 전략을 얻습니다.
모델 능력의 차이가 아니라 질문의 차이입니다.
프롬프트 엔지니어링이란?
LLM에게 원하는 출력을 이끌어내기 위해 입력(프롬프트)을 설계하는 기술입니다.
flowchart LR
subgraph INPUT["프롬프트 구성 요소"]
direction TB
I1["지시 (Instruction)\n무엇을 해야 하는가"]
I2["맥락 (Context)\n배경 정보"]
I3["입력 데이터\n처리할 내용"]
I4["출력 형식\n어떻게 답해야 하는가"]
end
INPUT -->|"잘 설계된 프롬프트"| LLM["LLM"]
LLM --> OUT["원하는 결과"]
모든 요소를 항상 넣을 필요는 없습니다. 상황에 맞게 조합합니다.
원칙 1: 명확성 — 모호한 단어를 제거하라
LLM은 "좋은", "적당한", "간단한" 같은 주관적 표현을 사람마다 다르게 해석합니다.
flowchart TD
subgraph BAD["❌ 모호한 프롬프트"]
B1["'짧게 요약해줘'"]
B2["어느 정도가 짧은가?\n1줄? 5줄? 100자?"]
end
subgraph GOOD["✅ 명확한 프롬프트"]
G1["'3문장 이내로 핵심만 요약해줘'"]
G2["명확한 기준 → 일관된 결과"]
end
B1 -->|"해석 불확실"| B2
G1 -->|"명확한 기준"| G2
명확성 체크리스트
| 모호한 표현 | 명확한 표현 |
|---|---|
| 짧게 써줘 | 200자 이내로 써줘 |
| 쉽게 설명해줘 | 초등학생도 이해할 수 있게 설명해줘 |
| 자세히 써줘 | 각 항목을 2~3문장으로 설명해줘 |
| 좋은 예시 들어줘 | 실제 회사명과 수치를 포함한 예시 3개를 들어줘 |
원칙 2: 구체성 — 맥락을 충분히 제공하라
LLM은 여러분의 상황을 모릅니다. 맥락이 없으면 일반론을 줄 수밖에 없습니다.
flowchart LR
subgraph CONTEXT["맥락 추가 전후 비교"]
direction TB
C1["❌ 맥락 없음\n'이메일 써줘'"]
C2["✅ 맥락 있음\n'고객사 미팅이 다음주 화요일로\n확정됐음을 알리는 비즈니스 이메일.\n수신: 김철수 부장님(중견기업 IT팀장)\n발신: 나(SaaS 영업 담당)\n톤: 정중하고 간결하게'"]
end
C1 -->|"결과"| R1["일반적인 이메일 템플릿"]
C2 -->|"결과"| R2["즉시 사용 가능한 맞춤 이메일"]
맥락의 6하원칙
누가(Who): 나는 누구인가? 대상은 누구인가?
무엇을(What): 원하는 결과물은?
왜(Why): 이 결과물의 목적은?
언제(When): 시간 제약이 있는가?
어디서(Where): 어떤 채널/플랫폼에서 사용되는가?
어떻게(How): 형식·분량·톤은?
원칙 3: 구조화 — 복잡한 지시는 나눠라
한 번에 많은 것을 요구하면 LLM이 일부를 빠뜨립니다.
flowchart TD
subgraph UNSTRUCTURED["❌ 비구조화"]
U["'파이썬으로 로그인 기능 만들어줘
그리고 JWT 토큰 쓰고 비밀번호는
해시해야 하고 에러 처리도 해줘
그리고 테스트 코드도 써줘'"]
end
subgraph STRUCTURED["✅ 구조화"]
S1["역할: 시니어 백엔드 개발자"]
S2["작업: 파이썬 로그인 API 구현"]
S3["요구사항:\n1. JWT 토큰 인증\n2. bcrypt 비밀번호 해싱\n3. 입력값 유효성 검사\n4. HTTP 상태코드 적절히 반환"]
S4["출력: 코드 + 각 함수 설명 + pytest 테스트"]
S1 --> S2 --> S3 --> S4
end
번호 매기기, 불릿 포인트, 섹션 구분이 LLM이 지시를 빠뜨리지 않도록 도와줍니다.
원칙 4: 출력 형식 지정
형식을 지정하면 후처리 없이 바로 사용할 수 있는 결과를 얻습니다.
flowchart LR
subgraph FORMATS["출력 형식 예시"]
direction TB
F1["마크다운 표\n'결과를 마크다운 표로 정리해줘'"]
F2["JSON\n'JSON 형식으로 반환해줘:\n{name, score, reason}'"]
F3["번호 목록\n'1. 2. 3. 형식으로 5개 작성'"]
F4["코드 블록\n'파이썬 코드만 코드 블록으로'"]
end
형식 지정 예시
다음 5개 항목을 아래 JSON 형식으로 출력해줘:
[
{
"title": "제목",
"summary": "한 줄 요약",
"difficulty": "상/중/하",
"tags": ["태그1", "태그2"]
}
]
프롬프트 개선 반복 패턴
첫 번째 시도가 완벽할 필요는 없습니다. 반복하며 개선합니다.
flowchart LR
P1["초안 프롬프트"] --> R1["결과 검토"]
R1 -->|"부족한 부분 파악"| P2["프롬프트 수정"]
P2 --> R2["결과 검토"]
R2 -->|"만족"| DONE["최종 프롬프트"]
R2 -->|"추가 개선"| P3["프롬프트 수정"]
P3 --> DONE
개선 질문들:
- 어떤 부분이 원하던 것과 다른가?
- 빠진 맥락이 있는가?
- 출력이 너무 길거나 짧은가?
- 형식이 맞는가?
실전 비교: 블로그 글 아이디어
❌ "블로그 아이디어 줘"
✅ "개발자를 대상으로 하는 기술 블로그에 올릴
'LLM 활용' 관련 글 아이디어 5개를 제안해줘.
조건:
- 각 아이디어는 제목 + 한 줄 설명 + 예상 독자 레벨(초급/중급/고급)
- 이미 많이 다뤄진 ChatGPT 사용법 제외
- 실용적이고 코드 예제를 포함할 수 있는 주제
마크다운 표 형식으로 출력"
정리
| 원칙 | 핵심 | 적용 |
|---|---|---|
| 명확성 | 모호한 표현 제거 | 수치·기준으로 대체 |
| 구체성 | 맥락 충분히 제공 | 6하원칙 활용 |
| 구조화 | 복잡한 지시 나누기 | 번호·불릿 사용 |
| 형식 지정 | 출력 형태 명시 | JSON·표·목록 등 |
| 반복 개선 | 첫 시도는 초안 | 부족한 부분 파악·수정 |
다음 편에서는 역할 부여와 Few-shot — LLM에게 페르소나를 주고 예시를 보여주는 강력한 기법을 배웁니다.