21장. 프롬프트 엔지니어링 기초
이 장의 목표 같은 모델에서 2배 좋은 답 을 뽑아내는 입력 작성 기술을 익힙니다.
마법이 아니라 요령 입니다.
21.1 왜 프롬프트가 중요한가
모델 입장에서 보면 우리는 매번 “빈 종이“를 던지는 것과 같습니다.
"코드 짜줘"
→ 모델: 어떤 언어? 어떤 스타일? 누구한테 보여줄?
좋은 프롬프트는 이 빈 공간을 채워주는 일입니다.
같은 모델로 같은 작업을 시켜도 프롬프트만 바꿔서 결과 품질이 2~3배 차이 납니다.
21.2 프롬프트의 4가지 요소
좋은 프롬프트는 보통 다음 4가지가 있습니다.
1. 역할(Role) - "너는 누구야"
2. 작업(Task) - "무엇을 해줘"
3. 맥락(Context) - "이런 상황이야"
4. 형식(Format) - "이렇게 답해줘"
비교 예.
❌ 나쁜 예:
이거 정리해줘.
✅ 좋은 예:
[역할] 너는 회사 임원에게 전달할 보고서를 만드는 비서야.
[작업] 아래 회의록을 임원용 5줄 요약으로 정리해.
[맥락] 회의 참석자는 개발팀 5명, 주제는 다음 분기 로드맵이었어.
[형식] 다음 형식으로:
- 결정 사항 (불릿)
- 다음 액션 (불릿)
- 리스크 (불릿)
[원문]
...
21.3 효과 큰 패턴 10가지
① 역할 부여
너는 시니어 백엔드 엔지니어야.
PHP 코드 리뷰를 부탁할게.
모델이 답변 톤·깊이를 자동으로 맞춥니다.
② 단계별 사고 요청 (Chain of Thought)
답을 내기 전에 단계별로 분석해줘.
그 다음 최종 답을 적어줘.
특히 수학·디버깅에서 정답률이 올라갑니다. Reasoning 모델(9장)에는 이미 적용된 패턴.
③ 예시 제공 (Few-shot)
다음 예시처럼 변환해줘.
입력: "오늘 회의 끝나고 점심 같이 먹자"
출력: {"intent": "request_meal", "time": "after_meeting"}
입력: "내일 3시까지 보고서 보내주세요"
출력: {"intent": "request_document", "deadline": "tomorrow_15:00"}
입력: "{사용자 입력}"
출력:
JSON·태그·분류 같은 정형 출력에 강력.
④ 명시적 부정 (Negative)
다음을 답변에 포함하지 마:
- 인사말
- "물론입니다" 같은 서두
- 답변 끝의 추가 설명
답이 깔끔해집니다.
⑤ 형식 지정
다음 JSON 형식으로만 답해. 다른 설명 없음.
{
"summary": "...",
"actions": ["...", "..."],
"risks": ["...", "..."]
}
자동화 파이프라인에 핵심.
⑥ 길이 제한
3문장 이내로 답해.
또는
200자 이내, 마크다운 없이.
로컬 AI에서는 속도와도 직결됩니다.
⑦ 모를 때 모른다고
확실하지 않으면 "모르겠다"라고 답해.
추측은 표시해줘.
환각(34장) 줄이는 가장 쉬운 방법.
⑧ 한국어 강제
모든 답변은 한국어로만.
영어 단어는 필요할 때만 괄호로.
다국어 모델이 자꾸 영어로 답할 때.
⑨ 사용자 페르소나
나는 PHP 8년차 개발자야.
초보자 설명 빼고 핵심만.
수준 맞춤.
⑩ 자기 검토 요청
답을 적은 뒤에,
스스로 검토해서 빈틈을 한 줄로 적어줘.
품질이 한 단계 올라갑니다.
21.4 안 좋은 패턴 5가지
① 모호한 명령
❌ “잘 정리해줘” → “잘“이 뭔지 모름.
② 다중 작업 한 번에
❌ “이거 요약하고, 키워드 뽑고, 영어로 번역하고, JSON으로” → 결과가 무너집니다. 한 번에 하나 가 원칙.
③ 모순된 지시
❌ “짧게 자세히 설명해줘” → 두 지시가 충돌.
④ 부정만 잔뜩
❌ “이거 하지 마, 저거 하지 마, 그것도 하지 마…” → 모델이 뭘 해야 할지 모름. 원하는 것도 함께 적기.
⑤ 너무 친절한 인사
❌ “안녕하세요 모델님. 부탁드려도 될까요? 가능하시다면…” → 응답이 늘어지고 토큰 낭비. 직접·간결 이 더 좋은 답을 부릅니다.
21.5 한국어 프롬프트 특수 팁
존댓말 vs 반말
모델은 입력 톤을 그대로 반영하는 경향.
- 반말로 물으면 → 답도 캐주얼
- 존댓말로 물으면 → 답도 격식
회사용이라면 시스템 프롬프트에:
모든 답변은 정중한 존댓말로.
영어 단어 섞임 방지
작은 한국어 모델은 가끔 영어 단어로 튕깁니다.
모든 답은 한국어로만 작성해.
영어 단어는 한국어 음차로 적어줘.
예: "API" → "API(에이피아이)"
한국어가 약한 모델은 영어 프롬프트로
체감 품질이 더 좋을 때가 있습니다.
You: Write a Korean summary of:
[한국어 원문]
21.6 코드 작업 프롬프트 템플릿
가장 자주 쓸 두 가지.
리팩터링
[역할] 너는 시니어 PHP 엔지니어야.
[작업] 아래 코드를 SOLID 원칙에 맞게 리팩터링해.
[제약]
- 동작은 절대 바뀌면 안 됨
- 변수명은 한 번에 의미가 보이게
- 100자 이내 함수로
[형식]
- 변경 전후 diff 형식으로
- 끝에 "변경 이유 1줄씩" 정리
[코드]
...
디버깅
[작업] 아래 에러의 원인 후보 3개를 우선순위로 말해줘.
[정보]
- 환경: macOS 15, PHP 8.3
- 재현: 로그인 직후 100% 발생
- 로그:
...
[형식]
1. 가장 가능성 높은 원인
2. 검증 방법
3. 대안 시나리오
21.7 회사 업무 프롬프트 템플릿
회의록 요약
다음 회의록을 임원 보고용으로 정리해.
[형식]
- 결정 사항 (불릿)
- 액션 아이템 (담당자/기한 포함)
- 보류 사항 (불릿)
- 다음 회의 안건 (불릿)
가능하면 5줄 이내. 추측 금지. 명시되지 않은 건 "미정".
[원문]
...
메일 초안
다음 상황에 맞는 한국어 메일 초안을 써줘.
상황: 외주사에 추가 비용 요청을 정중하게 거절
관계: 1년 이상 거래
톤: 정중하지만 단호
[형식]
- 제목
- 본문 5문단 이내
- 인사말 / 본문 / 마무리
---
21.8 프롬프트 디버깅 — 답이 이상할 때 점검
답이 의도와 다르면 이 순서로 점검.
- 모델이 본 입력을 그대로 출력시켜봄
→ 모델이 잘못 읽고 있는지 확인.내가 너에게 준 지시를 그대로 다시 적어줘. - 시스템 프롬프트가 충돌하는지 확인 (22장)
- Temperature를 0.2까지 내려보기 (23장)
- 출력 형식을 더 엄격하게 (“JSON만, 다른 텍스트 금지”)
- 예시 1~3개 추가 (Few-shot)
이 장에서 기억할 한 가지
좋은 프롬프트의 4요소: 역할 / 작업 / 맥락 / 형식
그리고 한 번에 한 작업 만. 부정 지시보다 원하는 것을 적습니다.
손으로 해볼 것
1. 같은 작업 — 나쁜 vs 좋은 프롬프트
LM Studio에서 같은 모델에 다음 두 프롬프트를 차례로 던지고 답을 비교하세요.
A.
이 회의록 정리해줘.
[회의록 원문]
B.
[역할] 너는 임원 보고용 요약 비서야.
[작업] 아래 회의록을 5줄 이내로 정리해.
[형식]
- 결정 사항 (불릿)
- 액션 아이템 (담당자 포함)
[제약] 추측 금지. 명시 안 된 건 "미정".
[회의록 원문]
두 답의 길이·정확도·구조 차이를 메모.
2. 내 업무 프롬프트 3종 만들어두기
자주 쓰는 작업 3가지를 골라 21.6, 21.7 절을 본떠 템플릿을 만들어두세요.
- 회의록 요약 템플릿
- 코드 리뷰 템플릿
- 메일 초안 템플릿
스니펫·메모 앱에 저장해두면 일상이 바뀝니다.
다음 장에서는 시스템 프롬프트와 Chat Template 을 봅니다.
같은 프롬프트인데 도구마다 다르게 들리는 이유, 모델이 갑자기 “AI assistant“라고 자기 소개하는 이유가 거기 있습니다.