AI & MACHINE LEARNING

Claude API Python 완전 가이드 — Anthropic SDK로 AI 앱 개발하기 2026

junetapa 2026. 2. 21 업데이트 2026. 6. 6 10 min read

Anthropic의 공식 Python SDK를 사용해 Claude API를 연동하는 방법을 처음부터 끝까지 설명한다. ChatGPT의 OpenAI API와 비슷하지만 몇 가지 중요한 차이점이 있고, Claude Opus·Sonnet·Haiku 모델 선택 전략도 함께 다룬다.

2026년 6월 업데이트 — 최신 모델·가격·코드로 전면 갱신
현재 플래그십은 claude-opus-4-8(1M 컨텍스트), 범용 모델은 claude-sonnet-4-6(입력 $3·출력 $15), 경량 모델은 claude-haiku-4-5이다. 구버전 "claude-3-5-sonnet" 등의 모델 ID 표기와 가격, 메시지·스트리밍·비전 코드 예시를 모두 2026년 6월 기준으로 최신화했다. 확장 사고(extended thinking)는 adaptive thinking으로 통일되었다.

Claude 모델 라인업과 선택 기준

2026년 6월 기준 Anthropic의 주요 모델은 다음과 같다. 프로젝트 요구 사항에 맞는 모델을 선택하는 것이 비용 최적화의 핵심이다.

모델 ID특징컨텍스트권장 용도
claude-opus-4-8플래그십, 최고 성능·복잡한 추론, 정직성 강화1M코드 리뷰, 장기 에이전트, 복잡한 분석
claude-sonnet-4-6균형 잡힌 성능·속도 ($3 입력 / $15 출력)1M범용 앱, 일반 챗봇
claude-haiku-4-5초고속, 저비용200K분류, 간단한 요약, 실시간
선택 가이드
대부분의 프로덕션 앱에서는claude-sonnet-4-6이 가장 좋은 균형이다. 비용·속도가 중요하다면 Haiku, 복잡한 논리적 추론이나 장기 자율 작업이 필요하다면 플래그십claude-opus-4-8을 사용하자. Haiku 4.5의 정식 모델 ID는claude-haiku-4-5-20251001이며 별칭claude-haiku-4-5로도 호출할 수 있다.

SDK 설치 & API 키 설정

Anthropic 공식 Python 패키지를 pip으로 설치한다.

bash
# Anthropic SDK 설치
pip install anthropic

# 환경변수에 API 키 저장 (보안 필수)
export ANTHROPIC_API_KEY="sk-ant-..."
보안 주의
API 키는 절대 소스코드에 하드코딩하지 말자. 환경변수 또는.env파일을 사용하고,.gitignore에 반드시 추가하자.

python-dotenv로 .env 파일 관리

python
# .env 파일
# ANTHROPIC_API_KEY=sk-ant-...

# main.py
from dotenv import load_dotenv
import os
import anthropic

load_dotenv()

# 인자를 생략하면 SDK가 환경변수 ANTHROPIC_API_KEY를 자동으로 읽는다
client = anthropic.Anthropic(
    api_key=os.getenv("ANTHROPIC_API_KEY")
)

기본 메시지 API 사용법

Anthropic SDK의 핵심은messages.create()이다. OpenAI의chat.completions.create()와 유사하지만 구조가 약간 다르다. 응답content는 블록 리스트이므로block.type을 확인한 뒤text에 접근하는 것이 안전하다.

python
import anthropic

client = anthropic.Anthropic()

# 기본 메시지 요청
message = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Python으로 피보나치 수열을 구현해줘"}
    ],
)

# content는 블록 리스트 — type을 확인하고 text를 꺼낸다
for block in message.content:
    if block.type == "text":
        print(block.text)

print(f"입력 토큰: {message.usage.input_tokens}")
print(f"출력 토큰: {message.usage.output_tokens}")
OpenAI API와의 차이
Anthropic API는system메시지를 messages 배열이 아닌 별도의system파라미터로 전달한다. 또한 응답은 블록 리스트이므로message.content[0].text를 바로 쓰기보다block.type == "text"를 확인한 뒤 접근하는 것이 안전하다(확장 사고 사용 시 thinking 블록이 먼저 올 수 있음).

스트리밍 응답 구현

사용자 경험을 향상시키기 위해 응답을 실시간으로 출력하는 스트리밍을 구현한다. 긴 응답을 생성하거나max_tokens를 크게 잡을 때는 HTTP 타임아웃을 피하기 위해 스트리밍이 사실상 필수다.

python
import anthropic

client = anthropic.Anthropic()

# stream 컨텍스트 매니저 (권장) — 토큰을 받는 즉시 출력
with client.messages.stream(
    model="claude-opus-4-8",
    max_tokens=2048,
    messages=[
        {"role": "user", "content": "마이크로서비스 아키텍처 장단점을 설명해줘"}
    ],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
    print()  # 줄바꿈

    # 스트리밍이 끝난 뒤 최종 메시지/사용량 확인
    final_message = stream.get_final_message()
    print(f"\n총 토큰: "
          f"{final_message.usage.input_tokens + final_message.usage.output_tokens}")

멀티턴 대화 (대화 히스토리)

Claude API는 stateless이다. 이전 대화 맥락을 유지하려면 직접 messages 배열에 히스토리를 누적해야 한다.

python
import anthropic

client = anthropic.Anthropic()

# 대화 히스토리를 직접 관리
conversation_history = []

def chat(user_message: str) -> str:
    conversation_history.append({"role": "user", "content": user_message})

    response = client.messages.create(
        model="claude-opus-4-8",
        max_tokens=1024,
        system="당신은 친절한 Python 전문가다. 한국어로 답변하라.",
        messages=conversation_history,
    )

    # 첫 text 블록을 안전하게 추출
    assistant_text = next(
        (b.text for b in response.content if b.type == "text"), ""
    )
    conversation_history.append({"role": "assistant", "content": assistant_text})
    return assistant_text

# 대화 진행 — 이전 맥락이 유지된다
print(chat("리스트 컴프리헨션이 뭐야?"))
print(chat("방금 설명한 것을 실제 예제로 보여줘"))

시스템 프롬프트 활용법

시스템 프롬프트는 AI의 역할과 행동 방식을 설정하는 핵심 기능이다. Anthropic API는system파라미터를 별도로 제공한다.

python
# 다양한 시스템 프롬프트 예시

# 1. 코드 리뷰 봇
code_reviewer = """당신은 시니어 Python 개발자다. 코드를 검토할 때:
1. 버그와 잠재적 문제점을 먼저 지적하라
2. PEP8 준수 여부를 확인하라
3. 성능 개선 방안을 제안하라
4. 한국어로 구체적인 피드백을 제공하라"""

# 2. 고객 서비스 봇
customer_service = """당신은 junetapa.com의 친절한 고객 서비스 담당자다.
- 항상 공손하고 도움이 되는 태도를 유지하라
- 모르는 것은 솔직하게 모른다고 말하라
- 답변은 간결하게 3문장 이내로 작성하라"""

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=2048,
    system=code_reviewer,  # 시스템 프롬프트 적용
    messages=[
        {"role": "user", "content": "def add(a,b): return a+b 이 코드 어때?"}
    ],
)

for block in response.content:
    if block.type == "text":
        print(block.text)

비전 API — 이미지 분석

Claude는 이미지를 이해하고 분석하는 멀티모달 기능을 지원한다. URL 또는 Base64 인코딩 방식으로 이미지를 전달할 수 있다.

python
import anthropic
import base64

client = anthropic.Anthropic()

# 방법 1: 이미지 URL로 전달
response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "image",
                "source": {"type": "url", "url": "https://example.com/chart.png"},
            },
            {"type": "text", "text": "이 차트를 분석하고 핵심 인사이트를 3가지 알려줘"},
        ],
    }],
)

# 방법 2: 로컬 파일을 Base64로 인코딩
with open("local_image.jpg", "rb") as f:
    image_data = base64.standard_b64encode(f.read()).decode("utf-8")

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "image",
                "source": {
                    "type": "base64",
                    "media_type": "image/jpeg",
                    "data": image_data,
                },
            },
            {"type": "text", "text": "이 이미지를 설명해줘"},
        ],
    }],
)

for block in response.content:
    if block.type == "text":
        print(block.text)

토큰 사용량 & 비용 관리

API 비용은 입력+출력 토큰 수로 청구된다. 2026년 6월 기준 주요 모델의 가격은 다음과 같다(100만 토큰당, USD).

모델입력 (MTok당)출력 (MTok당)Context
claude-opus-4-8$5$251M
claude-sonnet-4-6$3$151M
claude-haiku-4-5$1$5200K

참고로 Claude 구독 플랜은 Free / Pro $20 / Max 5x $100 / Max 20x $200 구성이며, 위 API 종량 과금과는 별개다.

python
# 토큰 사용량 추적 및 비용 계산
def estimate_cost(usage, model="claude-opus-4-8") -> float:
    pricing = {
        "claude-opus-4-8": {"input": 5.0, "output": 25.0},
        "claude-sonnet-4-6": {"input": 3.0, "output": 15.0},
        "claude-haiku-4-5": {"input": 1.0, "output": 5.0},
    }
    p = pricing.get(model, pricing["claude-opus-4-8"])
    cost = (usage.input_tokens * p["input"]
            + usage.output_tokens * p["output"]) / 1_000_000
    return cost

response = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[{"role": "user", "content": "REST API가 뭔지 설명해줘"}],
)
cost = estimate_cost(response.usage)
print(f"예상 비용: ${cost:.6f}")
비용 절약 팁
(1) 간단한 작업은 Haiku 사용, (2)max_tokens를 적절히 제한, (3) 시스템 프롬프트를 간결하게 유지, (4) 불필요한 대화 히스토리 제거, (5) 반복되는 대용량 컨텍스트는 프롬프트 캐싱(cache_control)으로 최대 90% 절감.

실전 예제: 문서 요약 앱

긴 문서를 자동으로 요약하는 실전 Python 앱을 만들어본다. 스트리밍과 비용 추적 기능을 포함한다.

python
"""
document_summarizer.py
긴 문서를 Claude API로 자동 요약하는 실전 앱
"""
import anthropic
from pathlib import Path

client = anthropic.Anthropic()

SYSTEM_PROMPT = """당신은 전문 문서 요약 도우미다.
문서를 요약할 때 다음 형식을 사용하라:

## 핵심 요약 (3문장)
[핵심 내용을 3문장으로 요약]

## 주요 포인트
- [포인트 1]
- [포인트 2]
- [포인트 3]

## 결론
[문서의 결론 또는 시사점]"""

def summarize_document(text: str, model="claude-opus-4-8") -> None:
    print("요약 생성 중...\n")
    with client.messages.stream(
        model=model,
        max_tokens=1500,
        system=SYSTEM_PROMPT,
        messages=[{"role": "user", "content": f"다음 문서를 요약해줘:\n\n{text}"}],
    ) as stream:
        for chunk in stream.text_stream:
            print(chunk, end="", flush=True)
        final = stream.get_final_message()

    usage = final.usage
    # Opus 4.8 기준 단가 ($5 입력 / $25 출력)
    cost = (usage.input_tokens * 5.0 + usage.output_tokens * 25.0) / 1_000_000
    print(f"\n\n[토큰: 입력 {usage.input_tokens} / "
          f"출력 {usage.output_tokens} | 비용: ${cost:.5f}]")

if __name__ == "__main__":
    doc_text = Path("document.txt").read_text(encoding="utf-8")
    summarize_document(doc_text)
다음 단계
이 예제를 확장하면 FastAPI 웹 서버와 연동하거나, 여러 파일을 배치 처리하거나, Slack 봇으로 만들 수 있다. Claude Opus 4.8·Sonnet 4.6의 1M 토큰 컨텍스트 윈도우 덕분에 매우 긴 문서도 한 번에 처리할 수 있다. 더 나아가 툴 use(함수 호출), MCP 연동, 확장 사고(adaptive thinking)를 결합하면 본격적인 에이전트도 구축할 수 있다.
Claude API Anthropic SDK Python AI LLM 스트리밍 멀티턴 대화 AI 앱 개발
junetapa
junetapa
AI 도구를 직접 써보고 솔직한 경험을 공유하는 개발자.
Twitter Facebook URL 복사