"서버리스는 코드가 실행되는 밀리초 단위로만 비용을 지불한다"는 신화는 AWS Lambda에서 AI 에이전트를 실행하려고 할 때 무너집니다. 실제로 가장 큰 비용 항목은 Lambda 컴퓨팅 비용이 아니라, 콜드 스타트 지연 시간, 재시도 루프, 그리고 그 루프에서 발생하는 토큰 사용량입니다.
왜 일반적인 서버리스 개념이 AI 에이전트에게는 오해를 불러일으키는가
대부분의 개발자는 Lambda 함수를 순수한 컴퓨팅 샌드박스처럼 취급합니다. 핸들러를 빠르게 유지하고, 적절한 메모리 크기를 설정하면 비용이 일정하게 유지될 것이라고 생각합니다. 이는 단순한 HTTP 엔드포인트에는 효과적이지만, 언어 모델을 호출하고 응답을 평가하며 필요시 전체 사이클을 재시도하는 에이전트는 단일 Lambda 호출과 일대일로 매칭되지 않습니다. 에이전트의 내부 워크플로우는 모델 호출 횟수를 배가시키며, 각 추가 호출은 컴퓨팅 비용을 압도할 수 있는 토큰 비용을 발생시킵니다.
콜드 스타트(Cold starts)는 숨겨진 비용입니다
Lambda 컨테이너가 처음 프로비저닝될 때 배포 패키지를 압축 해제해야 합니다. 해당 에이전트는 대량의 Python 라이브러리를 불러오므로 이미지가 커질 수 있습니다. 로컬 테스트용으로만 사용하는 브라우저 자동화 라이브러리와 같이 개발 전용 도구를 제거하면 이미지 크기를 줄일 수 있고, 이는 압축 해제 시간을 단축시킵니다. 패키지가 가벼워지면 함수가 요청을 처리할 준비를 더 빨리 마칠 수 있어 컨테이너가 예열(warm up)될 때까지 기다리는 시간이 줄어듭니다.
두 번째 레버는 초기화 코드가 어디에 위치하느냐입니다. 모듈 임포트(import) 시점에 에이전트의 그래프를 구성하면, 무거운 작업이 매 요청마다 발생하는 대신 컨테이너가 시작될 때 한 번만 수행됩니다. 이후의 웜 인보케이션(warm invocation)은 해당 작업을 완전히 건너뜁니다. 트레이드오프는 콜드 스타트 시간이 약간 길어질 수 있다는 점이지만, 컨테이너가 예열된 후에는 요청당 설정 시간이 거의 제로에 가깝다는 이점이 있습니다.
메모리는 지연 시간을 조절하는 노브(knob) 역할도 합니다
Lambda에서는 할당하는 메모리 양에 따라 함수가 할당받는 CPU 비율도 결정됩니다. 함수에 1GB의 메모리를 설정하면 전체 가상 CPU 코어를 할당받습니다. 추가적인 CPU는 라이브러리 임포트와 에이전트 그래프 생성을 가속화하여 콜드 스타트와 예열 지연 시간을 모두 줄여줍니다.
루프 비용: 재시도가 토큰 소비를 배가시킵니다
에이전트는 워커-평가자(worker-evaluator) 루프를 따릅니다. 워커가 응답을 생성하면 평가자가 이를 확인하고, 평가자가 오류를 발견하면 작업은 다시 워커에게 전달됩니다. 이 루프는 포기하기 전까지 최대 5번 반복될 수 있습니다. 이는 단 한 번의 외부 요청이 다음과 같은 상황을 유발할 수 있음을 의미합니다:
- 워커 모델에 대한 최대 5번의 호출
- 평가자 모델에 대한 최대 5번의 호출
- 에이전트가 결정한 수만큼의 도구(tool) 호출
AWS는 실행된 밀리초 단위로 비용을 청구하므로 Lambda 비용은 예측 가능하지만, 토큰 비용은 재시도가 얼마나 필요한지에 따라 크게 요동칠 수 있습니다.
타임아웃의 함정: API Gateway vs. Lambda
API Gateway는 자신이 담당하는 HTTP 요청에 대해 29초라는 엄격한 타임아웃을 적용합니다. 기반이 되는 Lambda 함수가 5분 실행 시간으로 설정되어 있더라도, 5단계의 에이전트 루프는 쉽게 이 제한을 초과할 수 있습니다. Lambda Function URL을 사용하여 API Gateway를 우회하면 29초의 제한이 사라지므로, 함수가 중간에 끊기지 않고 루프를 완료할 수 있습니다.
개발자가 예산을 책정할 때 고려해야 할 사항
교훈은 간단합니다. 서버리스 AI 에이전트의 예산을 세울 때는 단순히 Lambda 실행 시간(밀리초)을 합산하는 것 이상의 것이 필요합니다. 다음 사항들을 반드시 고려해야 합니다:
- 배포 패키지의 크기와 그로 인한 콜드 스타트 지연 시간
- CPU 및 임포트 속도를 결정하는 메모리 설정
- 토큰 사용량을 직접적으로 유발하는 워커-평가자 루프의 예상 재시도 횟수
- 조기 타임아웃을 방지하기 위한 프런트엔드 선택 (API Gateway vs. Function URL)
이 변수 중 하나라도 무시하면 예상했던 것과는 전혀 다른 청구서를 받게 될 수 있습니다.
