
AI에게 내 휴가 계획을 맡겨보았다 (그 결과물)
요약
Strands SDK와 Amazon Bedrock을 활용하여 항공권, 호텔, 날씨, 예산을 관리하는 AI 여행 에이전트를 구축하는 과정을 소개합니다. AWS Lambda와 S3 등 클라우드 서비스를 결합한 프로덕션 수준의 아키텍처를 제안합니다.
핵심 포인트
- Strands SDK를 통한 에이전트 프레임워크 구축
- Amazon Bedrock(Claude 3.5 Sonnet) 기반의 추론 엔진 활용
- AWS Lambda를 이용한 도구(Tool) 실행 구조
- S3 및 Secrets Manager를 활용한 데이터 및 보안 관리
브라우저 탭을 47개나 열어두고 있었습니다. 그래서 Strands SDK와 Amazon Bedrock으로 AI 여행 에이전트를 직접 만들었습니다 ✈️
자, 솔직히 말씀드릴게요.
저는 브라우저 탭을 47개나 열어두고 있었습니다.
47개라니.....
항공권 예약 앱의 항공편, 예약 사이트의 호텔, 광고가 40%나 섞인 수상한 웹사이트의 날씨 정보. 그리고 밤 11시에 제가 만든 스프레드시트에는 **
당신의 에이전트 (Agent) = 똑똑한 인턴
당신의 도구 (Tools) = 인턴이 할 수 있는 일
당신의 프롬프트 (Prompt) = 지침 (Instructions)
...
하지만 이 인턴은 다음과 같습니다:
- 마감 기한을 절대 어기지 않습니다.
10/10점, 다시 고용할 의사가 있습니다.
우리가 만들고 있는 것
우리의 AI 여행 플래너는 다음과 같은 일을 해야 합니다:
- ✈️ 항공편 찾기
- 🏨 호텔 찾기
- 🌦️ 날씨 확인
- 📋 예산 확인 및 전체 일정 (Itinerary) 구축
에이전트 하나.
도구 네 개.
프롬프트 하나.
끝.
아키텍처 개요 (Architecture Overview)
사용된 스택 (Stack Used)
- Strands SDK → 에이전트 프레임워크 (Agent framework)
- Amazon Bedrock → Claude 3.5 Sonnet
- AWS Lambda → 도구 실행 (Tool execution)
- Secrets Manager → API 키 관리
- S3 → 일정 (Itineraries) 저장
- CloudWatch → 로깅 (Logging) 및 관찰 가능성 (Observability)
네, 이것은 프로덕션 환경에 적합한(production-friendly) 구성입니다.
곧 그렇게 만들 것입니다.
단계 0 — 설정 (Setup)
의존성(Dependencies) 설치:
pip install strands-agents strands-agents-tools boto3
Amazon Bedrock 내에서 Claude 3.5 Sonnet을 활성화하세요.
약 2분 정도 소요됩니다.
🚨 API 키를 하드코딩하지 마세요
알고 있습니다.
당신은 "그저 테스트 중일 뿐"이라는 것을요.
하지만 그 API 키는 결국 공개된 GitHub 리포지토리(repo)에 올라가게 될 것입니다.
그러면 결국 지갑을 태워버릴 정도의 청구서를 받게 될 것입니다.
대신 AWS Secrets Manager를 사용하세요.
import boto3
import json
...
함수 호출 한 번이면 됩니다.
그 후 평온하게 잠드세요.
도구 #1 — 항공편 검색 ✈️
Strands에 대해 저를 놀라게 했던 한 가지는:
당신의 docstring(docstring)은 프롬프트(prompt)의 일부입니다.
개발자를 위한 것이 아닙니다. 모델을 위한 것입니다.
LLM(대규모 언어 모델)은 도구 설명을 읽고 다음을 결정합니다:
- 언제 호출할지
- 어떻게 호출할지
- 어떤 인자(arguments)를 전달할지
좋은 docstring = 똑똑한 에이전트 (agents).
나쁜 docstring = 혼돈.
from strands import tool
@tool
...
네, 저는 "vibe" 필드를 추가했습니다.
아니요, 모델에게는 그것이 필요하지 않습니다.
네, 그것은 저를 행복하게 만들었고, 저의 의사결정을 더 빠르게 만들었습니다....
도구 #2 — 호스텔이 아닌 진짜 호텔 🏨
제가 무엇을 싫어하는지 아시나요?
다음과 같이 적힌 호텔 목록 말입니다:
"박당 $89!"
그러고 나서 어떻게든 다음과 같이 변합니다:
- $89 기본 가격
- 세금
- 리조트 요금 (resort fee)
- "서비스 요금 (service charge)"
- "편의 수수료 (convenience fee)"
- 정신적 피해
제 도구는 그렇게 작동하지 않습니다.
@tool
def search_hotels(
destination: str,
...
도구 #3 — 날씨 확인 🌧️
오로라를 보려고 고글을 챙겼던 것이 다시는 겪고 싶지 않은 인격 수양의 경험이었기 때문입니다.
@tool
def get_weather(
destination: str,
...
작은 도구. 거대한 유용성.
도구 #4 — 일정 생성 📋
이곳에서 모든 것이 하나로 합쳐집니다.
항공편 ✅
호텔 ✅
날씨 ✅
이제 에이전트(agent)는 마침내 현실적인 일정을 짤 수 있습니다.
그리고 네 — 우리는 그것을 S3에 저장합니다.
제 메모(Notes) 앱은 믿을 수가 없거든요.
from datetime import datetime
@tool
...
에이전트 조립하기
이제 재미있는 부분입니다.
from strands import Agent
from strands.models import BedrockModel
...
터미널 출력
[Tool Call] search_flights
✓ Thai Airways selected
...
그 ✅ 예산 내 완료 (Under budget) 문구는 느낌이 남달랐습니다.
프로덕션 교훈 (어렵게 배운 것들)
솔직한 진실을 말씀드리겠습니다:
당신의 로컬 데모(local demo)는 프로덕션 시스템(production system)이 아닙니다.
결국 당신을 힘들게 할 요소들:
| 문제 | 해결책 |
|---|---|
| 하드코딩된 키 (Hardcoded keys) | Secrets Manager |
| ... |
CloudWatch로 로깅 추가하기
import logging
from strands.handlers import CallbackHandler
...
이것이 다음의 차이입니다:
- "멋진 데모"
- 그리고 "실제 소프트웨어"
나의 가장 큰 핵심 요약
1. Docstring(독스트링)은 생각보다 훨씬 중요합니다
모델은 이를 지침 (Instructions)으로 사용합니다.
진지하게 다루세요.
2. 도구 호출 순서가 중요합니다
순서 규칙이 없으면, 제 에이전트는 호텔 비용을 알기도 전에 여행 일정을 짜버렸습니다.
계획은 멋졌지만, 예산은 완전히 틀렸습니다.
3. 낮은 Temperature(온도) = 더 나은 계획
높은 Temperature는 창의성에는 좋지만,
예산 책정에는 적합하지 않습니다.
4. 모든 것을 지속시키세요 (Persist Everything)
S3, DynamoDB, 데이터베이스.
대화 메모리 (Conversation memory)는 결국 사라집니다.
여러분의 데이터는 사라져서는 안 됩니다.
5. 데모와 프로덕션 사이의 간극은 실재합니다
프로토타입과 데모는 마법 같습니다.
프로덕션 (Production) 시스템은 현실이 야구 방망이를 들고 나타나는 곳입니다.
책임감 있게 구축하세요.
FAQ
Strands 인증이 필요한가요?
아니요.
그저 다음만 있으면 됩니다:
- Python
- Bedrock 접근 권한
- 함수 (Functions)
시작하기에는 그것으로 충분합니다.
다른 모델을 사용할 수 있나요?
물론입니다.
Claude를 다음 모델들로 교체할 수 있습니다:
- Llama
- Mistral
- Titan
- Bedrock에서 사용 가능한 모든 모델
제 에이전트가 도구를 이상한 순서로 호출합니다
시스템 프롬프트 (System prompt)를 수정하세요.
명시적으로 작성하세요.
LLM은 명시적인 지침을 좋아합니다.
다음 단계는?
다음과 같이 확장할 수 있습니다:
- 🧠 DynamoDB를 활용한 메모리
- 💬 Slack 봇
- 🤖 멀티 에이전트 오케스트레이션 (Multi-agent orchestration)
- 🏭 Bedrock AgentCore 배포
그 지점부터 정말 흥미로워집니다.
저는 다음과 같은 상태로 이 여정을 시작했습니다:
- 47개의 브라우저 탭
- 망가진 스프레드시트 하나
- 그리고 여행 계획을 짜며 느끼는 분노
그리고 다음과 같은 상태로 끝냈습니다:
- 작동하는 AI 여행 에이전트
- 태국 여행 일정
- 그리고 영구적으로 닫아버린 스프레드시트
솔직히 말해도 될까요?
그럴 만한 가치가 있었습니다.
이 포스트가 즐거우셨다면:
- ❤️ 반응을 남겨주세요
- 🔁 다른 개발자에게 공유해 주세요
- 👀 더 많은 AI 에이전트 튜토리얼을 위해 팔로우해 주세요
그리고 만약 여러분이 Strands SDK를 사용하여 멋진 것을 만드신다면 — 저는 진심으로 그것을 보고 싶습니다. 댓글창에 남겨주시거나 LinkedIn을 통해 연락해 주세요. 저는 AWS에서 근무하고 있으며, AI에 대해 구축하고 의견을 나누는 것을 매우 좋아합니다!
즐거운 빌딩(Building) 되시길 바랍니다. ✈️
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기