Saturday
AI

AI와 대화하는 기술, 프롬프트 엔지니어링프롬프트 엔지니어링 시리즈 (1/4)

Saturday, January 17, 2026

ChatGPT, Claude, Gemini... 대규모 언어 모델(LLM)의 등장은 우리가 컴퓨터와 소통하는 방식을 완전히 바꿔놓았습니다. 이제 복잡한 프로그래밍 언어 대신 자연어로 AI에게 명령을 내릴 수 있게 되었죠. 하지만 같은 AI를 사용하더라도, 어떤 사람은 놀라운 결과물을 얻고 어떤 사람은 실망스러운 답변만 받습니다. 그 차이는 무엇일까요?

바로 프롬프트 엔지니어링(Prompt Engineering) 입니다.

❝

프롬프트 엔지니어링은 AI에게 목적지까지 가는 로드맵을 제공하는 것과 같습니다. 단순히 "어딘가 좋은 곳으로 데려다줘"라고 말하는 것과 "서울역에서 출발해서 고속도로를 타고 부산역까지 가줘"라고 말하는 것의 차이입니다.

❞

이 시리즈는 총 4부작으로 구성되어 있습니다:

프롬프트 엔지니어링의 정의

프롬프트 엔지니어링은 AI 모델이 원하는 응답을 생성하도록 프롬프트를 설계하고 최적화하는 기술입니다.

여기서 프롬프트(Prompt) 란 AI 모델에 제공하는 모든 형태의 입력을 말합니다:

프롬프트 유형설명예시
질문정보를 요청하는 형태"파이썬의 리스트 컴프리헨션이 뭐야?"
지시/명령특정 작업을 수행하도록 요청"이 코드를 리팩토링해줘"
컨텍스트배경 정보 제공"나는 주니어 개발자이고..."
예시원하는 출력의 샘플"입력: 고양이 → 출력: cat"
제약 조건출력의 형식이나 범위 지정"300자 이내로 답변해줘"

프롬프트의 품질은 AI 출력의 품질과 직접적으로 연결됩니다. 모호하고 불명확한 프롬프트는 모호하고 불명확한 답변을 낳고, 구체적이고 잘 설계된 프롬프트는 정확하고 유용한 답변을 이끌어냅니다.

◈ CODE
❌ 모호한 프롬프트:
"코드 좀 봐줘"
 
✅ 명확한 프롬프트:
"아래 Python 함수에서 발생하는 IndexError의 원인을 찾아주세요.
에러가 발생하는 조건과 해결 방법을 설명해주세요.
 
def get_item(lst, idx):
    return lst[idx]
"
END

프롬프트 엔지니어링에 필요한 4가지 요소

효과적인 프롬프트를 작성하기 위해서는 네 가지 핵심 요소를 이해해야 합니다.

✦1. 프롬프트 형식

AI 모델마다, 그리고 작업 유형마다 더 잘 반응하는 프롬프트 형식이 있습니다. 같은 내용이라도 어떻게 구조화하느냐에 따라 결과가 크게 달라집니다.

직접 명령어 형식:
◈ CODE
"이메일 작성해줘: 회의 일정 변경 안내"
END
구조화된 입력 형식:
◈ CODE
작업: 이메일 작성
목적: 회의 일정 변경 안내
수신자: 팀원 전체
변경 내용: 3월 15일 오후 2시 → 3월 16일 오전 10시
어조: 공손하고 명확하게
END
JSON 형식 (프로그래밍 작업에 유용):
◈ CODE
{
  "task": "generate_email",
  "type": "meeting_reschedule",
  "details": {
    "original": "2024-03-15 14:00",
    "new": "2024-03-16 10:00",
    "reason": "참석자 일정 충돌"
  },
  "tone": "professional"
}
END
실제 비교 예시:

동일한 요청을 다른 형식으로 작성했을 때의 차이를 보겠습니다.

◈ CODE
❌ 비구조화된 요청:
"파이썬으로 파일 읽는 코드 만들어줘. 에러 처리도 하고,
큰 파일도 처리할 수 있어야 해. 로깅도 넣어줘."
 
✅ 구조화된 요청:
## 요청 사항
Python으로 파일 읽기 함수를 작성해주세요.
 
## 요구 사항
1. 파일 경로를 매개변수로 받음
2. try-except로 FileNotFoundError, PermissionError 처리
3. 대용량 파일 지원 (청크 단위 읽기, 기본 1MB)
4. logging 모듈로 시작/완료/에러 로깅
 
## 출력 형식
- 함수 코드와 사용 예시 포함
- 각 부분에 주석 추가
END

구조화된 요청은 AI가 각 요구 사항을 명확히 파악하고, 빠뜨리는 것 없이 응답할 수 있게 해줍니다.

✦2. 컨텍스트와 예시 제공

AI는 독심술사가 아닙니다. 여러분이 원하는 것을 정확히 이해하려면 충분한 맥락이 필요합니다. 컨텍스트를 제공하면 AI의 응답 정확도가 크게 향상됩니다.

컨텍스트가 부족한 경우:
◈ CODE
❌ "마케팅 문구 써줘"
 
→ AI의 고민: 어떤 제품? 어떤 타겟? 어떤 채널? 어떤 톤?
END
충분한 컨텍스트를 제공한 경우:
◈ CODE
✅ "20대 여성을 타겟으로 하는 친환경 화장품 브랜드의
인스타그램 광고 문구를 작성해주세요.
브랜드 톤은 친근하고 유쾌하며,
환경 보호의 가치를 자연스럽게 녹여주세요.
해시태그 3개도 포함해주세요."
END
예시 제공의 효과 (Few-shot):

원하는 출력의 예시를 보여주면 AI는 패턴을 학습하여 일관된 결과를 생성합니다.

◈ CODE
다음 형식으로 제품 설명을 작성해주세요:
 
[예시 1]
제품: 무선 이어폰
설명: 🎵 끊김 없는 음악의 자유 | 초경량 5g으로 착용감 제로 |
      배터리 걱정 NO, 30시간 연속 재생
 
[예시 2]
제품: 텀블러
설명: ☕ 아침의 온기를 저녁까지 | 진공 이중벽으로 12시간 보온 |
      지구를 위한 작은 선택, 일회용컵 STOP
 
이제 작성해주세요:
제품: 노트북 거치대
END

이렇게 예시를 제공하면, AI는 이모지 사용 패턴, 문장 구조, 핵심 가치 표현 방식을 학습하여 일관된 스타일의 결과물을 생성합니다.

✦3. 반복적 개선과 최적화

완벽한 프롬프트는 한 번에 만들어지지 않습니다. 결과물을 보고 프롬프트를 반복적으로 개선하는 과정이 필요합니다. 이는 모델의 가중치를 업데이트하는 "파인튜닝(Fine-tuning)"과는 다른 개념으로, 프롬프트 텍스트 자체를 다듬는 과정입니다.

반복 개선의 예시:
◈ CODE
[1차 시도]
프롬프트: "React 컴포넌트 만들어줘"
문제점: 너무 기본적인 예제만 제공됨
 
[2차 시도]
프롬프트: "React로 Todo 앱 컴포넌트 만들어줘"
문제점: 스타일링이 없고 상태 관리가 기본적임
 
[3차 시도]
프롬프트: "React와 TypeScript로 Todo 앱을 만들어줘.
요구 사항:
- useState로 할 일 목록 관리
- 할 일 추가, 완료 체크, 삭제 기능
- Tailwind CSS로 스타일링
- 빈 입력 방지 유효성 검사"
결과: 원하는 수준의 코드 생성됨
END
도메인 특화 최적화:

특정 분야의 작업에는 해당 도메인의 전문 용어와 맥락을 포함시키세요.

◈ CODE
[일반적인 요청]
"데이터베이스 쿼리 최적화해줘"
 
[도메인 특화 요청]
"PostgreSQL 14 환경에서 다음 쿼리의 실행 계획을 분석하고
최적화해주세요. 현재 users 테이블에 500만 건의 레코드가 있고,
created_at 컬럼에 B-tree 인덱스가 있습니다.
EXPLAIN ANALYZE 결과를 기반으로 개선점을 제안해주세요."
END

✦4. 멀티턴 대화

LLM의 강력한 기능 중 하나는 대화의 맥락을 유지하며 여러 차례에 걸쳐 상호작용할 수 있다는 점입니다. 복잡한 작업은 한 번에 해결하려 하지 말고, 대화를 통해 점진적으로 발전시켜 나가세요.

멀티턴 대화 활용 예시:
◈ CODE
[Turn 1 - 사용자]
"REST API 설계에 대해 알려줘"
 
[Turn 1 - AI]
(REST API의 기본 개념 설명)
 
[Turn 2 - 사용자]
"그럼 사용자 관리 API를 설계한다면 어떤 엔드포인트가 필요할까?"
 
[Turn 2 - AI]
(CRUD 기반 엔드포인트 설계 제안)
 
[Turn 3 - 사용자]
"좋아. 여기에 인증/인가 기능을 추가하려면?"
 
[Turn 3 - AI]
(JWT 기반 인증 플로우 추가 설계)
 
[Turn 4 - 사용자]
"지금까지 논의한 내용을 OpenAPI 스펙으로 정리해줘"
 
[Turn 4 - AI]
(전체 대화 맥락을 반영한 완성된 API 명세서 생성)
END

이처럼 대화를 이어가면 AI는 이전 맥락을 기억하고, 점점 더 구체적이고 맞춤화된 답변을 제공합니다.

멀티턴 대화 팁:
  • ❧새로운 주제로 전환할 때는 명시적으로 알려주세요
  • ❧이전 답변의 특정 부분을 참조할 때는 인용하세요
  • ❧긴 대화에서는 중간중간 요약을 요청하세요

프롬프트 엔지니어링의 이점

✦모델 성능 향상

잘 설계된 프롬프트는 같은 모델에서도 훨씬 뛰어난 결과를 이끌어냅니다.

◈ CODE
[성능 비교]
 
❌ 단순 프롬프트:
"버그 찾아줘: function add(a,b){return a-b}"
→ "a-b를 a+b로 바꾸세요"
 
✅ 상세 프롬프트:
"다음 JavaScript 함수를 리뷰해주세요.
1. 버그가 있다면 찾아서 설명
2. 잠재적 엣지 케이스 분석
3. 개선된 코드와 테스트 케이스 제공
 
function add(a, b) { return a - b }"
 
→ 버그 설명 + 타입 체크 필요성 언급 +
   개선 코드 + 테스트 케이스 3개 제공
END

✦편향 및 유해한 답변 감소

프롬프트에 적절한 가이드라인을 포함하면 더 균형 잡히고 안전한 응답을 얻을 수 있습니다.

◈ CODE
"[주제]에 대해 설명해주세요.
- 다양한 관점을 균형 있게 제시해주세요
- 확인되지 않은 정보는 추측임을 명시해주세요
- 민감한 내용은 객관적 사실 위주로 설명해주세요"
END

✦제어 및 예측 가능성 향상

출력 형식을 명시하면 일관된 결과를 얻을 수 있어, 자동화나 후처리가 용이해집니다.

◈ CODE
"다음 텍스트에서 핵심 정보를 추출하여 JSON 형식으로 반환해주세요.
 
출력 형식:
{
  "summary": "한 문장 요약",
  "keywords": ["키워드1", "키워드2", "키워드3"],
  "sentiment": "positive|negative|neutral",
  "confidence": 0.0-1.0
}
 
텍스트: [분석할 텍스트]"
END

✦향상된 사용자 경험

최종 사용자를 위한 AI 애플리케이션을 만들 때, 시스템 프롬프트를 잘 설계하면 더 나은 사용자 경험을 제공할 수 있습니다.

◈ CODE
[시스템 프롬프트 예시]
 
당신은 친절한 요리 도우미입니다.
 
역할:
- 사용자의 냉장고 재료로 만들 수 있는 요리를 추천합니다
- 초보자도 따라할 수 있게 단계별로 설명합니다
- 대체 재료가 있다면 함께 알려줍니다
 
응답 스타일:
- 따뜻하고 격려하는 어조를 사용합니다
- 이모지를 적절히 활용합니다
- 어려운 조리 용어는 쉽게 풀어 설명합니다
 
제한 사항:
- 음식 관련 질문에만 답변합니다
- 알레르기 정보를 항상 확인합니다
END

마치며

프롬프트 엔지니어링은 AI 시대의 새로운 리터러시입니다. 코딩을 모르더라도, 프롬프트를 잘 작성하는 것만으로도 AI의 강력한 힘을 활용할 수 있습니다.

이번 글에서 다룬 핵심 내용을 정리하면:

  1. ❧프롬프트 형식: 작업에 맞는 구조화된 형식 사용
  2. ❧컨텍스트와 예시: 충분한 맥락과 원하는 출력의 예시 제공
  3. ❧반복적 개선: 결과를 보며 프롬프트를 지속적으로 다듬기
  4. ❧멀티턴 활용: 대화를 통해 복잡한 작업을 점진적으로 해결

다음 글 Part 2: 프롬프트 유형에서는 제로샷(Zero-shot), 퓨샷(Few-shot), Chain-of-Thought 등 다양한 프롬프팅 기법을 실제 예시와 함께 깊이 있게 다뤄보겠습니다.

직접 해보기: 연습 문제

아래 프롬프트를 개선해보세요. 정답은 없습니다 - 여러분만의 방식으로 더 나은 프롬프트를 만들어보세요!

문제 1:
◈ CODE
원본: "코드 리뷰해줘"
개선: ???
END
문제 2:
◈ CODE
원본: "이메일 써줘"
개선: ???
END
문제 3:
◈ CODE
원본: "이 에러 고쳐줘: TypeError: Cannot read property 'map' of undefined"
개선: ???
END

힌트: 이번 글에서 배운 4가지 요소(형식, 컨텍스트, 구체성, 기대 출력)를 적용해보세요!

참고 자료

Finis