본문 바로가기
AI 개발 가이드

프롬프트 엔지니어링 개발자용 실전 가이드 - 원하는 답을 뽑아내는 기술

by 소개왕 탑백귀 2026. 4. 4.

프롬프트 엔지니어링 개발자용 실전 가이드 - 원하는 답을 뽑아내는 기술

2026년 4월 기준 | AI 개발 가이드 · 프롬프트 설계

요약: "AI한테 물어봤는데 엉뚱한 답이 나와요"는 대부분 프롬프트 문제입니다. 개발자 관점에서 실제로 효과가 있었던 프롬프트 기법 8가지를 코드 예제와 함께 정리했습니다.

프롬프트가 왜 중요한가

같은 AI 모델이라도 프롬프트에 따라 결과가 완전히 달라집니다. 예를 들어보겠습니다.

# 나쁜 프롬프트
"로그인 기능 만들어줘"

# 좋은 프롬프트
"FastAPI + SQLAlchemy로 JWT 기반 로그인 API를 만들어줘.
- POST /auth/login 엔드포인트
- email, password를 받아서 JWT 토큰 반환
- 비밀번호는 bcrypt로 해싱
- 토큰 만료 시간은 1시간
- Pydantic 모델로 요청/응답 스키마 정의"

첫 번째 프롬프트로는 어떤 프레임워크로, 어떤 방식의 로그인인지 AI가 추측해야 합니다. 두 번째 프롬프트는 원하는 것을 정확히 지정했기 때문에 한 번에 쓸만한 코드가 나옵니다.

프롬프트 엔지니어링은 거창한 게 아닙니다. "AI에게 명확하게 요청하는 기술"입니다.

1. 역할 지정 (Role Setting)

AI에게 역할을 부여하면 답변의 톤과 깊이가 달라집니다.

# 역할 없이
"이 코드를 리뷰해줘"

# 역할 지정
"""당신은 10년 경력의 시니어 백엔드 개발자입니다.
보안 취약점, 성능 이슈, 코드 스타일을 중심으로 리뷰해주세요.
각 이슈에 심각도(상/중/하)를 표시해주세요."""

역할을 지정하면 AI가 해당 전문가의 관점에서 답변합니다. 시니어 개발자로 설정하면 초보자가 놓치기 쉬운 보안 이슈까지 짚어줍니다.

2. 출력 형식 강제

API 연동 시 가장 중요한 기법입니다. AI의 응답을 코드로 파싱해야 하는데, 형식이 제각각이면 파싱이 불가능합니다.

prompt = """다음 리뷰를 분석해서 JSON으로 응답해주세요.

리뷰: "배송은 빨랐는데 제품 품질이 별로예요. 가격 대비 아쉽습니다."

응답 형식 (이 형식을 정확히 지켜주세요):
{
    "sentiment": "positive" 또는 "negative" 또는 "mixed",
    "keywords": ["키워드1", "키워드2"],
    "score": 1~5 사이 정수
}"""

출력 형식을 예시와 함께 명확히 지정하면, AI가 거의 100% 해당 형식을 따릅니다. JSON을 요청할 때는 반드시 예시 구조를 보여주세요.

3. Few-shot 예제 제공

"이런 식으로 해줘"라고 예제를 보여주면, AI가 패턴을 학습해서 적용합니다.

prompt = """함수 이름을 한국어 설명으로 바꿔주세요.

예시:
- get_user_by_id → 사용자 ID로 사용자 조회
- calculate_total_price → 총 가격 계산
- send_email_notification → 이메일 알림 전송

변환할 함수:
- validate_user_input
- fetch_latest_transactions
- generate_monthly_report"""

예제 3개면 충분합니다. AI가 패턴(영어 함수명 → 한국어 동사+목적어 구조)을 파악하고 일관되게 적용합니다.

4. 단계별 사고 유도 (Chain of Thought)

복잡한 문제는 "단계별로 생각해줘"라고 요청하면 정확도가 올라갑니다.

# 바로 답을 요구
"이 SQL 쿼리의 성능 문제를 찾아줘"

# 단계별 사고 유도
"""이 SQL 쿼리의 성능을 분석해주세요. 다음 단계로 진행해주세요:

1단계: 쿼리가 하는 일을 한 문장으로 설명
2단계: 실행 계획을 예측 (어떤 순서로 테이블에 접근하는지)
3단계: 인덱스 사용 여부 확인
4단계: 성능 병목 지점 식별
5단계: 개선된 쿼리 제안"""

단계를 나눠주면 AI가 중간 과정을 건너뛰지 않습니다. 특히 디버깅이나 코드 분석에서 효과가 큽니다.

5. 제약 조건 명시

원하지 않는 결과를 피하려면 제약 조건을 명확히 써주세요.

prompt = """파이썬으로 CSV 파서를 만들어주세요.

제약 조건:
- 외부 라이브러리 사용 금지 (pandas, csv 모듈 제외)
- Python 3.8 이상 호환
- 타입 힌트 필수
- 파일 크기 1GB 이상도 처리 가능하도록 (메모리에 전체 로드 X)
- 에러 처리: 잘못된 행은 건너뛰고 로그 출력"""

제약 조건 없이 요청하면 AI가 가장 흔한 방법(pandas.read_csv)으로 답합니다. 제약을 걸면 상황에 맞는 맞춤 코드가 나옵니다.

6. 구분자로 데이터 분리

프롬프트에 데이터를 함께 넣을 때, 지시사항과 데이터를 명확히 구분해야 합니다.

# 나쁜 예: 지시와 데이터가 섞임
"다음 에러 로그를 분석해줘 Error: connection timeout at line 42..."

# 좋은 예: 구분자로 명확히 분리
"""다음 에러 로그를 분석하고, 원인과 해결 방법을 제시해주세요.

---에러 로그 시작---
Error: connection timeout at line 42
Stack trace: ...
---에러 로그 끝---

분석 결과를 원인/영향/해결방법 형식으로 정리해주세요."""

XML 태그, 마크다운 구분선, 대괄호 등 어떤 구분자든 상관없습니다. 핵심은 AI가 "어디까지가 지시이고 어디부터가 데이터인지" 명확히 구분할 수 있게 하는 것입니다.

7. 네거티브 프롬프트

"이것을 하지 마"라고 명시하면 원치 않는 결과를 줄일 수 있습니다.

prompt = """이 함수의 버그를 찾아주세요.

하지 말아야 할 것:
- 코드를 전체 다시 작성하지 마세요
- 스타일이나 네이밍 관련 제안은 하지 마세요
- "이 코드는 잘 작성되었습니다" 같은 칭찬은 빼주세요

해야 할 것:
- 로직 버그만 찾아주세요
- 버그 위치를 줄 번호로 표시해주세요
- 수정 코드를 함께 제시해주세요"""

AI는 기본적으로 "친절하게" 답하려고 합니다. 코드 리뷰를 요청하면 칭찬부터 시작하고, 스타일 제안까지 달아줍니다. 네거티브 프롬프트로 불필요한 출력을 차단하면 핵심만 남습니다.

8. 체이닝 (여러 단계로 나누기)

복잡한 작업은 한 번에 시키지 말고, 여러 단계로 나눠서 각 단계의 출력을 다음 단계의 입력으로 넣는 방식입니다.

# 1단계: 요구사항 분석
step1 = ask_ai("다음 요구사항을 기능 목록으로 정리해줘: ...")

# 2단계: 설계
step2 = ask_ai(f"다음 기능 목록에 대한 클래스 설계를 해줘:\n{step1}")

# 3단계: 구현
step3 = ask_ai(f"다음 설계를 파이썬으로 구현해줘:\n{step2}")

# 4단계: 테스트
step4 = ask_ai(f"다음 코드에 대한 pytest 테스트를 작성해줘:\n{step3}")

각 단계에서 AI가 집중해야 할 범위가 좁아지기 때문에 결과 품질이 올라갑니다. API 비용은 조금 더 들지만, 한 번에 복잡한 요청을 보내서 잘못된 결과를 받고 재시도하는 것보다 효율적입니다.

실전 프롬프트 템플릿

제가 실제로 쓰고 있는 프롬프트 구조입니다. 복사해서 쓰세요.

[역할]
당신은 {역할}입니다.

[작업]
{구체적인 작업 설명}

[입력 데이터]
---
{데이터}
---

[출력 형식]
{원하는 출력 형식 예시}

[제약 조건]
- {조건1}
- {조건2}

[하지 말 것]
- {네거티브 조건}

모든 프롬프트에 이 구조를 다 쓸 필요는 없습니다. 상황에 맞는 항목만 골라서 조합하면 됩니다. 중요한 건 명확하고 구체적으로 요청하는 것입니다.

참고: 프롬프트 엔지니어링은 정답이 있는 분야가 아닙니다. 같은 기법이라도 모델과 작업에 따라 효과가 다를 수 있으니, 직접 실험해보면서 자신만의 패턴을 찾는 것이 중요합니다.