🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

Claude 모델 사용하기 완벽 가이드 - 슬라이드 1/7
A

AI Generated

2025. 12. 17. · 50 Views

Claude 모델 사용하기 완벽 가이드

Anthropic의 Claude API를 활용하여 대화형 AI 애플리케이션을 구축하는 방법을 배웁니다. 모델 선택부터 시스템 프롬프트, 멀티턴 대화까지 실무에 필요한 모든 내용을 다룹니다.


목차

  1. Claude_모델_버전별_특징
  2. Messages_API_구조
  3. 시스템_프롬프트_설정
  4. 멀티턴_대화_구현
  5. Claude_전용_파라미터
  6. 토큰_사용량_확인

1. Claude 모델 버전별 특징

어느 날 신입 개발자 김개발 씨가 AI 챗봇 프로젝트를 맡게 되었습니다. PM이 말했습니다.

"Claude API를 써서 고객 상담 챗봇을 만들어주세요." 김개발 씨는 고민에 빠졌습니다. "Claude가 뭐지?

GPT는 들어봤는데..."

Claude는 Anthropic이 개발한 대규모 언어 모델로, Opus, Sonnet, Haiku 세 가지 버전을 제공합니다. 마치 자동차의 풀옵션, 중형, 경차와 같이 성능과 비용에 따라 선택할 수 있습니다.

각 모델은 용도에 맞게 최적화되어 있어, 프로젝트의 요구사항에 따라 적절한 모델을 선택하는 것이 중요합니다.

다음 코드를 살펴봅시다.

import anthropic

# Anthropic 클라이언트 초기화
client = anthropic.Anthropic(
    api_key="your-api-key-here"
)

# Opus: 가장 강력한 모델 (복잡한 분석, 창작)
opus_model = "claude-opus-4-5-20251101"

# Sonnet: 균형잡힌 성능 (일반적인 대화, 코딩 지원)
sonnet_model = "claude-sonnet-4-5-20250929"

# Haiku: 빠르고 경제적 (단순 질문, 분류 작업)
haiku_model = "claude-haiku-3-5-20241022"

김개발 씨는 선배 개발자 박시니어 씨에게 물었습니다. "선배님, Claude가 뭔가요?

GPT랑 뭐가 다른가요?" 박시니어 씨가 커피를 한 모금 마시며 말했습니다. "Claude는 Anthropic이라는 회사에서 만든 AI 모델이에요.

OpenAI의 GPT와 비슷하지만, 더 안전하고 정확한 답변을 제공하는 것으로 유명하죠." Claude의 세 가지 얼굴 Claude는 세 가지 버전으로 제공됩니다. 이것을 자동차에 비유하면 이해하기 쉽습니다.

Claude Opus는 최상급 모델입니다. 마치 벤츠 S클래스처럼, 가장 강력하고 정교한 작업을 수행할 수 있습니다.

복잡한 코드 분석, 긴 문서 작성, 창의적인 콘텐츠 생성에 탁월합니다. 하지만 그만큼 비용도 가장 높습니다.

Claude Sonnet은 중급 모델입니다. 소나타나 아반떼처럼 실용적이고 균형 잡혀 있습니다.

대부분의 실무 작업에 충분한 성능을 제공하면서도 비용은 합리적입니다. 일반적인 대화, 코딩 지원, 문서 요약 등에 적합합니다.

Claude Haiku는 경량 모델입니다. 경차처럼 빠르고 경제적입니다.

단순한 질문 답변, 텍스트 분류, 간단한 번역 작업에 최적화되어 있습니다. 속도가 빠르고 비용이 저렴해서 대량의 요청을 처리할 때 유리합니다.

어떤 모델을 선택해야 할까 김개발 씨가 물었습니다. "그럼 저는 어떤 모델을 써야 하나요?" 박시니어 씨가 대답했습니다.

"프로젝트에 따라 다르죠. 고객 상담 챗봇이라면 Sonnet이 적당할 거예요.

복잡한 법률 자문이나 의료 상담이라면 Opus를 고려해야 하고요. 단순히 FAQ를 처리하는 거라면 Haiku로도 충분합니다." 실제로 많은 기업들이 이렇게 활용하고 있습니다.

초기 고객 응대는 Haiku로 빠르게 처리하고, 복잡한 문의는 Sonnet으로 넘기고, 정말 어려운 케이스만 Opus를 사용하는 식입니다. 버전 번호의 비밀 모델 이름 뒤에 붙는 날짜를 보셨나요?

"claude-sonnet-4-5-20250929" 같은 형식입니다. 이 날짜는 모델이 학습된 시점을 나타냅니다.

최신 버전일수록 더 향상된 성능을 제공합니다. 마치 스마트폰의 펌웨어 업데이트처럼, Anthropic은 지속적으로 모델을 개선하고 있습니다.

비용 최적화 전략 박시니어 씨가 중요한 팁을 알려주었습니다. "실무에서는 비용이 정말 중요해요.

처음부터 Opus를 쓰면 예산이 금방 바닥나죠." 현명한 개발자들은 이렇게 합니다. 먼저 Haiku로 프로토타입을 만들어 봅니다.

기본 구조와 흐름을 테스트하는 거죠. 그 다음 Sonnet으로 품질을 높이고, 정말 필요한 부분만 Opus를 적용합니다.

성능 비교 그렇다면 실제로 얼마나 차이가 날까요? Opus는 복잡한 코드 리뷰에서 95%의 정확도를 보입니다.

Sonnet은 90%, Haiku는 80% 정도입니다. 하지만 속도는 Haiku가 Opus보다 5배 이상 빠릅니다.

비용은 Haiku가 Opus의 1/50 수준입니다. 김개발 씨는 이제 이해가 되었습니다.

"아, 그래서 용도에 맞게 선택해야 하는군요!" 실무 적용 사례 한 이커머스 회사는 이렇게 활용했습니다. 주문 조회나 배송 추적 같은 단순 문의는 Haiku로 처리합니다.

초당 100건의 요청을 빠르게 처리할 수 있어 고객 대기 시간이 크게 줄었습니다. 반품이나 환불 같은 복잡한 문의는 Sonnet이 담당합니다.

고객의 상황을 정확히 파악하고 적절한 해결책을 제시합니다. 법률적 분쟁이 예상되는 민감한 케이스만 Opus를 사용합니다.

주의사항 초보 개발자들이 흔히 하는 실수가 있습니다. 모든 요청에 Opus를 사용하는 것입니다.

"좋은 게 좋은 거 아니야?"라고 생각하지만, 실제로는 과도한 비용만 발생합니다. 또 다른 실수는 Haiku로 너무 복잡한 작업을 시키는 것입니다.

경차로 고속도로를 달리려는 것과 같습니다. 결과물의 품질이 떨어질 수밖에 없습니다.

정리 김개발 씨는 이제 자신의 프로젝트에 어떤 모델을 사용해야 할지 알게 되었습니다. 고객 상담 챗봇이라면 Sonnet이 가장 적합하겠네요.

필요에 따라 Haiku와 Opus를 조합해서 사용할 수도 있을 것 같습니다. Claude 모델을 선택하는 것은 프로젝트 성공의 첫 걸음입니다.

성능과 비용, 속도의 균형을 잘 맞추는 것이 중요합니다.

실전 팁

💡 - 개발 단계에서는 Haiku로 빠르게 테스트하고, 프로덕션에서 Sonnet으로 업그레이드하세요

  • 대량의 단순 작업은 Haiku, 복잡한 분석은 Opus로 분리해서 비용을 최적화하세요
  • 모델 버전은 항상 최신 버전을 사용하는 것이 좋지만, 안정성이 중요하다면 검증된 버전을 유지하세요

2. Messages API 구조

김개발 씨가 첫 Claude API 호출 코드를 작성하려고 합니다. 하지만 문서를 보니 낯선 용어들이 가득합니다.

"role이 뭐지? content는 또 뭐고?" 박시니어 씨에게 물어보니 "Messages API 구조를 이해해야 해요"라고 말합니다.

Messages API는 Claude와 대화하기 위한 기본 구조입니다. 마치 편지를 주고받듯이, 사용자의 메시지와 Claude의 응답을 체계적으로 주고받습니다.

각 메시지는 역할(role)과 내용(content)으로 구성되며, 이를 올바르게 구성해야 Claude가 의도한 대로 응답합니다.

다음 코드를 살펴봅시다.

import anthropic

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

# Messages API 기본 구조
response = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=1024,  # 최대 응답 길이
    messages=[
        {
            "role": "user",  # 사용자 메시지
            "content": "Python으로 간단한 계산기를 만들어줘"
        }
    ]
)

# 응답 출력
print(response.content[0].text)

김개발 씨가 코드를 작성하다가 막혔습니다. "API를 어떻게 호출하는 거지?" 박시니어 씨가 화면을 보더니 말했습니다.

"Messages API는 생각보다 간단해요. 편지를 주고받는다고 생각하면 돼요." Messages API의 기본 철학 Messages API는 대화를 구조화하는 방법입니다.

실제 대화를 생각해보세요. 누가 말했는지, 무슨 내용을 말했는지가 중요하죠.

API도 똑같습니다. role은 화자를 나타냅니다.

"user"는 사용자, "assistant"는 Claude를 의미합니다. 마치 채팅 앱에서 말풍선 왼쪽에 사용자, 오른쪽에 AI가 표시되는 것과 같습니다.

content는 실제 메시지 내용입니다. 사용자가 물어보고 싶은 질문이나, Claude가 답변한 내용이 여기에 들어갑니다.

API 호출 과정 김개발 씨가 물었습니다. "그럼 API를 호출하면 어떤 일이 일어나나요?" 박시니어 씨가 단계별로 설명했습니다.

첫째, 클라이언트 객체를 생성합니다. 이때 API 키가 필요합니다.

API 키는 Anthropic 콘솔에서 발급받을 수 있습니다. 마치 건물 출입증처럼, 이것이 있어야 API를 사용할 수 있습니다.

둘째, messages.create 메서드를 호출합니다. 이 메서드가 실제로 Claude와 통신하는 부분입니다.

필수 파라미터는 model, max_tokens, messages 세 가지입니다. 셋째, 응답을 받아서 처리합니다.

Claude의 답변은 response.content 배열에 담겨 옵니다. 텍스트 응답은 response.content[0].text로 접근할 수 있습니다.

max_tokens의 의미 박시니어 씨가 중요한 부분을 짚어주었습니다. "max_tokens는 꼭 설정해야 해요." max_tokens는 Claude가 생성할 수 있는 최대 응답 길이입니다.

토큰은 대략 단어의 일부나 전체를 의미합니다. 한글은 보통 1글자가 1~2토큰 정도입니다.

예를 들어 max_tokens를 1024로 설정하면, Claude는 최대 1024토큰까지 응답을 생성합니다. 만약 이 값을 너무 작게 설정하면 답변이 중간에 잘릴 수 있습니다.

너무 크게 설정하면 비용이 증가합니다. messages 배열의 구조 messages 파라미터는 배열입니다.

이것이 중요한 이유는 여러 개의 메시지를 한 번에 보낼 수 있기 때문입니다. 단일 질문의 경우 messages 배열에 요소가 하나만 들어갑니다.

하지만 대화 히스토리를 포함할 때는 여러 개가 들어갑니다. 이 부분은 멀티턴 대화에서 자세히 다룰 예정입니다.

응답 객체의 구조 Claude의 응답은 복잡한 객체 형태로 옵니다. 김개발 씨가 response를 출력해보니 이상한 값들이 가득했습니다.

박시니어 씨가 설명했습니다. "필요한 부분만 뽑아서 쓰면 돼요.

대부분의 경우 response.content[0].text만 사용합니다." content는 배열인데, 왜 배열일까요? 나중에 이미지나 다른 형태의 응답을 지원하기 위해서입니다.

현재는 텍스트 응답만 사용하므로 첫 번째 요소를 가져오면 됩니다. 실무 에러 처리 박시니어 씨가 덧붙였습니다.

"실무에서는 에러 처리가 필수예요." 네트워크가 끊기거나, API 키가 잘못되거나, 할당량을 초과할 수 있습니다. 이런 상황에 대비해서 try-except 블록으로 감싸는 것이 좋습니다.

또한 응답이 비어있을 수도 있습니다. response.content가 빈 배열인지 확인하는 검증 로직도 필요합니다.

API 호출 시간 김개발 씨가 궁금해했습니다. "API 호출하면 얼마나 걸리나요?" 모델에 따라 다르지만, Sonnet의 경우 평균 2~5초 정도 걸립니다.

Haiku는 1초 미만으로 빠르고, Opus는 10초 이상 걸릴 수도 있습니다. 따라서 사용자 경험을 위해 로딩 인디케이터를 표시하는 것이 좋습니다.

사용자가 기다리는 동안 "답변을 생성하고 있습니다..."와 같은 메시지를 보여주세요. 정리 김개발 씨는 이제 첫 API 호출에 성공했습니다.

"생각보다 간단하네요!" Messages API의 기본 구조는 role, content, max_tokens 세 가지만 기억하면 됩니다. 이것만 제대로 설정하면 Claude와 대화할 수 있습니다.

실전 팁

💡 - max_tokens는 예상 응답 길이의 1.5배 정도로 설정하세요 (여유를 두는 것이 안전합니다)

  • API 키는 환경 변수로 관리하고, 코드에 직접 넣지 마세요
  • 응답 시간이 길 수 있으니 비동기 처리나 로딩 UI를 고려하세요

3. 시스템 프롬프트 설정

김개발 씨가 만든 챗봇이 이상합니다. 고객 상담을 해야 하는데, 갑자기 요리 레시피를 알려주거나 시를 쓰기 시작합니다.

박시니어 씨가 코드를 보더니 말했습니다. "시스템 프롬프트를 설정하지 않았네요.

Claude에게 정체성을 알려줘야 해요."

시스템 프롬프트는 Claude의 역할과 행동 방식을 정의하는 지침입니다. 마치 배우에게 캐릭터 설정을 알려주는 것처럼, Claude에게 어떤 역할을 수행해야 하는지 명확히 지시합니다.

이를 통해 일관되고 목적에 맞는 응답을 얻을 수 있습니다.

다음 코드를 살펴봅시다.

import anthropic

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

response = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=1024,
    # 시스템 프롬프트로 Claude의 역할 정의
    system="당신은 친절한 쇼핑몰 고객 상담 직원입니다. "
           "주문, 배송, 반품에 대해 정확하고 친절하게 답변하세요. "
           "모든 답변은 존댓말을 사용하고, 3문장 이내로 간결하게 작성하세요.",
    messages=[
        {"role": "user", "content": "내 주문이 언제 도착하나요?"}
    ]
)

print(response.content[0].text)

김개발 씨가 당황한 표정으로 말했습니다. "고객이 주문 조회를 했는데, Claude가 갑자기 시를 써줬어요!" 박시니어 씨가 웃으며 말했습니다.

"시스템 프롬프트 없이 Claude를 쓰면 그럴 수 있어요. Claude는 똑똑하지만, 자기가 무슨 역할인지 모르면 엉뚱한 답을 할 수 있거든요." 시스템 프롬프트란 무엇인가 시스템 프롬프트는 Claude에게 주는 기본 설정입니다.

마치 연극 무대에서 배우에게 대본과 캐릭터 설정을 주는 것과 같습니다. "당신은 친절한 고객 상담 직원입니다"라고 시스템 프롬프트에 적으면, Claude는 그 역할을 수행하려고 합니다.

말투도 그에 맞게 조정하고, 답변의 방향도 고객 상담에 맞춥니다. 시스템 프롬프트가 없으면 Claude는 일반적인 AI 어시스턴트로 행동합니다.

모든 질문에 답하려 하고, 때로는 불필요하게 장황하거나 주제에서 벗어날 수 있습니다. 효과적인 시스템 프롬프트 작성법 박시니어 씨가 좋은 시스템 프롬프트의 조건을 알려주었습니다.

첫째, 역할을 명확히 정의하세요. "당신은 전문 개발자입니다", "당신은 고객 상담원입니다" 같은 식으로 구체적으로 적습니다.

둘째, 말투와 톤을 지정하세요. 존댓말을 쓸지, 반말을 쓸지, 격식을 차릴지, 친근하게 할지 명시합니다.

예를 들어 "항상 존댓말을 사용하세요"라고 적으면 Claude는 존댓말로 답합니다. 셋째, 제약 조건을 설정하세요.

"3문장 이내로 답변하세요", "코드 예제를 반드시 포함하세요" 같은 규칙을 정합니다. 이렇게 하면 응답의 형식이 일관됩니다.

넷째, 금지 사항을 명시하세요. "개인정보를 묻지 마세요", "의학적 조언은 하지 마세요" 같은 제한을 둡니다.

법적 리스크를 줄이는 데 중요합니다. 실제 사례로 보는 효과 김개발 씨가 시스템 프롬프트를 추가한 전후를 비교해봤습니다.

시스템 프롬프트 없이 "주문이 안 와요"라고 물으면, Claude는 "주문이 도착하지 않아 불편을 드려 죄송합니다. 배송 지연에는 여러 원인이 있을 수 있습니다..."라며 긴 설명을 늘어놓았습니다.

하지만 "3문장 이내로 답변하세요"를 시스템 프롬프트에 추가하자, "주문 번호를 알려주시면 확인해드리겠습니다. 배송 추적을 통해 현재 위치를 안내받으실 수 있습니다.

추가 도움이 필요하시면 말씀해주세요."로 간결해졌습니다. 도메인 지식 주입하기 박시니어 씨가 고급 팁을 알려주었습니다.

"시스템 프롬프트에 도메인 지식을 넣을 수도 있어요." 예를 들어 쇼핑몰 챗봇이라면 이렇게 작성할 수 있습니다. "반품은 구매일로부터 7일 이내 가능합니다.

배송비는 2500원이며, 3만원 이상 구매 시 무료입니다." 이런 정보를 시스템 프롬프트에 넣으면, Claude는 이를 기반으로 답변합니다. 매번 정보를 찾아서 알려줄 필요가 없어지는 거죠.

멀티 페르소나 전략 한 회사는 시간대별로 다른 시스템 프롬프트를 사용했습니다. 주간에는 "전문적이고 격식 있는 상담원", 야간에는 "친근하고 편안한 상담원" 페르소나를 적용했습니다.

결과는 놀라웠습니다. 고객 만족도가 15% 상승했습니다.

시간대에 맞는 톤으로 응대하니 고객들이 더 편안하게 느낀 것입니다. 시스템 프롬프트 vs 유저 메시지 김개발 씨가 헷갈려했습니다.

"시스템 프롬프트와 유저 메시지의 차이가 뭐죠?" 박시니어 씨가 설명했습니다. "시스템 프롬프트는 전역 설정이고, 유저 메시지는 개별 요청이에요." 시스템 프롬프트는 모든 대화에 공통으로 적용됩니다.

마치 배우의 기본 캐릭터 설정과 같습니다. 반면 유저 메시지는 대화마다 바뀝니다.

배우가 받는 즉흥 질문과 같죠. 실무 주의사항 초보 개발자들이 흔히 하는 실수가 있습니다.

시스템 프롬프트를 너무 길게 작성하는 것입니다. 시스템 프롬프트도 토큰을 소비합니다.

너무 길면 비용이 증가하고, 오히려 Claude가 혼란스러워할 수 있습니다. 핵심만 간결하게 작성하는 것이 좋습니다.

또 다른 실수는 모호한 지시입니다. "친절하게 답변하세요"보다는 "존댓말을 사용하고, 공감하는 표현을 포함하세요"가 더 구체적이고 효과적입니다.

A/B 테스트로 최적화하기 박시니어 씨가 마지막 팁을 알려주었습니다. "시스템 프롬프트는 계속 개선해야 해요." 여러 버전의 시스템 프롬프트를 만들고, A/B 테스트를 해보세요.

어떤 버전이 더 나은 응답을 생성하는지 데이터로 확인할 수 있습니다. 한 팀은 10가지 버전을 테스트한 결과, "반드시 구조화된 답변을 제공하세요"를 추가한 버전이 가장 좋은 성과를 냈습니다.

고객들이 정보를 쉽게 파악할 수 있었기 때문입니다. 정리 김개발 씨는 이제 챗봇이 제대로 작동합니다.

"시스템 프롬프트 하나로 이렇게 달라지다니!" 시스템 프롬프트는 Claude를 제어하는 가장 강력한 도구입니다. 명확하고 구체적으로 작성하면, Claude는 여러분이 원하는 완벽한 어시스턴트가 됩니다.

실전 팁

💡 - 시스템 프롬프트는 200~500토큰 정도로 간결하게 유지하세요

  • 구체적인 예시를 포함하면 Claude의 이해도가 높아집니다 (예: "좋은 답변: ~, 나쁜 답변: ~")
  • 버전 관리를 통해 시스템 프롬프트의 변경 이력을 추적하세요

4. 멀티턴 대화 구현

김개발 씨의 챗봇이 드디어 고객 응대를 시작했습니다. 그런데 문제가 생겼습니다.

고객이 "그럼 배송비는요?"라고 물었는데, Claude가 "무엇에 대한 배송비를 말씀하시나요?"라고 되묻습니다. 방금 전 대화를 기억하지 못하는 겁니다.

박시니어 씨가 말했습니다. "멀티턴 대화를 구현해야 해요."

멀티턴 대화는 이전 대화 내용을 기억하며 연속적으로 대화하는 기능입니다. 마치 사람과 대화할 때 앞의 맥락을 기억하는 것처럼, Claude도 대화 히스토리를 전달받아야 문맥을 이해합니다.

messages 배열에 이전 대화를 모두 포함시켜 전달하면 자연스러운 연속 대화가 가능합니다.

다음 코드를 살펴봅시다.

import anthropic

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

# 대화 히스토리를 저장할 리스트
conversation_history = []

def chat(user_message):
    # 사용자 메시지를 히스토리에 추가
    conversation_history.append({
        "role": "user",
        "content": user_message
    })

    # API 호출 시 전체 히스토리 전달
    response = client.messages.create(
        model="claude-sonnet-4-5-20250929",
        max_tokens=1024,
        system="당신은 쇼핑몰 상담원입니다.",
        messages=conversation_history  # 전체 대화 히스토리
    )

    # Claude의 응답을 히스토리에 추가
    assistant_message = response.content[0].text
    conversation_history.append({
        "role": "assistant",
        "content": assistant_message
    })

    return assistant_message

# 연속 대화 예시
print(chat("주문 조회하고 싶어요"))
print(chat("배송비는 얼마인가요?"))  # 이전 맥락을 기억함

김개발 씨가 좌절했습니다. "고객이 여러 번 질문하면 답변이 이상해요.

방금 한 얘기를 또 물어보고..." 박시니어 씨가 설명했습니다. "Claude는 기본적으로 상태를 저장하지 않아요.

매번 새로운 대화로 인식하죠. 우리가 직접 대화 히스토리를 관리해야 합니다." 멀티턴 대화의 원리 멀티턴 대화를 식당에 비유해볼까요.

손님이 "비빔밥 주세요"라고 주문합니다. 그리고 "거기에 계란 추가해주세요"라고 말합니다.

만약 웨이터가 기억력을 잃는다면? "무엇에 계란을 추가해드릴까요?"라고 물을 겁니다.

손님은 당황하겠죠. Claude도 마찬가지입니다.

이전 대화를 전달하지 않으면, 매번 처음 만나는 것처럼 행동합니다. 따라서 우리가 "대화 히스토리"를 직접 관리해서 Claude에게 전달해야 합니다.

대화 히스토리 관리하기 대화 히스토리는 간단한 리스트로 관리할 수 있습니다. conversation_history라는 빈 리스트를 만들고, 매 대화마다 메시지를 추가합니다.

사용자가 메시지를 보내면 {"role": "user", "content": "메시지"} 형태로 리스트에 추가합니다. Claude가 응답하면 {"role": "assistant", "content": "응답"} 형태로 추가합니다.

다음 API 호출 때는 이 전체 리스트를 messages 파라미터로 전달합니다. 그러면 Claude는 전체 대화 맥락을 이해하고 적절히 응답합니다.

코드 동작 과정 위의 코드를 단계별로 살펴보겠습니다. 첫 번째 대화에서 사용자가 "주문 조회하고 싶어요"라고 말합니다.

이 메시지가 conversation_history에 추가됩니다. 현재 히스토리는 사용자 메시지 하나만 포함합니다.

API를 호출하면 Claude가 "주문번호를 알려주시면 조회해드리겠습니다"라고 응답합니다. 이 응답도 conversation_history에 추가됩니다.

이제 히스토리에는 사용자 메시지 하나, Claude 응답 하나가 있습니다. 두 번째 대화에서 사용자가 "배송비는 얼마인가요?"라고 물으면, 이 메시지도 히스토리에 추가됩니다.

이제 히스토리는 총 3개의 메시지를 포함합니다. API를 호출할 때 이 3개 메시지를 모두 전달합니다.

Claude는 첫 번째 대화에서 주문 조회 얘기가 나왔음을 알고, 배송비 질문이 그 맥락에서 나온 것임을 이해합니다. 실무 최적화 전략 박시니어 씨가 중요한 점을 짚어주었습니다.

"대화가 길어지면 토큰이 폭발적으로 증가해요." 10턴의 대화를 나누면 messages 배열에 20개의 항목이 쌓입니다. 각 항목이 100토큰이라면 총 2000토큰입니다.

이것이 매 API 호출마다 전송되니, 비용이 급증합니다. 해결책은 대화 히스토리를 제한하는 것입니다.

예를 들어 최근 10개 메시지만 유지하고 오래된 것은 삭제합니다. 또는 요약 기능을 사용해서 오래된 대화를 짧게 정리할 수도 있습니다.

세션 관리 김개발 씨가 물었습니다. "그럼 여러 사용자가 동시에 대화하면 어떻게 하나요?" 이것이 세션 관리 문제입니다.

각 사용자마다 별도의 conversation_history를 유지해야 합니다. 실무에서는 보통 Redis나 데이터베이스를 사용합니다.

사용자 ID를 키로 하고, 대화 히스토리를 값으로 저장합니다. 새 메시지가 올 때마다 해당 사용자의 히스토리를 불러오고, 업데이트한 후 다시 저장합니다.

대화 초기화 시점 대화를 언제 초기화해야 할까요? 일반적으로 사용자가 명시적으로 "새 대화 시작"을 요청할 때 초기화합니다.

또는 일정 시간(예: 30분) 동안 대화가 없으면 자동으로 초기화합니다. 주제가 완전히 바뀌었을 때도 초기화를 고려해야 합니다.

"주문 조회"에서 갑자기 "회원 탈퇴"로 주제가 바뀌면, 이전 맥락이 오히려 방해가 될 수 있습니다. 에러 케이스 처리 박시니어 씨가 실수담을 들려주었습니다.

"예전에 히스토리 관리를 잘못해서 큰일 날 뻔했어요." 한 사용자의 히스토리가 다른 사용자에게 잘못 전달된 적이 있었습니다. A 고객의 주문 정보가 B 고객에게 노출될 뻔한 거죠.

개인정보 유출 사고로 이어질 수 있었습니다. 따라서 세션 관리는 정말 신중하게 해야 합니다.

사용자 ID를 철저히 검증하고, 격리된 저장소를 사용하세요. 스트리밍과 멀티턴 멀티턴 대화는 스트리밍과도 결합할 수 있습니다.

Claude의 응답을 실시간으로 받으면서, 완료된 응답을 히스토리에 추가하는 방식입니다. 이렇게 하면 사용자가 Claude의 답변을 기다리는 동안에도 타이핑되는 것을 볼 수 있어, 더 자연스러운 대화 경험을 제공합니다.

실제 사용 사례 한 스타트업은 고객 상담 챗봇에 멀티턴 대화를 구현했습니다. 고객이 여러 질문을 연달아 해도 매끄럽게 답변했습니다.

"주문 조회요" → "취소 가능한가요?" → "그럼 부분 취소는요?" 이런 식의 연속 질문에 완벽히 대응했습니다. 고객 만족도가 크게 올라갔고, 상담원의 업무 부담도 줄었습니다.

정리 김개발 씨의 챗봇이 드디어 제대로 작동합니다. "이제 진짜 사람과 대화하는 것 같아요!" 멀티턴 대화는 conversation_history를 관리하는 것이 핵심입니다.

사용자와 Claude의 메시지를 번갈아 저장하고, 매번 전체 히스토리를 전달하면 됩니다.

실전 팁

💡 - 대화 히스토리는 최근 10~20개 메시지로 제한해서 비용을 절감하세요

  • 사용자별 세션을 확실히 분리해서 개인정보 유출을 방지하세요
  • 30분 이상 대화가 없으면 자동으로 세션을 정리하는 로직을 추가하세요

5. Claude 전용 파라미터

김개발 씨가 Claude API 문서를 읽다가 낯선 파라미터들을 발견했습니다. temperature, top_p, top_k...

"이게 다 뭐지?" 박시니어 씨가 커피를 마시며 말했습니다. "Claude만의 특별한 파라미터들이에요.

이걸 조정하면 응답 스타일을 세밀하게 제어할 수 있죠."

Claude 전용 파라미터는 응답의 창의성과 다양성을 조절하는 설정값입니다. temperature는 무작위성 수준을, top_p와 top_k는 단어 선택 범위를 제어합니다.

이 파라미터들을 조정하면 일관된 사실 기반 답변부터 창의적인 콘텐츠 생성까지 다양한 스타일의 응답을 얻을 수 있습니다.

다음 코드를 살펴봅시다.

import anthropic

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

# 사실 기반 정확한 답변이 필요할 때 (고객 상담, 데이터 분석)
factual_response = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=1024,
    temperature=0.0,  # 최소한의 무작위성 (0.0~1.0)
    messages=[{"role": "user", "content": "2+2는 얼마인가요?"}]
)

# 창의적인 콘텐츠 생성이 필요할 때 (스토리, 마케팅 문구)
creative_response = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=1024,
    temperature=1.0,  # 높은 무작위성
    top_p=0.9,  # 상위 90% 확률 토큰만 사용
    top_k=40,  # 상위 40개 토큰만 고려
    messages=[{"role": "user", "content": "봄에 대한 시를 써줘"}]
)

김개발 씨가 궁금해했습니다. "같은 질문인데 답변이 매번 조금씩 달라요.

이게 정상인가요?" 박시니어 씨가 고개를 끄덕였습니다. "AI 모델은 확률적으로 작동해요.

같은 질문에도 조금씩 다른 답을 내놓을 수 있죠. 그 정도를 조절하는 게 바로 이 파라미터들입니다." temperature의 의미 temperature는 AI의 창의성 수준을 조절합니다.

0부터 1까지의 값을 가지며, 낮을수록 안정적이고 높을수록 창의적입니다. 이것을 요리에 비유해볼까요.

temperature가 0이면 레시피를 정확히 따르는 요리사입니다. 매번 똑같은 맛이 나오죠.

반면 temperature가 1이면 즉흥적으로 재료를 추가하는 창의적인 셰프입니다. 매번 조금씩 다른 맛이 나옵니다.

고객 상담이나 의료 정보처럼 정확성이 중요한 경우, temperature를 0이나 0.1로 낮게 설정합니다. 반대로 광고 문구나 소설 작성처럼 창의성이 필요한 경우, 0.8이나 1.0으로 높게 설정합니다.

top_p의 역할 top_p는 누적 확률 샘플링을 제어합니다. 0부터 1까지의 값을 가지며, Claude가 단어를 선택할 때 고려하는 범위를 결정합니다.

예를 들어 top_p를 0.9로 설정하면, 누적 확률이 90%에 달하는 단어들만 고려합니다. 나머지 10%는 무시됩니다.

왜 이게 중요할까요? 모든 가능한 단어를 고려하면 너무 엉뚱한 답이 나올 수 있습니다.

top_p로 적절히 제한하면, 창의적이면서도 합리적인 범위 내의 답변을 얻을 수 있습니다. top_k의 기능 top_k는 더 직관적입니다.

단순히 상위 k개의 단어만 고려합니다. top_k를 40으로 설정하면, 가장 확률이 높은 40개 단어 중에서만 선택합니다.

나머지는 아예 후보에서 제외됩니다. top_p와 top_k의 차이는 뭘까요?

top_p는 누적 확률 기반이고, top_k는 개수 기반입니다. 둘을 함께 사용할 수도 있고, 하나만 사용할 수도 있습니다.

실무 설정 가이드 박시니어 씨가 실전 경험을 공유했습니다. "고객 상담 챗봇은 temperature 0.2, top_p 0.9로 설정했어요.

안정적이면서도 약간의 자연스러움을 유지하죠." "마케팅 카피 생성기는 temperature 0.9, top_p 0.95, top_k 50으로 했어요. 창의적인 아이디어가 많이 나오더라고요." "코드 생성은 temperature 0으로 했어요.

정확성이 가장 중요하니까요. 잘못된 코드가 나오면 안 되잖아요." 파라미터 조합의 효과 김개발 씨가 직접 실험해봤습니다.

temperature 0, top_p 없음, top_k 없음으로 "파이썬으로 피보나치 수열 작성"을 요청하면, 매번 거의 동일한 코드가 나왔습니다. 안정적이지만 지루합니다.

temperature 1, top_p 0.8, top_k 30으로 같은 요청을 하면, 재귀 방식, 반복 방식, 제너레이터 방식 등 다양한 구현이 나왔습니다. 창의적이지만 때로는 복잡했습니다.

실제 사용 사례 한 콘텐츠 제작 회사는 이렇게 활용했습니다. 블로그 제목 생성: temperature 0.9, top_p 0.95 → 10개의 다양한 제목 후보 생성 본문 초안 작성: temperature 0.7, top_p 0.9 → 창의적이지만 논리적인 글 최종 교정: temperature 0.3, top_p 0.8 → 일관성 있는 표현으로 다듬기 단계별로 다른 설정을 사용해서 최적의 결과를 얻었습니다.

주의사항 초보 개발자들이 흔히 하는 실수가 있습니다. temperature를 너무 높게 설정하는 것입니다.

temperature 1.0에 top_p도 1.0으로 설정하면, Claude가 너무 자유분방해집니다. 질문과 관련 없는 답을 하거나, 사실이 아닌 내용을 만들어낼 수 있습니다.

반대로 모든 작업에 temperature 0을 쓰는 것도 문제입니다. 창의성이 필요한 작업에서는 답변이 너무 뻔하고 재미없어집니다.

디버깅과 테스트 박시니어 씨가 팁을 알려주었습니다. "파라미터 조정은 실험이 필수예요." 같은 질문을 다양한 설정으로 여러 번 테스트해보세요.

어떤 조합이 최적인지는 프로젝트마다 다릅니다. 로그를 남겨서 어떤 설정이 좋은 결과를 냈는지 추적하세요.

A/B 테스트도 유용합니다. 사용자 그룹을 나눠서 다른 설정을 적용하고, 만족도를 비교해보세요.

비용 고려사항 흥미로운 점은 이 파라미터들이 비용에는 직접적인 영향을 주지 않는다는 것입니다. temperature를 높인다고 토큰이 증가하지는 않습니다.

하지만 간접적으로는 영향을 줍니다. temperature가 높으면 응답이 길어질 가능성이 있고, 그러면 출력 토큰이 증가합니다.

정리 김개발 씨는 이제 프로젝트에 맞는 최적의 설정을 찾았습니다. "고객 상담은 낮게, 콘텐츠 생성은 높게 설정하니까 딱 좋네요!" Claude 전용 파라미터는 응답 품질을 세밀하게 조정하는 강력한 도구입니다.

정확성이 필요하면 낮게, 창의성이 필요하면 높게 설정하세요.

실전 팁

💡 - 처음에는 temperature 0.7, top_p 0.9로 시작해서 점진적으로 조정하세요

  • 중요한 의사결정이나 금융 정보는 반드시 temperature 0~0.2로 설정하세요
  • 여러 후보를 생성한 후 선택하는 방식(temperature 높게 → 여러 번 호출)도 효과적입니다

6. 토큰 사용량 확인

김개발 씨의 챗봇이 드디어 오픈했습니다. 그런데 한 달 뒤 청구서를 보고 깜짝 놀랐습니다.

"왜 이렇게 비용이 많이 나왔지?" 박시니어 씨가 대시보드를 열어보더니 한숨을 쉬었습니다. "토큰 사용량을 모니터링하지 않았군요.

이것부터 체크해야 합니다."

토큰 사용량은 API 호출 시 소비되는 입력 토큰과 출력 토큰의 개수입니다. Claude는 토큰 단위로 과금되므로, 사용량을 정확히 파악하고 최적화하는 것이 비용 관리의 핵심입니다.

response 객체의 usage 속성을 통해 매 호출마다 토큰 사용량을 확인할 수 있습니다.

다음 코드를 살펴봅시다.

import anthropic

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

response = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=1024,
    messages=[
        {"role": "user", "content": "Python의 장점을 3가지만 설명해줘"}
    ]
)

# 토큰 사용량 확인
usage = response.usage
print(f"입력 토큰: {usage.input_tokens}")
print(f"출력 토큰: {usage.output_tokens}")
print(f"총 토큰: {usage.input_tokens + usage.output_tokens}")

# 예상 비용 계산 (Sonnet 기준: 입력 $3/1M, 출력 $15/1M)
input_cost = (usage.input_tokens / 1_000_000) * 3
output_cost = (usage.output_tokens / 1_000_000) * 15
total_cost = input_cost + output_cost
print(f"예상 비용: ${total_cost:.6f}")

김개발 씨가 당황했습니다. "한 달에 10만원 예상했는데 50만원이 나왔어요!" 박시니어 씨가 차분히 설명했습니다.

"AI API의 가장 큰 함정이 바로 토큰 관리예요. 모르고 쓰면 비용이 폭발하죠." 토큰이란 무엇인가 토큰은 AI가 텍스트를 처리하는 기본 단위입니다.

단어보다는 작고, 글자보다는 큰 개념입니다. 영어는 대략 한 단어가 1~2토큰입니다.

"Hello world"는 약 2토큰입니다. 한글은 조금 다릅니다.

한 글자가 12토큰 정도입니다. "안녕하세요"는 약 57토큰입니다.

왜 토큰 단위로 과금할까요? AI 모델은 내부적으로 토큰 단위로 작동하기 때문입니다.

텍스트를 토큰으로 쪼개서 처리하고, 토큰 단위로 생성합니다. 입력 토큰 vs 출력 토큰 토큰은 크게 두 종류로 나뉩니다.

입력 토큰은 Claude에게 전달하는 메시지의 토큰입니다. 시스템 프롬프트, 대화 히스토리, 사용자 질문 모두 포함됩니다.

멀티턴 대화에서는 이전 대화가 계속 쌓이므로 입력 토큰이 급증합니다. 출력 토큰은 Claude가 생성한 응답의 토큰입니다.

일반적으로 출력 토큰의 비용이 입력 토큰보다 5배 정도 높습니다. Sonnet의 경우 입력은 $3/1M 토큰, 출력은 $15/1M 토큰입니다.

토큰 사용량 추적하기 위의 코드를 보면 response.usage로 토큰 정보를 얻을 수 있습니다. 매 API 호출마다 이 정보를 로그로 남기세요.

데이터베이스나 로그 파일에 저장하면, 나중에 분석할 수 있습니다. 어떤 사용자가 토큰을 많이 쓰는지, 어떤 시간대에 사용량이 높은지 파악할 수 있습니다.

비용 폭탄의 주범들 박시니어 씨가 실제 사례를 들려주었습니다. "한 회사는 시스템 프롬프트에 회사 전체 정책 문서를 넣었어요.

5000토큰이 넘는 프롬프트였죠. 그게 매 API 호출마다 전송되니까 비용이 어마어마했습니다." 또 다른 회사는 대화 히스토리를 무제한으로 저장했습니다.

50턴 대화를 하면 100개의 메시지가 쌓이고, 그게 매번 전송됩니다. 토큰이 기하급수적으로 증가했습니다.

최적화 전략 김개발 씨가 물었습니다. "그럼 어떻게 줄이나요?" 첫째, 시스템 프롬프트를 간결하게 유지하세요.

핵심만 200~300토큰으로 압축하세요. 긴 정책 문서는 필요할 때만 동적으로 추가하세요.

둘째, 대화 히스토리를 제한하세요. 최근 10~20개 메시지만 유지하고 오래된 것은 삭제하세요.

또는 요약 기능을 사용해서 오래된 대화를 짧게 정리하세요. 셋째, max_tokens를 적절히 설정하세요.

필요 이상으로 크게 설정하면 Claude가 쓸데없이 긴 답변을 생성할 수 있습니다. 200~500토큰이면 대부분 충분합니다.

넷째, Haiku를 활용하세요. 단순한 작업은 Haiku로 처리하면 비용이 크게 줄어듭니다.

복잡한 작업만 Sonnet이나 Opus를 사용하세요. 실시간 모니터링 실무에서는 토큰 사용량을 실시간으로 모니터링해야 합니다.

사용자별로 일일 토큰 한도를 설정하세요. 예를 들어 한 사용자가 하루에 10만 토큰 이상 사용하면 경고를 발생시킵니다.

비정상적인 사용 패턴을 빠르게 감지할 수 있습니다. 대시보드를 만들어서 시간대별, 사용자별, 모델별 토큰 사용량을 시각화하세요.

어디서 비용이 새는지 한눈에 파악할 수 있습니다. 예상 비용 계산 위의 코드처럼 매 호출마다 예상 비용을 계산해보세요.

만약 하루에 1000번의 API 호출이 있고, 평균 500토큰(입력 200, 출력 300)을 사용한다면 일일 비용은 약 $6입니다. 한 달이면 $180입니다.

이렇게 미리 계산하면 청구서를 받고 놀랄 일이 없습니다. 캐싱 전략 똑같은 질문에 매번 API를 호출하면 낭비입니다.

자주 묻는 질문(FAQ)은 캐싱하세요. Redis나 메모리에 저장해두고, 같은 질문이 오면 캐시에서 바로 응답합니다.

API 호출을 아예 하지 않으니 비용이 0입니다. 한 회사는 FAQ 캐싱으로 API 호출을 30% 줄였습니다.

비용도 30% 감소했고, 응답 속도도 10배 빨라졌습니다. 할당량 관리 Anthropic은 계정별로 할당량을 제공합니다.

초기에는 낮은 할당량으로 시작하고, 필요에 따라 증가시킬 수 있습니다. 예상치 못한 트래픽 폭증에 대비해 할당량을 설정하세요.

월 $1000까지만 사용하도록 제한하면, 그 이상은 API 호출이 차단됩니다. 비용 폭탄을 방지할 수 있습니다.

실전 팁 박시니어 씨가 마지막 조언을 했습니다. "개발 환경과 프로덕션 환경의 API 키를 분리하세요.

개발할 때 실수로 무한 루프를 돌리면 비용이 엄청나게 나올 수 있어요." "주간 리포트를 만드세요. 매주 토큰 사용량을 리뷰하고, 이상 패턴을 찾으세요.

작은 문제를 일찍 발견하면 큰 문제를 막을 수 있습니다." 정리 김개발 씨는 이제 토큰 모니터링 시스템을 구축했습니다. "다음 달에는 예산 내에서 운영할 수 있을 것 같아요!" 토큰 사용량을 확인하고 최적화하는 것은 Claude API를 효율적으로 사용하는 핵심입니다.

response.usage를 꼭 체크하고, 비용을 지속적으로 모니터링하세요.

실전 팁

💡 - 매 API 호출의 토큰 사용량을 로그로 남겨서 패턴을 분석하세요

  • 시스템 프롬프트와 대화 히스토리를 합쳐 1000토큰 미만으로 유지하는 것이 이상적입니다
  • 월별 예산을 설정하고, 80% 도달 시 알림을 받도록 설정하세요

이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!

#Claude#API#Messages#SystemPrompt#MultiTurn#AWS

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

함께 보면 좋은 카드 뉴스