Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 프롬프트 디버깅 — 답이 이상할 때 점검

답이 의도와 다르면 이 순서로 점검.

  1. 모델이 본 입력을 그대로 출력시켜봄
    내가 너에게 준 지시를 그대로 다시 적어줘.
    
    → 모델이 잘못 읽고 있는지 확인.
  2. 시스템 프롬프트가 충돌하는지 확인 (22장)
  3. Temperature를 0.2까지 내려보기 (23장)
  4. 출력 형식을 더 엄격하게 (“JSON만, 다른 텍스트 금지”)
  5. 예시 1~3개 추가 (Few-shot)

이 장에서 기억할 한 가지

좋은 프롬프트의 4요소: 역할 / 작업 / 맥락 / 형식

그리고 한 번에 한 작업 만. 부정 지시보다 원하는 것을 적습니다.


손으로 해볼 것

1. 같은 작업 — 나쁜 vs 좋은 프롬프트

LM Studio에서 같은 모델에 다음 두 프롬프트를 차례로 던지고 답을 비교하세요.

A.

이 회의록 정리해줘.
[회의록 원문]

B.

[역할] 너는 임원 보고용 요약 비서야.
[작업] 아래 회의록을 5줄 이내로 정리해.
[형식]
- 결정 사항 (불릿)
- 액션 아이템 (담당자 포함)
[제약] 추측 금지. 명시 안 된 건 "미정".

[회의록 원문]

두 답의 길이·정확도·구조 차이를 메모.

2. 내 업무 프롬프트 3종 만들어두기

자주 쓰는 작업 3가지를 골라 21.6, 21.7 절을 본떠 템플릿을 만들어두세요.

  • 회의록 요약 템플릿
  • 코드 리뷰 템플릿
  • 메일 초안 템플릿

스니펫·메모 앱에 저장해두면 일상이 바뀝니다.


다음 장에서는 시스템 프롬프트와 Chat Template 을 봅니다.

같은 프롬프트인데 도구마다 다르게 들리는 이유, 모델이 갑자기 “AI assistant“라고 자기 소개하는 이유가 거기 있습니다.