PHpullh
심층 가이드/AI 지식/프롬프트 엔지니어링

AI 지식 · 심층 가이드

AI 지식 프롬프트 엔지니어링 완전 정리

CoT와 Few-shot, 구조화 출력, 프롬프트 인젝션 방어까지 실무에서 반복 사용되는 프롬프트 기법을 언제 쓰고 언제 피할지 기준과 함께 묶었습니다.

주제 10개 · 예제 코드 포함 · 최종 수정 2026-08-30 · 작성 pullh 편집팀

프롬프트는 자연어로 쓰지만 동작은 코드에 가깝습니다. 한 줄을 바꾸면 출력 형식이 통째로 달라지고, 그 변화는 컴파일러가 잡아주지 않습니다. 그래서 잘 쓰는 사람과 못 쓰는 사람의 차이는 문장력이 아니라 변경을 추적하고 되돌릴 수 있는지에서 갈립니다. 기법 자체는 대부분 단순합니다. 어려운 쪽은 어떤 작업에 어떤 기법이 값을 하는지, 그리고 늘어난 토큰과 지연 시간을 감수할 만한지 판단하는 일입니다.

앞부분은 비용이 싼 기법부터 놓여 있습니다. Zero-shot vs Few-shot 프롬프팅이 예시를 몇 개 붙일지 결정하는 기준을 주고, Chain-of-Thought(CoT) 프롬프팅이 추론이 필요한 작업에서 중간 과정을 밖으로 꺼냅니다. 여기서 얻은 출력을 프로그램이 받아 쓰려면 Structured Output — JSON/XML 강제가 필요하고, 작업이 한 번의 호출로 감당되지 않으면 Prompt Chaining — 복잡한 작업 분해로 단계를 쪼갭니다.

실서비스에서 가장 늦게 발견되는 문제는 사용자 입력이 지시문으로 해석되는 경우입니다. Prompt Injection 공격과 방어에서 다루듯, 사용자 텍스트와 시스템 지시를 같은 평면에 이어 붙이면 모델은 둘을 구분할 근거가 없습니다. 외부에서 들어온 문자열은 구분자나 태그로 감싸 데이터임을 명시하고, 그 안의 명령은 따르지 말라고 시스템 프롬프트에 못 박아야 합니다. 검색 결과나 웹페이지 본문을 컨텍스트에 넣는 RAG 구성에서는 문서 자체가 공격 벡터가 되므로, 도구 호출 권한이 걸려 있다면 출력 쪽에도 검증 계층을 둬야 합니다.

01Chain-of-Thought(CoT) 프롬프팅

"단계별로 생각해보세요"(Let's think step by step)를 추가하면 복잡한 추론 정확도가 크게 향상됩니다. 특히 수학, 논리, 코딩 문제에 효과적. Few-shot CoT: 예시와 함께 추론 과정도 제공하면 더욱 강력합니다.

02Zero-shot vs Few-shot 프롬프팅

Zero-shot: 예시 없이 지시만으로 실행. Few-shot: 입력-출력 예시를 2~5개 제공. 예시가 있으면 형식과 스타일이 일관되지만 토큰이 증가합니다. 복잡한 작업일수록 Few-shot이 효과적입니다.

03Role Prompting — 페르소나 설정

"당신은 10년 경력의 시니어 Kotlin 개발자입니다"처럼 역할을 부여하면 응답 품질이 향상됩니다. 역할은 구체적일수록 좋습니다. "전문가"보다 "삼성 SDS에서 15년간 일한 시스템 아키텍트"가 더 효과적입니다.

04Structured Output — JSON/XML 강제

LLM 응답을 파싱 가능한 구조로 받기. ①시스템 프롬프트에 JSON 스키마 명시 ②"JSON만 반환하고 다른 텍스트는 금지" 명시 ③OpenAI JSON mode 활용 ④Anthropic tool_use 활용. 파싱 실패에 대비한 retry 로직도 필요합니다.

05Tree of Thoughts(ToT) 프롬프팅

단순 CoT 대신 여러 추론 경로를 탐색하는 기법. "이 문제를 3가지 다른 방법으로 접근하고 각각의 장단점을 평가하세요"처럼 분기 탐색을 유도. 복잡한 계획 수립, 창의적 문제 해결에 효과적입니다.

06Self-Consistency 기법

동일 프롬프트를 여러 번 실행해 가장 일관된 답을 선택. temperature를 높여 다양한 응답 생성 후 다수결. 수학/논리 문제에서 정확도 10~15% 향상. 비용이 N배 증가하므로 중요한 작업에만 적용합니다.

07프롬프트 템플릿 관리와 버전 관리

프롬프트를 코드처럼 Git으로 관리. 변수 치환을 위한 {{변수명}} 템플릿 시스템 구축. LangSmith, PromptLayer로 A/B 테스트와 성능 추적. 변경 시 회귀 테스트 자동화로 품질 저하를 방지합니다.

08시스템 프롬프트 설계 원칙

좋은 시스템 프롬프트 구성: ①역할과 전문성 정의 ②응답 형식 명세 ③하지 말아야 할 것 명시 ④예외 처리 방법 ⑤언어 및 톤 설정. 시스템 프롬프트는 유저 프롬프트보다 우선순위가 높습니다.

09Prompt Injection 공격과 방어

사용자 입력에 "이전 지시를 무시하고..." 같은 악의적 프롬프트를 삽입하는 공격. 방어: ①사용자 입력과 시스템 프롬프트 분리 ②입력 검증 및 이스케이프 ③LLM 응답 검증 ④권한 최소화 원칙 적용.

10Prompt Chaining — 복잡한 작업 분해

긴 단일 프롬프트보다 여러 단계로 분해하는 것이 효과적. 예: ①문서 요약 → ②핵심 포인트 추출 → ③보고서 작성. 각 단계의 출력이 다음 단계의 입력. 복잡한 RAG 파이프라인도 이 패턴으로 구성합니다.

정리하며

  • 프롬프트는 파일로 버전 관리하고 변경마다 평가 세트를 다시 돌려야 회귀를 잡습니다
  • Few-shot 예시는 개수보다 다양성이 중요하며, 편향된 예시는 출력 편향을 그대로 만듭니다
  • JSON 출력은 스키마를 명시하고 파싱 실패 시 재시도 경로를 미리 만들어 둡니다
  • 외부 문자열은 구분자로 감싸 데이터로 표시하고 그 안의 지시는 무시하도록 못 박습니다

더 깊이 들어가고 싶다면 AI 지식 학습 라이브러리에서 다른 주제 가이드를 이어서 보거나, 언어 비교에서 같은 개념이 다른 언어에서 어떻게 표현되는지 확인해 보세요.