포스트

[이제와서 시작하는 Claude AI 마스터하기 #3] 효과적인 프롬프트 작성법

[이제와서 시작하는 Claude AI 마스터하기 #3] 효과적인 프롬프트 작성법

프롬프트 엔지니어링이란?

프롬프트 엔지니어링은 AI에게 더 나은 답변을 받기 위해 질문을 최적화하는 기술입니다. 같은 내용을 물어봐도 어떻게 질문하느냐에 따라 답변의 질이 크게 달라집니다. 특히 Claude 4와 같은 최신 모델에서는 더욱 정교한 프롬프트 전략이 필요합니다.

최신 Claude 모델의 특징

모델 특징 권장 사용법
Claude 4 Opus 최고 성능, 복잡한 추론 창작, 연구, 복잡한 문제 해결
Claude 4 Sonnet 균형잡힌 성능 일반적인 업무, 코딩
Claude 4 Haiku 빠른 속도 간단한 질문, 분류 작업

기본 원칙

1. 명확성 (Clarity)

AI는 마음을 읽을 수 없습니다. 구체적이고 명확하게 요청하세요.

모호한 프롬프트:

1
이거 좀 고쳐줘

명확한 프롬프트:

1
2
3
이 Python 함수에서 발생하는 IndexError를 수정해주세요.
함수는 리스트의 중복 요소를 제거하는 역할을 합니다.
[코드 첨부]

Claude 4 최적화 팁:

1
2
응답이 음성 합성 엔진으로 읽힐 예정이므로, 줄임표(...) 사용을 피해주세요.
음성 합성 엔진이 발음하기 어려워합니다.

2. 맥락 제공 (Context)

배경 정보를 충분히 제공하면 더 적절한 답변을 받을 수 있습니다.

맥락 없는 프롬프트:

1
REST API 만들어줘

맥락 있는 프롬프트:

1
2
3
4
5
6
Node.js와 Express를 사용해서 블로그용 REST API를 만들어주세요.
필요한 기능:
- 게시글 CRUD
- 사용자 인증 (JWT)
- 댓글 기능
MongoDB를 데이터베이스로 사용합니다.

문서 처리 시 XML 태그 활용:

1
2
3
4
5
6
7
8
9
10
<documents>
  <document index="1">
    <source>annual_report_2023.pdf</source>
    <document_content>
      
    </document_content>
  </document>
</documents>

연간 보고서를 분석하여 Q3 집중 영역을 추천해주세요.

3. 구조화 (Structure)

복잡한 요청은 번호나 불릿 포인트로 구조화하세요.

구조화된 프롬프트:

1
2
3
4
5
6
7
8
9
React 컴포넌트를 최적화해주세요:

1. 현재 문제: 불필요한 리렌더링 발생
2. 컴포넌트 유형: 상품 목록 표시
3. 요구사항:
   - React.memo 적용
   - useMemo로 계산 최적화
   - useCallback으로 함수 최적화
4. 주의사항: 기존 기능 유지

고급 프롬프트 기법

1. 역할 부여 (Role Playing)

Claude에게 특정 역할을 부여하면 더 전문적인 답변을 받을 수 있습니다.

1
2
3
당신은 10년 경력의 시니어 백엔드 개발자입니다.
주니어 개발자에게 마이크로서비스 아키텍처의 
장단점을 설명해주세요.

시스템 프롬프트 활용:

1
2
3
4
5
6
7
8
9
10
11
12
import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-3-7-sonnet-20250219",
    max_tokens=2048,
    system="당신은 Fortune 500 회사의 숙련된 데이터 과학자입니다.",
    messages=[
        {"role": "user", "content": "이 데이터셋에서 이상치를 분석해주세요: <dataset></dataset>"}
    ]
)

2. 단계별 사고 (Step-by-Step)

복잡한 문제는 단계별로 해결하도록 요청하세요.

1
2
3
4
5
6
7
8
9
10
다음 알고리즘 문제를 단계별로 풀어주세요:

문제: 주어진 배열에서 가장 긴 연속된 수열의 길이 구하기
입력: [100, 4, 200, 1, 3, 2]
출력: 4 (수열: 1, 2, 3, 4)

1. 먼저 문제를 분석해주세요
2. 해결 방법을 설명해주세요
3. 코드로 구현해주세요
4. 시간/공간 복잡도를 분석해주세요

확장 사고 (Extended Thinking) 활용:

1
2
3
이 수학 문제를 철저하고 자세히 생각해보세요.
다양한 접근법을 고려하고 완전한 추론 과정을 보여주세요.
첫 번째 접근법이 작동하지 않으면 다른 방법을 시도해보세요.

구조화된 Chain of Thought:

1
2
3
4
5
6
7
<thinking>
먼저 문제를 분석해보겠습니다...
</thinking>

<solution>
해결책은 다음과 같습니다...
</solution>

3. 예시 제공 (Few-shot Learning)

원하는 형식의 예시를 제공하면 같은 형식으로 답변합니다.

1
2
3
4
5
6
7
8
다음 형식으로 Git 커밋 메시지를 작성해주세요:

예시:
- feat: 사용자 인증 기능 추가
- fix: 로그인 시 발생하는 null 에러 수정
- docs: README에 설치 가이드 추가

작성할 내용: 상품 검색 API에 페이지네이션 기능을 추가했습니다.

개선된 Few-shot 예시:

1
2
3
4
5
6
7
8
9
10
11
고객 피드백을 분석해주세요:

<example>
입력: 새 대시보드가 엉망이에요! 로딩도 느리고 내보내기 버튼도 찾을 수 없어요.
출력: 
カテゴリ: UI/UX, Performance
감정: Negative
우선순위: High
</example>

분석할 피드백: 

4. 제약 조건 명시

특정 조건이나 제한사항을 명확히 하세요.

1
2
3
4
5
6
7
JavaScript로 이메일 유효성 검사 함수를 작성해주세요.

제약 조건:
- 정규표현식 사용 금지
- 외부 라이브러리 사용 금지
- 100줄 이내로 작성
- 주석으로 설명 포함

Claude 4 최적화 팁:

1
2
3
4
5
범용적인 고품질 솔루션을 작성해주세요.
테스트 케이스뿐만 아니라 모든 유효한 입력에 대해 작동하는 
솔루션을 구현해주세요. 하드코딩하지 마세요.

문제 요구사항을 이해하고 올바른 알고리즘을 구현하는 데 집중하세요.

프로그래밍 관련 프롬프트

1. 코드 작성 요청

1
2
3
4
5
6
7
TypeScript로 다음 요구사항을 만족하는 
useDebounce 커스텀 훅을 작성해주세요:

- 입력값과 지연시간을 파라미터로 받음
- 지정된 시간 후에 디바운스된 값 반환
- 클린업 함수 포함
- 제네릭 타입 지원

2. 코드 리뷰 요청

1
2
3
4
5
6
7
8
다음 코드를 리뷰해주세요:
[코드 붙여넣기]

확인해주실 사항:
1. 성능 이슈
2. 보안 취약점
3. 코드 스타일
4. 개선 가능한 부분

3. 디버깅 요청

1
2
3
4
5
6
7
다음 에러를 해결하는 방법을 알려주세요:

에러 메시지: [에러 내용]
발생 상황: [상황 설명]
시도한 방법: [이미 시도한 해결책]
환경: Node.js 18, Express 4.18
코드: [관련 코드]

실전 프롬프트 템플릿

1. 문제 해결 템플릿

1
2
3
4
5
6
목표: [달성하고자 하는 것]
현재 상황: [현재 코드나 상태]
문제점: [구체적인 문제]
시도한 방법: [이미 시도한 것들]
제약사항: [기술 스택, 버전 등]
원하는 결과: [기대하는 결과물]

2. 학습 요청 템플릿

1
2
3
4
5
주제: [학습하고 싶은 주제]
현재 수준: [초급/중급/고급]
학습 목적: [왜 배우려고 하는지]
선호하는 방식: [예제 중심/이론 중심]
시간: [얼마나 자세히 알고 싶은지]

3. 코드 생성 템플릿

1
2
3
4
5
6
언어/프레임워크: [사용할 기술]
기능: [구현할 기능]
입력: [입력 데이터 형식]
출력: [출력 데이터 형식]
에러 처리: [필요한 에러 처리]
추가 요구사항: [성능, 보안 등]

피해야 할 프롬프트

1. 너무 긴 프롬프트

한 번에 너무 많은 것을 요구하면 답변의 질이 떨어집니다.

2. 모순된 요구사항

1
"간단하게 설명해줘. 그런데 모든 세부사항도 포함해줘."

3. 불명확한 대명사

1
"이것을 저것과 연결해서 그렇게 만들어줘"

프롬프트 개선 실습

Before → After 예시

예시 1:

  • Before: “파이썬 배워야 해?”
  • After: “웹 개발자로 일하고 있는데, 데이터 분석 능력을 키우기 위해 Python을 배우는 것이 도움이 될까요? 현재 JavaScript와 SQL은 능숙합니다.”

예시 2:

  • Before: “에러 남”
  • After: “React 애플리케이션에서 ‘Cannot read property of undefined’ 에러가 발생합니다. useState로 관리하는 user 객체의 name 속성에 접근할 때 발생하며, 코드는 다음과 같습니다: [코드]”

예시 3:

  • Before: “최적화해줘”
  • After: “이 React 컴포넌트의 렌더링 성능을 최적화해주세요. 현재 부모 컴포넌트가 업데이트될 때마다 불필요하게 리렌더링되고 있습니다. React DevTools로 확인한 결과 props는 변경되지 않았습니다.”

프롬프트 개선 API 활용

graph TD
    A[기본 프롬프트] --> B[프롬프트 개선 API]
    B --> C[최적화된 프롬프트]
    C --> D[Claude 모델]
    D --> E[향상된 답변]
    
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style C fill:#9f9,stroke:#333,stroke-width:2px
    style E fill:#bbf,stroke:#333,stroke-width:2px

API 요청 예시:

1
2
3
4
5
6
7
8
9
10
11
12
{
  "messages": [
    {
      "role": "user",
      "content": [{
        "type": "text",
        "text": "에 대한 간단한 레시피"
      }]
    }
  ],
  "feedback": "더 구체적이고 단계별 설명이 필요합니다"
}

프롬프트 체크리스트

좋은 프롬프트를 작성했는지 확인하세요:

  • 목적이 명확한가?
  • 필요한 맥락을 제공했는가?
  • 구체적인 요구사항을 명시했는가?
  • 원하는 출력 형식을 설명했는가?
  • 제약 조건을 명시했는가?
  • 적절한 예시를 포함했는가?
  • XML 태그를 활용했는가?
  • 단계별 접근법을 사용했는가?

프롬프트 캐싱 최적화

graph LR
    A[Tools] --> B[System]
    B --> C[Messages]
    C --> D[Cache Hit]
    
    style A fill:#f96,stroke:#333,stroke-width:2px
    style B fill:#9f6,stroke:#333,stroke-width:2px
    style C fill:#69f,stroke:#333,stroke-width:2px
    style D fill:#f9f,stroke:#333,stroke-width:2px

캐싱 활용 예시:

1
2
3
4
5
6
7
8
9
10
# 정적 콘텐츠를 앞쪽에 배치
response = client.messages.create(
    model="claude-3-7-sonnet-20250219",
    max_tokens=1024,
    tools=[{"name": "calculator", "description": "..."}],
    system="당신은 수학 전문가입니다.",
    messages=[
        {"role": "user", "content": "이 문제를 풀어주세요: ", "cache_control": {"type": "ephemeral"}}
    ]
)

병렬 도구 호출 최적화

1
2
최대 효율성을 위해 여러 독립적인 작업을 수행해야 할 때는
순차적이 아닌 동시에 관련 도구를 모두 호출하세요.

최신 Claude 기능 활용

1. 프롬프트 개선 API

1
2
3
4
5
6
7
# 기존 프롬프트 자동 최적화
response = client.experimental.improve_prompt(
    messages=[
        {"role": "user", "content": "에 대한 레시피"}
    ],
    feedback="더 상세하고 단계별 설명 필요"
)

2. 응답 품질 향상

1
2
3
도구 결과를 받은 후, 품질을 신중히 검토하고 
새로운 정보를 기반으로 최적의 다음 단계를 결정한 후 진행하세요.
사고 과정을 통해 계획을 세우고 반복하세요.

3. 긴 문서 처리 최적화

1
2
3
4
5
6
7
<quotes>
환자 기록에서 진단과 관련된 인용구를 찾아 여기에 배치하세요.
</quotes>

<info>
인용구를 바탕으로 진단 정보를 여기에 배치하세요.
</info>

다음 편 예고

다음 편에서는 “문서 업로드와 분석 활용”을 다룰 예정입니다. PDF, 코드 파일, 이미지 등 다양한 파일을 Claude와 함께 분석하는 방법을 알아보겠습니다.


💡 오늘의 과제: 같은 질문을 3가지 다른 방식으로 작성해서 Claude에게 물어보고, 답변의 차이를 비교해보세요!

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.