
Amazon ElastiCache 및 Prompt Caching을 사용하여 Amazon Bedrock 호출 및 토큰 비용 절감 및 최적화하기:
요약
Amazon Bedrock의 호출 비용과 지연 시간을 최적화하기 위해 Amazon ElastiCache와 Prompt Caching을 결합한 2단계 캐싱 아키텍처를 소개합니다. 애플리케이션 레벨과 모델 레벨에서 각각 캐싱을 적용하여 효율적인 생성형 AI 애플리케이션 구축 방법을 다룹니다.
핵심 포인트
- Amazon ElastiCache를 통한 애플리케이션 레벨의 쿼리 우회 및 비용 100% 절감
- Bedrock Prompt Caching을 통한 입력 토큰 비용 최대 90% 절감
- KV 어텐션 상태 재사용을 통한 응답 지연 시간 최대 85% 단축
- 2단계 캐싱 전략을 통한 엔터프라이즈급 AI 서비스 최적화
Amazon Bedrock이란 무엇인가?
AWS의 공식 문서에 따른 Amazon Bedrock의 정의는 다음과 같습니다:
"Amazon Bedrock은 선도적인 AI 기업의 고성능 파운데이션 모델 (Foundation Models)에 대해 안전하고 엔터프라이즈급 접근을 제공하여, 생성형 AI (Generative AI) 애플리케이션을 구축하고 확장할 수 있도록 지원하는 완전 관리형 서비스입니다."
따라서 이를 시장에 나와 있는 모든 사용 가능한 모델에 대해 쉬운 방법과 낮은 설정으로 관리된 접근을 허용하는 관리형 API 허브로 간주할 수 있습니다.
본문을 진행하기 전에, 시장에서 흔히 볼 수 있는 몇 가지 정의와 그 사용 사례를 나열하겠습니다.
- RAG (Knowledge bases): 관리형 검색 증강 생성 (Retrieval-Augmented Generation) 파이프라인이며, 기업 문서 Q&A, 내부 위키 등에 사용됩니다.
- Agents & AgentCore: 자율적인 다단계 오케스트레이션 (Orchestration) 및 도구 호출 (Tool calling)을 수행하며, 자동화된 워크플로우, 고객 환불, IT 운영 등에 사용됩니다.
- Guardrails: 엔터프라이즈 안전 계층, 개인정보 (PII) 마스킹, 환각 (Hallucination) 방지를 제공하며, 규정 준수 강제 및 프롬프트 인젝션 (Prompt injection) 방어에 사용됩니다.
- Bedrock Flows: 시각적 및 코드 정의 워크플로우 빌더이며, 콘텐츠 파이프라인, 다중 프롬프트 승인 등에 사용됩니다.
- Model Customization: 미세 조정 (Fine-tuning), 사전 학습 (Pre-training), 모델 증류 (Model distillation)를 수행하며, 도메인 특화 모델 (법률, 의료, 금융)에 사용됩니다.
- Prompt caching: 프롬프트 캐싱 (Prompt caching)은 Amazon Bedrock에서 지원되는 모델과 함께 사용할 수 있는 선택적 기능으로, 추론 응답 지연 시간 (Inference response latency)과 입력 토큰 비용을 줄여줍니다. 컨텍스트의 일부를 캐시에 추가함으로써, 모델은 캐시를 사용하여 입력값의 재계산을 건너뛸 수 있으며, 이를 통해 Bedrock은 컴퓨팅 비용 절감을 공유하고 응답 지연 시간을 낮출 수 있습니다.
아키텍처 다이어그램
기본적으로 이 다이어그램은 아래와 같이 캐시가 어떻게 작동하는지를 설명합니다.
-
Tier 1 (애플리케이션 레벨 - Amazon ElastiCache): 동일하거나 의미적으로 유사한 쿼리에 대해 Amazon Bedrock 호출 및 토큰 사용을 100% 제거하여 완전히 우회합니다.
-
Tier 2 (모델 레벨 - Amazon Bedrock Prompt Caching): 긴 프롬프트 접두사(prefix)에 대해 내부 KV 어텐션 상태(KV attention states)를 재사용함으로써, Bedrock 호출이 반드시 필요한 경우 입력 토큰 비용을 최대 90%, 지연 시간(latency)을 최대 85%까지 절감합니다.
시퀀스 흐름 다이어그램 (Sequence Flow Diagram)
시퀀스 다이어그램의 단계별 상세 과정은 다음과 같습니다:
페이즈 1: 인입 요청 및 Tier 1 조회 (Incoming Request & Tier 1 Lookup)
단계 1 (클라이언트 / 앱 --> 애플리케이션 서비스 / Lambda):
클라이언트가 백엔드 서비스에 사용자 프롬프트를 제출합니다.
단계 2 (애플리케이션 서비스 / Lambda --> Amazon ElastiCache):
Amazon Bedrock에 접근하기 전, 애플리케이션 백엔드는 ElastiCache를 검사합니다:
-
정확한 일치(exact match)를 확인하기 위해 프롬프트의 SHA-256 해시를 계산합니다.
-
의미적 유사성(semantic similarity)을 감지하기 위해 K-최근접 이웃 (K-Nearest Neighbors, KNN) 벡터 검색을 실행합니다.
경로 A: Tier 1 캐시 히트 (ElastiCache Cache Hit)
쿼리 또는 의미적으로 동등한 쿼리가 ElastiCache에 존재하는 경우:
-
단계 3 (Amazon ElastiCache --> 애플리케이션 서비스 / Lambda):
ElastiCache가 캐싱된 JSON 응답을 반환합니다. -
단계 4 3a (애플리케이션 서비스 / Lambda --> 클라이언트 / 앱):
애플리케이션이 사용자에게 답변을 직접 반환합니다.
지연 시간 (Latency): ~5–20 ms
비용 (Cost): Bedrock LLM 토큰 비용 $0.
경로 B: Tier 1 캐시 미스 (Amazon Bedrock로 진행)
ElastiCache에 답변이 없는 경우, 요청은 Tier 2로 내려갑니다:
- 단계 5 3b (애플리케이션 서비스 / Lambda --> Amazon Bedrock Runtime): 백엔드가 Bedrock converse() API를 호출하며, 정적 시스템 컨텍스트(문서/지침)와 사용자의 동적 쿼리를 분리하기 위해 페이로드 내부에 cachePoint 체크포인트를 첨부합니다.
서브 브랜치 B1: Tier 2 프롬프트 캐시 히트 (Bedrock)
Bedrock이 5분간의 롤링 TTL (Time-To-Live) 내에 정적 접두사 (KV attention state)를 이미 캐싱한 경우:
단계 6 4a (Amazon Bedrock Runtime --> 파운데이션 모델 (Foundation Model)):
Bedrock은 파운데이션 모델 (Amazon Nova)에 미리 계산된 Key-Value (KV) 어텐션 상태 (attention states)를 재사용하도록 지시하여, 접두사에 대한 프롬프트 처리를 건너뜁니다.
단계 7 (파운데이션 모델 (Foundation Model) --> Amazon Bedrock Runtime):
모델은 동적 쿼리 접미사 (suffix)만을 기반으로 새로운 토큰을 생성합니다.
단계 8 (Amazon Bedrock Runtime --> 애플리케이션 서비스 (Application Service) / Lambda):
Bedrock이 완성된 결과물 (completion)을 애플리케이션으로 다시 보냅니다.
비용 절감: cachePoint 뒤에 오는 입력 토큰에 대해 90% 할인.
속도: 첫 번째 토큰 생성 시간 (Time-To-First-Token (TTFT))이 현저히 빨라짐.
서브 브랜치 B2: Tier 2 전체 캐시 미스 (Bedrock)
정적 프롬프트가 처음 처리되거나 5분간의 캐시 TTL이 만료된 경우:
단계 9 4b (Amazon Bedrock Runtime --> 파운데이션 모델 (Foundation Model)):
Bedrock은 전체 프롬프트 (정적 접두사 + 동적 쿼리)를 계산하고, 향후 요청을 위해 정적 접두사를 Bedrock의 휘발성 캐시 (ephemeral cache)에 기록합니다.
단계 10 (파운데이션 모델 (Foundation Model) --> Amazon Bedrock Runtime):
모델이 완성된 토큰 (completion tokens)을 생성합니다.
단계 11 (Amazon Bedrock Runtime --> 애플리케이션 서비스 (Application Service) / Lambda):
Bedrock이 표준 가격으로 전체 완성 응답을 애플리케이션 백엔드로 반환합니다.
페이즈 2: 후처리 및 캐시 쓰기-백 (Post-Processing & Cache Write-Back)
단계 12 5 (애플리케이션 서비스 (Application Service) / Lambda --> Amazon ElastiCache):
Bedrock에 의해 새로운 응답이 생성되었으므로, Lambda 백엔드는 임베딩 벡터 (embedding vector)를 계산하고 프롬프트-응답 쌍을 ElastiCache에 저장합니다. 이제 향후 동일하거나 유사한 쿼리는 Tier 1 (경로 A)를 타게 됩니다.
단계 13 6 (애플리케이션 서비스 (Application Service) / Lambda --> 클라이언트 (Client) / 앱 (App)):
백엔드가 최종 생성된 응답을 클라이언트에 전달합니다.
파트 1 마무리 및 파트 2 예고
이러한 2계층 캐싱 전략 (Two-Tier Caching Strategy)을 구현함으로써, 우리는 LLM 인프라를 블랙박스 (black box)로 취급하던 방식에서 벗어나 전통적인 소프트웨어 엔지니어링 패턴 (software engineering patterns)을 사용하여 이를 최적화하기 시작합니다.
-
1계층 (Tier 1, ElastiCache): 동일하거나 의미론적으로 중복되는 (semantically duplicate) 쿼리에 대해 20ms 미만의 속도로 토큰 비용과 호출 (invocations)을 100% 절감합니다.
-
2계층 (Tier 2, Bedrock Prompt Caching): 긴 정적 컨텍스트 (static context)가 모델에 전달되어야 하는 경우, 입력 토큰 (input token) 비용을 최대 90%까지, 지연 시간 (latency)을 최대 85%까지 대폭 줄입니다.
이제 실습 및 구현을 다루는 파트 2로 넘어가겠습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기
