Phase 1: 기초 | 예상 학습 시간: 30분


🎯 학습 목표

  • 명확한 프롬프트와 모호한 프롬프트의 차이를 실제 예시로 구분할 수 있다
  • 컨텍스트, 지시, 출력 형식이라는 3요소를 갖춘 프롬프트를 작성할 수 있다
  • 긍정적 지시와 부정적 지시를 언제 어떻게 조합하는지 이해한다

1. 프롬프트 품질이 결과를 결정한다

LLM은 입력을 통계적으로 완성하는 모델입니다. 모호한 입력은 모호한 출력을 낳습니다. “요약해줘"라고 하면 모델은 길이, 대상 독자, 언어, 형식 등 모든 것을 스스로 추측합니다.

좋은 프롬프트는 모델이 추측해야 할 변수를 줄이는 것입니다.

나쁜 예:

이 코드 봐줘.

좋은 예:

다음 Python 코드를 리뷰해주세요.
- 버그 가능성이 있는 부분을 찾아 줄 번호와 함께 지적하세요
- 각 문제에 대해 수정된 코드 스니펫을 제시하세요
- 스타일 개선은 별도 섹션으로 분리하세요

[코드]

같은 모델에서 같은 작업을 하더라도 프롬프트 품질에 따라 결과물의 유용성이 수십 배 차이납니다.


2. 프롬프트의 3요소

잘 구성된 프롬프트는 다음 세 가지를 포함합니다.

2-1. 컨텍스트 (Context)

모델이 상황을 이해하도록 배경 정보를 제공합니다.

당신은 스타트업의 백엔드 엔지니어입니다.
현재 고객 이탈 알림 시스템을 구축 중입니다.

컨텍스트가 없으면 모델은 일반적인 답변을 제공합니다. 컨텍스트가 있으면 훨씬 구체적이고 적용 가능한 답변을 만들어냅니다.

2-2. 지시 (Instruction)

무엇을 해야 하는지 동사로 시작하는 명확한 문장으로 작성합니다.

모호한 지시명확한 지시
이 API 설명해줘이 API의 인증 방식, 주요 엔드포인트, rate limit을 표 형식으로 정리해줘
개선해줘가독성을 높이되 로직은 변경하지 말고 리팩토링해줘
분석해줘월별 매출 데이터에서 이상치를 찾고 각 이상치의 가능한 원인을 2가지씩 제시해줘

2-3. 출력 형식 (Output Format)

원하는 응답의 구조를 명시합니다.

응답은 다음 형식으로 작성하세요:
1. 한 줄 요약 (20자 이내)
2. 핵심 문제 (bullet 3개)
3. 권장 조치 (번호 매긴 목록)

3. 긍정적 지시 vs 부정적 지시

"~하지 마라"보다 “~해라"가 더 효과적입니다.

❌ 전문 용어를 쓰지 마세요.
✅ 고등학생도 이해할 수 있는 언어로 설명하세요.
❌ 길게 쓰지 마세요.
✅ 150단어 이내로 작성하세요.

부정적 지시가 효과적인 경우는 명시적으로 제외해야 할 대상이 있을 때입니다.

✅ Python 코드로 작성하되, 외부 라이브러리는 사용하지 마세요.
✅ 예시를 들되, 실제 회사 이름은 포함하지 마세요.

4. 실습: 프롬프트 개선하기

다음 Python 코드를 사용해 직접 프롬프트 품질을 테스트해볼 수 있습니다.

import anthropic

client = anthropic.Anthropic(api_key="your-api-key")

def test_prompt(prompt: str) -> str:
    message = client.messages.create(
        model="claude-sonnet-4-6",
        max_tokens=1024,
        messages=[{"role": "user", "content": prompt}]
    )
    return message.content[0].text

# 비교 테스트
bad_prompt = "REST API 설명해줘"

good_prompt = """
REST API의 핵심 개념을 설명해주세요.
- 대상: API를 처음 배우는 주니어 개발자
- 포함할 내용: HTTP 메서드(GET/POST/PUT/DELETE), 상태 코드, URL 설계 원칙
- 각 개념마다 실제 엔드포인트 예시를 하나씩 포함하세요
- 형식: 마크다운 헤더를 사용하되 전체 길이는 400단어 이내
"""

print("=== 모호한 프롬프트 결과 ===")
print(test_prompt(bad_prompt))

print("\n=== 명확한 프롬프트 결과 ===")
print(test_prompt(good_prompt))

두 결과물을 비교하면 컨텍스트와 형식 지정이 얼마나 큰 차이를 만드는지 확인할 수 있습니다.


5. 자주 쓰는 프롬프트 패턴

단계별 수행 패턴

다음을 순서대로 수행하세요:
1. 먼저 [A]를 분석하세요
2. 그 결과를 바탕으로 [B]를 작성하세요
3. 마지막으로 [C] 형식으로 정리하세요

제약 조건 명시 패턴

[요청 내용]

제약 조건:
- 언어: Python 3.10 이상
- 외부 라이브러리: requests만 허용
- 응답 길이: 50줄 이내

예시 포함 패턴 (One-shot)

다음 형식으로 에러 메시지를 작성해주세요.

예시:
입력: NullPointerException
출력: "참조한 객체가 존재하지 않습니다. 변수 초기화 여부를 확인하세요."

이제 다음 에러를 변환하세요:
입력: IndexOutOfBoundsException

📝 핵심 요약

  1. 프롬프트 품질이 결과 품질을 직접 결정한다 — 모델이 추측할 변수를 줄여라
  2. 좋은 프롬프트 = 컨텍스트 + 명확한 지시 + 출력 형식 3요소
  3. “하지 마라"보다 “이렇게 해라"가 더 신뢰할 수 있는 결과를 낳는다
  4. 단계별 수행, 제약 조건 명시, 예시 포함이 가장 자주 쓰이는 패턴이다
  5. 프롬프트는 한 번에 완성되지 않는다 — 결과를 보고 반복 개선하는 것이 정상적인 워크플로우다

🔗 참고 자료


⬅️ 이전: Day 01 — Claude란 무엇인가? | 다음: Day 03 — 컨텍스트와 대화 흐름 ➡️