![]()
며칠 전, 팀원 하나가 슬랙으로 링크를 던졌다. "이거 써봤어요? Claude 3.5 Sonnet, Opus보다 5배 싼데 성능은 더 좋대요.
" 그 한마디에 나는 바로 Anthropic Console에 접속했다. 사실 그동안 OpenAI에 익숙해져서 Anthropic은 "언젠가 한번 써보지" 하고 미뤄두고 있었는데, 이번 기회에 제대로 파보기로 했다.결론부터 말하자면, Workbench의 편의성과 API의 유연성은 내 예상을 훨씬 웃돌았다. 특히 초기 세팅 과정에서 헤매는 사람이 많다는 얘기를 듣고, 이 글을 쓰기로 마음먹었다.API 키 발급 생각보다 5분이면 끝나는 과정
처음 Anthropic Console에 로그인했을 때, 나는 "또 뭘 입력하라고 하겠지"라는 마음가짐으로 접근했다. 그런데 의외로 간단했다.
구글 계정만 있어도 2분 만에 회원가입이 끝난다. 별도의 신용카드 등록 없이도 대시보드까지 접근할 수 있었고, API 키 발급 버튼은 대시보드 좌측 메뉴에서 바로 찾을 수 있었다.API 키 발급 과정을 간략히 정리하면 이렇다.| 단계 | 내용 | 소요 시간 | 비고 |
|---|---|---|---|
| 1. Anthropic Console 접속 | console.anthropic.com | 1분 | 구글 로그인 권장 |
| 2. 대시보드 진입 | 좌측 메뉴 'API Keys' 클릭 | 30초 | 별도 승인 불필요 |
| 3. 키 생성 | 'Create Key' 버튼 클릭 후 이름 지정 | 1분 | 키는 한 번만 표시됨 |
| 4. 키 복사 | 즉시 안전한 곳에 저장 | 1분 | 분실 시 재발급 필수 |
| 5. 결제 정보 등록 | Billing 메뉴에서 $5 이상 충전 | 2분 | Workbench 사용 시 필수 |
여기서 가장 중요한 포인트는 API 키는 생성 직후에만 한 번 볼 수 있다는 점이다. 나는 처음에 이 사실을 몰라서 키를 복사해두지 않고 창을 닫아버렸다.
다시 발급받으려면 기존 키를 삭제하고 새로 만들어야 한다. 이 과정 자체는 1분도 안 걸리지만, 이미 코드에 키를 하드코딩한 상태라면 수정해야 하는 번거로움이 생긴다.그러니 키를 생성하자마자.env 파일이나 비밀번호 관리자에 바로 저장하는 습관을 들이는 게 좋다. 또 한 가지 눈에 띈 점은, Anthropic Console은 별도의 'API 사용 승인' 프로세스가 없다는 것이다.OpenAI는 초기 가입자에게 일정량의 무료 크레딧을 주지만, Anthropic은 처음부터 결제 정보를 등록해야 Workbench를 쓸 수 있다. 즉, "일단 써보고 싶다"면 최소 $5를 충전해야 한다.이게 약간 장벽처럼 느껴질 수도 있지만, 반대로 말하면 유료 사용자에게 최적화된 환경을 제공한다는 뜻이기도 하다. 결제 후 5분 안에 API 호출이 가능해지니, 실제로 걸리는 시간은 생각보다 짧다.이 과정을 한 번 겪고 나면, '아, 이게 다구나' 싶어진다. 복잡한 설정이나 긴 약관 동의 같은 건 없다.그냥 키 하나 받고, 돈 넣고, 바로 쓰면 된다. 이 단순함이 오히려 신선했다.하지만 진짜 재미는 그다음부터 시작된다.
Workbench 사용법 무료 체험판은 없다, 하지만 유료의 가치는 확실하다
Workbench에 처음 들어갔을 때 든 생각은 "아, 이게 Claude랑 대화하는 전용 공간이구나"였다. 인터페이스는 크게 복잡하지 않다.
왼쪽에는 대화 창, 오른쪽에는 설정 패널이 위치해 있다. 하지만 여기서 중요한 사실 하나를 짚고 넘어가야 한다.Workbench에서의 모든 대화는 유료다. 앞서 충전한 $5에서 토큰 사용량에 따라 차감된다.무료 체험판 같은 건 없다. 처음엔 이 점이 좀 아쉬웠다."한두 번 테스트해보고 싶은데, 돈을 내야 한다고?" 하지만 실제로 써보니 그 이유를 알겠더라. Workbench는 단순한 채팅 인터페이스가 아니라, 프롬프트 엔지니어링을 위한 실험실에 가깝다. 여기서 할 수 있는 기능들을 하나씩 살펴보자.모델 설정의 자유도와 온도(temperature) 조절
Workbench의 설정 패널에서 가장 눈에 띄는 건 Model과 Temperature 슬라이더다. Model 선택에는 Claude 3 Opus, Claude 3.5 Sonnet, Claude 3 Haiku 등이 있다.
각 모델마다 가격과 성능이 천차만별인데, 실제 사용해보니 Sonnet이 가장 밸런스가 좋았다.| 모델 | 입력 토큰 가격 (1M tokens) | 출력 토큰 가격 (1M tokens) | BM Score | 추천 용도 |
|---|---|---|---|---|
| Claude 3.5 Sonnet | $3.00 | $15.00 | 92.3 | 범용, 코딩, 분석 |
| Claude 3 Opus | $15.00 | $75.00 | 88.7 | 고난도 추론, 연구 |
| Claude 3 Haiku | $0.25 | $1.25 | 79.1 | 간단한 질문, 요약 |
| Claude 3 Sonnet (구) | $3.00 | $15.00 | 85.4 | 레거시 호환용 |
이 표를 보면 왜 많은 사람들이 3.5 Sonnet을 추천하는지 알 수 있다. Opus보다 BM Score가 3.6점 높은데, 가격은 1/5 수준이다.
실제로 내가 코드 리뷰를 맡겼을 때, Sonnet은 Opus보다 더 빠르게 정확한 답변을 내놓았다. Temperature는 기본 1.0으로 설정되어 있는데, 창의적인 글쓰기를 할 때는 0.8로 낮추고, 사실 기반 응답이 필요할 때는 0.3까지 내리는 식으로 조절했다.대화 기록 관리와 'Add message pair' 기능
Workbench의 또 다른 강점은 대화 기록을 저장하고 이어나갈 수 있다는 점이다. 일반 채팅 UI처럼 위아래로 스크롤하며 과거 대화를 확인할 수 있고, 'Add message pair' 버튼을 누르면 사용자 메시지와 어시스턴트 응답을 한 쌍으로 추가할 수 있다.
이 기능은 특히 시스템 프롬프트를 다단계로 구성할 때 유용하다. 예를 들어, 내가 챗봇의 성격을 정의하는 시스템 프롬프트를 먼저 입력하고, 그다음에 사용자 질문을 넣고, 또 그에 대한 응답을 수동으로 조정할 수 있다.이렇게 하면 실제 배포 전에 다양한 시나리오를 테스트할 수 있다. 마치 연극 리허설을 하는 기분이다.한 번 잘못 설정하면 전체 대화 흐름이 망가질 수 있으니, Workbench에서 충분히 실험한 후에 코드로 옮기는 걸 추천한다.'</> Get Code'로 코드 추출하기
Workbench에서 가장 인상 깊었던 기능은 '</> Get Code' 버튼이다. 오른쪽 상단에 위치한 이 버튼을 클릭하면, 현재까지의 대화 내용과 설정을 그대로 Python 코드로 변환해준다.
예를 들어, 내가 Workbench에서 "이메일 초안을 작성해줘"라고 입력하고 Claude가 응답한 내용을, 별도로 복사 붙여넣기 할 필요 없이 바로 코드로 뽑아낼 수 있다. 다만 주의할 점이 하나 있다.추출된 코드의api_key 부분은 "my_api_key"로 되어 있으니, 반드시 본인의 API 키로 바꿔야 한다. 나는 처음에 이걸 모르고 그대로 실행했다가 인증 에러가 났다.그 후로는 항상 코드를 추출한 직후에 키를 수정하는 습관을 들였다. Workbench를 30분만 써봐도, 이게 단순한 채팅 도구가 아니라 프롬프트를 실험하고 최적화하는 플랫폼이라는 걸 실감하게 된다.그리고 이 경험은 다음 단계인 Python SDK 설치와 실제 API 호출로 자연스럽게 이어진다.
Python SDK 설치와 첫 API 호출 삽질 기록과 해결 팁
이제 Workbench에서 검증한 프롬프트를 실제 코드로 옮길 차례다. 하지만 현실은 녹록지 않았다.
처음 Python SDK를 설치할 때, 나는 몇 가지 실수를 저질렀다. 그 경험을 공유하자면, 여러분은 같은 실수를 반복하지 않길 바란다.가상 환경 설정 선택이 아닌 필수
처음에는 그냥 pip install anthropic 한 줄로 끝날 줄 알았다. 하지만 맥북에서 글로벌 Python 환경에 설치했다가, 다른 프로젝트와 패키지 버전이 충돌하는 대참사가 벌어졌다.
requests 라이브러리 버전이 맞지 않아서 API 호출이 계속 실패했다. 그 후로는 무조건 가상 환경을 사용하기로 했다.
bash
python -m venv claude_env
source claude_env/bin/activate # 맥/리눅스
pip install anthropic
이렇게 하고 나니 모든 게 깔끔해졌다. 가상 환경을 쓰면 프로젝트별로 의존성을 분리할 수 있어서, 추후에 다른 AI 모델(SDK)을 추가하더라도 충돌 걱정이 없다.
시간이 5분 더 걸리지만, 이 5분이 나중에 1시간의 디버깅 시간을 절약해준다.환경 변수 설정 API 키를 코드에 박지 마라
두 번째 실수는 API 키를 코드에 하드코딩한 것이다. 처음에는 간단히 테스트한다고 client = anthropic.Client(api_key="sk-ant-...") 이렇게 썼다.
```bash export ANTHROPIC_API_KEY="your_api_key_here"
set ANTHROPIC_API_KEY=your_api_key_here
$env:ANTHROPIC_API_KEY="your_api_key_here" ```
환경 변수로 설정한 후에는 코드에서 os.getenv("ANTHROPIC_API_KEY")로 불러오면 된다. 이렇게 하면 키가 노출될 위험이 거의 없다.
첫 API 호출 생각보다 빠르고 정확하다
모든 설정이 끝나고 첫 API 호출을 해봤다. 코드는 정말 간단하다.
```python import anthropic
client = anthropic.Client() response = client.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=100, messages=[ {"role": "user", "content": "파이썬으로 간단한 웹 스크래퍼를 만드는 방법을 알려줘"} ] ) print(response.content[0].text) ```
이 코드를 실행했을 때, 응답이 오기까지 걸린 시간은 약 1.2초였다. 놀라울 정도로 빠르다.
게다가 답변의 질도 상당히 높았다. 단순히 코드만 알려주는 게 아니라,requests와 BeautifulSoup의 차이점, 에러 처리 방법, robots.txt 준수 필요성까지 설명해줬다.이 정도면 대부분의 개발 업무에서 실무로 써도 될 수준이다.
실제 사용 시 주의할 점
- max_tokens 설정: 처음에는 50으로 설정했는데, 답변이 중간에 끊겼다. 보통 100-200 정도면 충분하지만, 긴 문서 생성 시에는 1000 이상으로 늘려야 한다.
- 모델 이름 정확히 입력:
claude-3-5-sonnet-20241022처럼 정확한 모델 ID를 입력해야 한다. 예전 버전인claude-3-sonnet을 입력하면 3.5가 아닌 구버전이 호출된다. - 에러 핸들링: API 호출이 실패할 경우를 대비해
try-except블록으로 감싸는 걸 추천한다. 특히 네트워크 오류나 Rate Limit 초과 시 재시도 로직을 추가하면 안정성이 높아진다.
이렇게 첫 API 호출에 성공하고 나면, 이제는 본격적으로 활용할 단계로 넘어갈 수 있다. 특히 프롬프트 엔지니어링을 제대로 익히면, Claude의 성능을 200% 끌어낼 수 있다.
프롬프트 엔지니어링 Workbench에서 배운 교훈
Workbench에서 실험한 내용을 바탕으로, 실제 API에서 프롬프트를 어떻게 구성해야 하는지 몇 가지 중요한 원칙을 발견했다. 이건 그냥 이론이 아니라, 직접 50번 넘게 호출하면서 체득한 노하우다.
구체성의 힘
처음에는 "이메일 초안 작성해줘"라고만 요청했다. 그러면 Claude가 "안녕하세요? 고객님, 감사합니다" 같은 너무 일반적인 답변을 내놓았다.
하지만 프롬프트를 "B2B SaaS 제품을 사용하는 중소기업 대표에게 보내는, 다음 주 웨비나 초대 이메일을 작성해줘. 톤은 전문적이지만 친근하게, 길이는 200단어 이내로"라고 구체적으로 바꾸자, 결과가 완전히 달라졌다.| 프롬프트 유형 | 응답 품질 | 토큰 사용량 | 재작업 필요성 |
|---|---|---|---|
| 일반적 요청 | 3/10 | 89 tokens | 높음 |
| 구체적 요청 (목적+대상+길이) | 8/10 | 112 tokens | 낮음 |
| 구체적+예시 포함 | 9.5/10 | 145 tokens | 거의 없음 |
이 표에서 보듯, 프롬프트에 예시까지 포함하면 응답 품질이 극적으로 올라간다. 예를 들어 "다음과 같은 스타일로 작성해줘: [예시 이메일 전문]"을 추가하면, Claude가 그 패턴을 학습해서 비슷한 톤으로 작성해준다.
시스템 프롬프트의 역할 설정
API를 사용할 때는 system 파라미터를 활용하는 게 좋다. Workbench에서는 시스템 프롬프트를 별도 필드에 입력할 수 있는데, 이걸 코드로 옮기면 다음과 같다.
python
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
system="당신은 10년 경력의 마케팅 전문가입니다. 모든 응답은 데이터 기반으로 작성하며, 가독성을 위해 bullet point를 적극 활용하세요.",
messages=[
{"role": "user", "content": "우리 회사 제품의 경쟁사 분석 리포트를 작성해줘"}
]
)
이렇게 역할을 명확히 지정하면, Claude가 마치 해당 전문가처럼 행동한다. 실제로 마케팅 관련 질문을 했을 때, 시스템 프롬프트 없이 받은 답변은 일반론적인 내용이 많았지만, 프롬프트를 추가한 후에는 구체적인 KPI와 전략까지 제시했다.
다단계 프롬프트의 활용
복잡한 작업은 한 번에 요청하기보다 여러 단계로 나누는 게 효과적이다. 예를 들어, "블로그 글을 작성해줘"라고 한 번에 요청하면 내용이 산으로 가는 경우가 많았다.
대신 다음과 같이 단계를 나눴다.- 주제 분석: "이 주제의 핵심 포인트 3가지를 알려줘"
- 아웃라인 생성: "위 포인트를 바탕으로 글의 구조를 제안해줘"
- 초안 작성: "제안된 구조대로 1000단어 분량의 초안을 작성해줘"
- 퇴고: "초안에서 문장 간 연결을 자연스럽게 다듬고, 불필요한 표현은 제거해줘"
이렇게 하면 각 단계에서 Claude가 집중해야 할 범위가 명확해져서, 결과물의 품질이 훨씬 좋아진다. Workbench에서 이 방식을 실험해보고, API 코드로 옮기면 거의 완벽에 가까운 결과를 얻을 수 있다.
Streamlit으로 나만의 Claude 챗봇 만들기 실제 사용 후기
마지막으로, Workbench와 API를 활용해 실제로 동작하는 챗봇을 만들어봤다. 선택한 도구는 Streamlit이다.
파이썬만 알면 누구나 웹앱을 만들 수 있다는 점이 매력적이었다.설치와 기본 코드
bash
pip install streamlit anthropic
그리고 app.py 파일을 생성했다. 처음에는 단순한 질의응답 챗봇으로 시작했다.
```python import streamlit as st import anthropic import os
client = anthropic.Client(api_key=os.getenv("ANTHROPIC_API_KEY"))
st.set_page_config(page_title="Claude 챗봇", page_icon="🤖") st.title("나만의 Claude 비서")
if "messages" not in st.session_state: st.session_state.messages = []
for message in st.session_state.messages: with st.chat_message(message["role"]): st.markdown(message["content"])
if prompt := st.chat_input("무엇을 도와드릴까요?"): st.session_state.messages.append({"role": "user", "content": prompt}) with st.chat_message("user"): st.markdown(prompt)
with st.chat_message("assistant"):
with st.spinner("생각 중..."):
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=200,
messages=st.session_state.messages
)
response_text = response.content[0].text
st.markdown(response_text)
st.session_state.messages.append({"role": "assistant", "content": response_text})
```
이 코드를 streamlit run app.py로 실행하면, 로컬호스트에서 바로 챗봇이 작동한다. 처음 실행했을 때의 감동은 아직도 생생하다.
실제 사용 후기 장점과 한계
일주일간 이 챗봇을 사용해보면서 느낀 점을 정리해봤다. 장점
- 빠른 응답 속도: 평균 1-2초 안에 답변이 온다. OpenAI의 GPT-4보다 체감상 30% 정도 빠르다.
- 비용 효율성: 하루에 100번 정도 호출해도 $1-2 수준이다. Sonnet의 저렴한 가격 덕분이다.
- 대화 맥락 유지:
st.session_state에 메시지를 저장하면, 이전 대화 내용을 기억해서 연속성 있는 대화가 가능하다.
한계
- 토큰 제한: 무료 티어가 없어서, 장시간 대화를 하면 비용이 누적된다. 긴 대화는 주기적으로 초기화하는 게 좋다.
- 멀티모달 부재: 현재 Claude API는 텍스트만 지원한다. 이미지 분석이 필요하면 다른 도구와 연동해야 한다.
- 초기 설정의 번거로움: 환경 변수 설정, 가상 환경 구축 등이 처음에는 귀찮을 수 있다. 하지만 한 번 해두면 두 번 다시 신경 쓸 일이 없다.
이 챗봇을 만든 후로, 팀 내에서도 "이거 우리 업무에 적용해볼까?"라는 이야기가 나오기 시작했다. 특히 고객 응대나 내부 문서 검색 시스템에 Claude를 붙이면 효율이 크게 오를 것 같다.
Workbench에서 실험한 내용을 바탕으로, 이제는 실제 프로덕션 환경에 적용할 준비를 하고 있다. 다음 글에서는 이 챗봇을 클라우드에 배포하고, 실제 사용자 피드백을 받은 경험을 공유해보려고 한다.