Skip to main content
Prompt Engineering은 LLM에게 원하는 결과를 이끌어내기 위해 입력(Prompt)을 체계적으로 설계하는 기술입니다. 코드 한 줄 없이 AI의 성능을 극대화할 수 있는 가장 접근성 높은 방법입니다.
참고 학습 목표
  • Zero-shot, Few-shot, Chain-of-Thought 기법의 차이를 동일 예시로 비교할 수 있다
  • System Prompt 설계 5가지 패턴을 실무에 적용할 수 있다
  • ReAct, Tree of Thought, Self-Consistency 등 고급 기법을 이해하고 적절한 상황에 선택할 수 있다
  • Prompt Injection 공격의 원리와 방어 기법을 설명할 수 있다
  • Databricks AI Playground와 MLflow Prompt Registry를 활용한 프롬프트 관리 워크플로우를 수립할 수 있다

Prompt Engineering이란?

LLM은 입력(프롬프트)에 따라 출력 품질이 크게 달라집니다. Prompt Engineering은 최적의 입력을 설계하여 최적의 출력을 얻는 체계적 방법론 입니다.
성공 비유: 같은 재능을 가진 사람에게 “보고서 써줘”라고 하는 것과 “A4 2장 분량으로, 표를 포함하여, 경영진 대상으로, 지난 분기 매출 분석 보고서를 작성해주세요”라고 하는 것의 결과는 완전히 다릅니다. Prompt Engineering은 후자처럼 명확하게 요청하는 기술입니다.
요소설명나쁜 예 → 좋은 예
명확성모호하지 않은 명확한 지시”요약해줘” → “3문장으로 요약해주세요”
구체성원하는 형식, 길이, 스타일 명시”분석해줘” → “표 형태로 장단점을 비교해주세요”
맥락충분한 배경 정보 제공”고객 대응해줘” → “B2B SaaS 고객이 결제 오류를 문의했습니다”
예시입출력 예시를 통한 패턴 학습설명만 → 예시 2~3개 포함

프롬프트의 과학: 왜 같은 질문에 다른 결과가 나오는가?

10,000개 이상의 프롬프트를 작성하며 깨달은 것이 있습니다. 프롬프트는 “글”이 아니라 “코드”에 가깝습니다. 단어 하나, 순서 하나가 출력을 완전히 바꿉니다. 이 섹션에서는 그 원리를 실험 결과와 함께 설명합니다.

LLM은 프롬프트의 모든 단어에 반응한다

LLM은 입력의 모든 토큰에 Attention을 배분합니다. 즉, 단어 하나의 차이가 출력 전체를 변화 시킬 수 있습니다. 실험: “간결하게” vs “상세하게” 하나의 단어 차이
# 프롬프트 A
"Databricks Unity Catalog를 간결하게 설명하세요."
→ 출력: 2~3문장, 약 50토큰

# 프롬프트 B
"Databricks Unity Catalog를 상세하게 설명하세요."
→ 출력: 10~15문장, 약 180토큰 (3.6배 차이)
“간결하게”라는 단어 하나가 출력 길이를 3배 이상 변화시킵니다. 이것은 마법이 아니라 학습 데이터에서 “간결하게” 뒤에는 짧은 텍스트가, “상세하게” 뒤에는 긴 텍스트가 빈번하게 등장 했기 때문입니다.
참고 실무 팁: 출력 길이를 제어하고 싶다면 “간결하게/상세하게” 같은 모호한 표현 대신 “3문장으로”, “500자 이내로”처럼 정량적으로 지정 하세요. 훨씬 안정적인 결과를 얻을 수 있습니다.
더 미묘한 차이도 영향을 줍니다:
프롬프트 표현출력 경향왜?
”설명하세요”교과서 스타일, 객관적설명문 학습 데이터 활성화
”알려주세요”대화체, 친근함대화 학습 데이터 활성화
”분석하세요”구조화된 분석, 표 포함 경향분석 보고서 학습 데이터 활성화
”비교하세요”표 형태, 장단점 나열비교 문서 학습 데이터 활성화

프롬프트 순서가 결과를 바꾼다

LLM은 Transformer 아키텍처 특성상 프롬프트의 앞부분과 뒷부분에 더 높은 가중치 를 부여하는 경향이 있습니다 (Primacy-Recency Effect). 중간에 있는 지시는 무시될 가능성이 높습니다. 실험: 지시 순서 변경
# 프롬프트 A: 언어 지시가 먼저
"한국어로 답하세요. 3줄로 요약하세요. 핵심 키워드를 볼드로 표시하세요."
→ 한국어로 답하지만, 3줄 초과하는 경우 발생 (뒤의 지시가 약해짐)

# 프롬프트 B: 형식 지시가 먼저
"3줄로 요약하세요. 핵심 키워드를 볼드로 표시하세요. 한국어로 답하세요."
→ 3줄은 잘 지키지만, 볼드가 누락되는 경우 발생 (중간 지시가 약해짐)
순서 배치 전략:
위치배치할 지시이유
맨 앞 (첫 줄)가장 중요한 지시 (역할, 핵심 제약)Primacy Effect — 첫 인상이 전체 방향 결정
중간보조적 지시 (형식, 스타일)상대적으로 가중치 낮음
맨 뒤 (마지막 줄)절대 어기면 안 되는 제약Recency Effect — 마지막 지시가 출력에 직접 영향
주의 핵심: System Prompt가 길어질수록 중간 지시가 무시될 확률이 높아집니다. 중요한 지시는 반드시 맨 앞 이나 맨 뒤 에 배치하세요. 특히 “절대 하지 마세요” 류의 안전 제약은 맨 뒤에 두는 것이 효과적입니다.

Negative Prompt의 함정

“~하지 마세요”라는 부정 지시는 직관과 달리 원치 않는 행동을 오히려 유발 할 수 있습니다. 왜 그럴까? LLM은 다음 토큰을 예측할 때, 프롬프트에 등장한 모든 단어의 의미를 활성화합니다. “비속어를 사용하지 마세요”라고 쓰면:
  1. “비속어”라는 개념이 모델의 활성화 공간에서 강하게 점등됩니다
  2. 관련 토큰의 확률이 미세하지만 상승합니다
  3. 특히 Temperature가 높을 때 이 효과가 두드러집니다
# 나쁜 예 (Negative Prompt)
"비속어를 사용하지 마세요. 비하 표현을 삼가세요. 차별적 언어를 쓰지 마세요."
→ "비속어", "비하", "차별"이라는 개념이 모두 활성화됨

# 좋은 예 (Positive Prompt)
"전문적이고 격식 있는 어투로 답변하세요. 존중과 포용의 언어를 사용하세요."
→ "전문적", "격식", "존중", "포용"이 활성화됨
Negative를 Positive로 변환하는 패턴:
Negative (피하세요)Positive (대신 이렇게)
“추측하지 마세요""확인된 사실만 답하세요"
"길게 쓰지 마세요""3문장 이내로 답하세요"
"기술 용어를 쓰지 마세요""초등학생도 이해할 수 있는 쉬운 말로 설명하세요"
"개인 의견을 넣지 마세요""객관적 사실과 데이터에 기반하여 답하세요"
"다른 주제로 벗어나지 마세요""오직 [주제]에 대해서만 답하세요”
성공 원칙: 프롬프트에서 “하지 마세요”를 쓸 때마다 “대신 무엇을 해야 하는가?”를 생각하세요. 금지보다 지시가 항상 더 효과적입니다. 단, 안전 제약(System Prompt 누출 금지 등)은 예외적으로 부정 지시가 필요합니다.

서브 페이지

페이지내용
기본 기법Zero-shot, Few-shot, CoT 비교 + System Prompt 5패턴 + 실전 템플릿 3종
고급 기법ReAct, ToT, Self-Consistency, Structured Output, Prompt Chaining + 최적화 기법
한국어 최적화한국어 프롬프트 최적화 + 디버깅 전략
보안Prompt Injection 공격 유형과 방어 기법
실전 활용업종별 패턴, Databricks 활용, 전문가 노하우, FAQ, 연습문제

참고 자료