Optimizing production agents with Amazon Bedrock AgentCore Observability
Quick Summary
아마존 베드록 에이전트코어 관측성과 클라우드워치를 활용해 정상 동작하지만 느린 에이전트의 병목과 장기 세션의 무제한 메모리 증가를 추적하고, 성능 저하를 사전에 감지하는 방법을 설명한다.
🖼️ 인포그래픽
🖼️ 4컷 인포그래픽
💡 한 줄 요약
아마존 베드록 에이전트코어 관측성과 클라우드워치를 활용해 정상 동작하지만 느린 에이전트의 병목과 장기 세션의 무제한 메모리 증가를 추적하고, 성능 저하를 사전에 감지하는 방법을 설명한다.
📌 핵심 요약
- 프로덕션 에이전트는 오류 없이 작동하더라도 응답 지연과 지속적인 메모리 증가로 사용자 신뢰가 낮아지고 운영 비용이 커질 수 있다.
- 성능 문제는 클라우드워치에서 성능 예산을 초과한 호출을 찾고, 요청 식별자별 추적 타임라인을 분석해 메모리 검색·도구 호출·토큰 생성·순차 처리 중 병목 구간을 확인하는 방식으로 진단한다.
- 느린 도구는 캐싱·연결 풀링·데이터베이스 인덱싱·제한 시간 설정으로 개선하고, 독립적인 호출은 병렬화하며, 응답 길이 제한을 통해 생성 토큰과 지연 시간을 줄인다.
- 장기 세션에서는 토큰 사용량과 메모리 검색 시간이 계속 증가할 수 있으므로 메모리 추출 상태, 추출 실패, 이름공간별 레코드 수와 크기를 점검해야 한다.
- 메모리 통합·요약 설정, 주제별 이름공간, 원시 이벤트 만료 기간을 적용하고 오류율·P95 지연 시간·세션별 토큰 사용량에 경보를 설정해 사용자가 문제를 인지하기 전에 성능 저하를 탐지한다.
🧩 주요 포인트
- 낮은 오류율만으로는 에이전트의 건전성을 판단할 수 없으며, 용도별 성능 예산과 P95 지연 시간 추적이 실제 사용 가능성을 평가하는 기준이 된다.
- 요청 전체의 지연을 작업 단위 추적으로 분해하면 느린 외부 도구, 비효율적인 메모리 검색, 과도한 출력, 병렬화되지 않은 호출 가운데 실제 원인을 구분할 수 있다.
- 장기 세션의 안정성은 메모리를 계속 추가하는 방식이 아니라 주제별 분리, 정기적인 통합과 요약, 보존 기간 제한을 함께 적용할 때 유지될 수 있다.
🧠 상세 정리
1. 프로토타입 이후 달라지는 운영 과제
에이전트가 프로토타입에서 프로덕션으로 이동하면 핵심 과제는 단순히 기능을 작동시키는 데서 빠르고 효율적인 상태를 지속하는 것으로 바뀐다. 앞선 글이 무한 반복과 도구 호출 오류처럼 명확하게 고장 난 에이전트를 다뤘다면, 이 글은 작업은 성공하지만 성능이 나쁜 에이전트를 대상으로 한다. 대표적인 운영 문제는 느린 응답 시간과 제한 없이 증가하는 메모리이며, 둘 다 즉시 오류 경보를 발생시키지 않으면서 사용자 신뢰를 낮추고 비용을 누적시킨다. 글은 아마존 베드록 에이전트코어 관측성과 아마존 클라우드워치를 이용해 실행 경로의 병목과 장기 세션의 메모리 문제를 진단하고, 저하를 조기에 포착하는 운영 방식을 제시한다. 실습을 위해서는 에이전트코어에 접근 가능한 계정, 활성화된 클라우드워치 트랜잭션 검색, 이미 배포된 에이전트가 필요하다.
2. 정상 동작 속에 숨은 성능 병목
성능 병목은 에이전트가 작업을 정확히 완료하면서도 상호작용에 부적합할 정도로 느리게 응답하는 형태로 나타난다. 다만 허용 가능한 속도는 용도마다 달라서 일괄 처리 에이전트에 괜찮은 지연이 고객 서비스 챗봇에는 받아들이기 어려울 수 있으므로, 먼저 사용 사례에 맞는 성능 예산을 정해야 한다. 지연은 기능과 도구가 추가되거나 메모리가 쌓이면서 2초에서 5초, 다시 10초로 점진적으로 늘어날 수 있고, 이때 오류율이 낮게 유지되더라도 P95 응답 시간이 기준을 넘고 사용자가 세션을 이탈할 수 있다. 제시된 세션 사례에서는 세 번의 호출이 모두 평균 7.5~8.2초의 구간 지연을 보여 일시적인 느려짐이 아니라 구조적인 병목임을 드러냈다. 따라서 성공 여부뿐 아니라 지연 시간의 분포와 반복 패턴까지 관찰해야 에이전트의 실제 운영 품질을 판단할 수 있다.
3. 요청별 추적으로 병목 구간 찾기
진단은 먼저 클라우드워치에서 정해진 성능 예산을 초과한 호출을 지연 시간 순으로 조회하는 것으로 시작한다. 원문 예시는 3초를 넘긴 에이전트 호출 50개를 찾도록 구성되어 있지만, 실제 기준값은 각 서비스의 요구사항에 맞게 조정해야 한다. 그중 대표적인 고지연 요청의 요청 식별자를 선택한 뒤 작업명, 지속 시간, 구간 이름을 시간순으로 나열하면 전체 요청에서 시간이 소비된 위치를 확인할 수 있다. 이어 이름공간별 메모리 검색 지연의 평균과 최댓값을 조사하며, 대화형 애플리케이션에서는 사용자가 지연을 알아차리기 시작하는 기준으로 제시된 200밀리초 이내 완료 여부를 확인한다. 도구별 호출 지연도 큰 순서로 비교해야 하며, 하나의 느린 도구가 전체 작업 흐름을 막고 있는지 살펴본다. 예시 추적에서는 17개 구간과 세 번의 이벤트 루프 주기에서 고객 조회와 주문 이력 도구가 병렬이 아니라 차례로 실행되어 지연이 누적됐다.
4. 성능 저하의 세 가지 원인과 개선
원문은 주요 성능 저하 원인으로 느린 도구 실행, 과도한 토큰 생성, 독립 작업의 순차 처리를 제시한다. 외부 도구가 최적화 부족, 과부하 또는 네트워크 문제로 2초씩 걸리면 세 번의 순차 호출만으로 6초가 누적되므로, 캐싱·연결 풀링·데이터베이스 인덱싱·제한 시간 설정을 적용하고 필요하면 더 빠른 대안을 검토해야 한다. 도구가 계속 느릴 경우에는 네트워크 지연, 콜드 스타트, 자원 경합처럼 도구 로직 밖의 원인도 구분하기 위해 해당 도구를 독립적으로 측정한다. 토큰은 순차적으로 생성되므로 500토큰 응답은 100토큰 응답보다 생성 시간이 다섯 배 길어질 수 있어, 기본 답변을 2~3문장으로 유도하고 명시적인 길이 제한과 토큰 사용량 경보를 두는 방식이 권장된다. 서로 독립적인 2초, 1.5초, 1초의 호출을 병렬화하면 합계 4.5초가 가장 긴 호출의 2초 수준으로 줄어들 수 있으며, 적용 후에는 동일한 지연 조회와 추적 타임라인으로 P95와 병렬 실행 여부를 다시 검증해야 한다.
5. 장기 세션에서 나타나는 메모리 증가
고객 서비스, 연구 보조, 모니터링처럼 오랜 시간 이어지는 작업에서는 세션 문맥이 계속 쌓이면서 메모리 사용량이 제한 없이 증가할 수 있다. 이 상태가 지속되면 토큰 한도나 문맥 창 한도를 넘거나 사용 가능한 메모리를 소진해 세션이 예기치 않게 종료되고, 보존하던 대화 상태도 잃을 수 있다. 주요 징후는 세션 지속 시간에 비례해 토큰 사용량이 선형으로 증가하고, 저장소가 커질수록 메모리 검색 지연이 늘어나며, 메모리 부족 또는 문맥 창 초과 오류가 발생하는 것이다. 제시된 사례에서는 한 세션의 여섯 개 추적에서 총 1만 5,700개의 토큰이 소비되고 평균 추적 지연이 3,757밀리초였으며, 호출이 이어질수록 토큰 사용량도 증가했다. 진단 시에는 3,600초를 넘긴 세션을 메모리 크기 순으로 조회한 뒤 비정상적으로 큰 세션의 세션 식별자를 선택해 후속 분석 대상으로 삼는다.
6. 메모리 추출·실패·이름공간 진단
선택한 장기 세션에서는 시간순으로 메모리 추출 상태, 추출 지연, 추출된 메모리 수를 조회해 정보의 통합이 정기적으로 수행되는지 확인한다. 원문의 로그 사례에서는 약 18시 20분 무렵 메모리 관련 항목 209개가 집중됐고, 각 호출이 이전 데이터를 정리하거나 요약하지 않은 채 대화 메모와 사용자 문맥을 계속 추가하는 패턴을 보였다. 장시간 추출이 발생하지 않는 공백이 있다면 메모리가 제대로 통합되지 않는 상태이며, 추출 실패만 따로 조회하면 누적 증가의 직접적인 원인을 좁힐 수 있다. 실패 원인으로는 요약 과정의 토큰 한도 초과, 처리할 수 없는 메모리 형식, 저장소 기록 과정의 네트워크 시간 초과, 메모리 갱신을 막는 권한 오류가 제시된다. 마지막으로 이름공간별 메모리 개수와 전체 크기를 합산해 분포를 살펴보고, 하나의 이름공간에 수천 개의 메모리가 몰려 있다면 검색과 통합을 위한 조직 방식이 부적절하다는 경고 신호로 판단한다.
7. 메모리 통합과 보존 범위 제어
메모리 문제를 해결하려면 에이전트코어 메모리 전략에 통합 설정이 포함되어 있는지 확인해 레코드가 끝없이 누적되는 대신 시간이 지나면서 병합되고 요약되도록 해야 한다. 검색 범위를 관련 문맥으로 제한하기 위해 전략 정의의 이름공간 템플릿을 사용하고, 선호 사항·대화 이력·도메인 지식처럼 주제별로 기록을 분리하는 방식이 제시된다. 과거 대화를 원문 그대로 계속 저장하기보다 압축된 항목으로 요약하고, 예시로 선호 사항 100개, 최근 메시지 50개, 도메인 사실 500개처럼 이름공간마다 크기 한도를 둘 수 있다. 원시 이벤트가 영구히 남지 않도록 이벤트 만료 기간도 설정해야 하며, 원문은 허용 범위를 7일에서 365일 사이로 명시한다. 이러한 조치는 저장량만 줄이는 것이 아니라 메모리 검색 범위를 좁히고, 장기 세션에서 문맥 한도 초과와 예기치 않은 종료가 발생할 가능성을 낮추는 운영 설정으로 설명된다.
8. 사후 대응에서 선제적 관측으로
두 편에 걸친 장애 진단을 마친 뒤 원문은 문제가 발생한 후 추적을 검토하는 방식만으로는 부족하며, 프로덕션 관측 전략을 통해 저하를 사전에 포착해야 한다고 강조한다. 프로덕션 에이전트, 메모리 시스템, 게이트웨이에 포괄적인 계측을 활성화하고 클라우드워치 로그와 지표, 오픈텔레메트리 추적을 함께 구성해 상태와 성능을 실시간으로 확인하도록 권장한다. 핵심 지표에는 경보를 설정하며, 원문이 제시한 기준은 오류율 5%, P95 지연 시간 3초, 세션별 토큰 사용량이다. 이 기준을 넘었을 때 사용자의 신고를 기다리지 않고 클라우드워치가 알리도록 만드는 것이 목적이다. 운영 대시보드도 별도로 구성해야 하며, 제공된 원문 범위에서는 기본 대시보드에 최근 24시간의 전체 호출 수를 표시하라는 지점까지 제시되어 있다.
🧾 핵심 주장 / 시사점
- 작업 성공률과 오류율이 양호해도 높은 P95 지연 시간과 세션 이탈이 지속되면 프로덕션 품질은 낮을 수 있으므로, 정확성과 성능을 별도의 운영 축으로 관리해야 한다.
- 전체 응답 시간만 보는 것보다 요청 식별자를 기준으로 메모리 검색, 도구 호출, 토큰 생성, 이벤트 루프를 분해하면 최적화 대상을 구체적으로 선택하고 변경 효과도 같은 기준으로 검증할 수 있다.
- 병렬화는 독립 작업의 누적 지연을 가장 긴 단일 작업 수준으로 줄일 수 있지만, 적용 후 추적 타임라인에서 실제 병렬 실행 여부와 P95 개선을 확인하는 절차가 필요하다.
✅ 액션 아이템
- 클라우드워치에서 성능 예산을 초과한 호출을 고르고 요청 식별자별 추적 타임라인으로 메모리 검색·도구 호출·토큰 생성 병목을 확인한다.
- 느린 도구에 캐싱·연결 풀링·데이터베이스 인덱싱·제한 시간을 적용하고 독립적인 호출은 병렬화하며 응답 길이 제한으로 생성 토큰을 줄인다.
- 장기 세션에 메모리 통합·요약, 주제별 이름공간, 원시 이벤트 만료 기간을 적용하고 오류율·P95 지연 시간·세션별 토큰 사용량 경보를 건다.
❓ 열린 질문
- 낮은 오류율 대신 용도별 성능 예산과 P95 지연 시간으로 에이전트 건전성을 가르는 임계값은 무엇인가?
- 장기 세션에서 토큰 사용량과 메모리 검색 시간 증가를 막는 주제별 이름공간 분리와 보존 기간 한도는 어디까지인가?
- 메모리 추출 실패와 이름공간별 레코드 수·크기 점검을 언제 수행해야 성능 저하를 사용자 인지 전에 잡을 수 있는가?