Vercel 인프라에서 커스텀 에이전트 하네스 마이그레이션하기
TuBrief 편집팀
2026년 7월 21일
0
컴퓨터/소프트웨어원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
커뮤니티의 다른 글
댓글 (0)
Log in to leave a comment
아직 작성된 글이 없습니다
원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
Log in to leave a comment
아직 작성된 글이 없습니다
자율형 에이전트가 프로덕션 환경에서 임의의 셸 명령어를 실행할 때 호스트 시스템이 뚫리는 것은 시간문제다. 단일 도커 컨테이너는 runc 파일 서술자 유출 취약점인 CVE-2024-21626 같은 문제에 무방비로 노출된다. KVM 기반 마이크로VM 기술인 Firecracker나 엄격하게 하드닝된 컨테이너 설정을 적용해야 밤에 잠을 잘 수 있다. 특히 클라우드 메타데이터 서비스인 IMDS를 통한 자격 증명 탈취를 막으려면 방화벽 규칙과 네임스페이스 격리를 동시에 묶어야 한다.
이 격리 환경은 다음 3단계로 구성한다. 첫째, 컨테이너 구동 시 --cap-drop=ALL 옵션을 박아넣어 CAP_SYS_ADMIN 및 CAP_NET_ADMIN 같은 모든 특권을 날려버린다. 둘째, cgroups v2 설정으로 자원 사용량을 꽉 조인다. 구체적으로 pids.max = 64로 포크 폭탄을 차단하고, memory.max = 512M로 OOM Killer가 뜨는 상황을 막으며, cpu.max = "50000 100000"으로 최대 CPU 사용량을 0.5 코어로 제한한다. 셋째, iptables 규칙을 세워 외부 네트워크 Egress를 통제하고 AWS 메타데이터 IP인 169.254.169.254로 향하는 모든 패킷을 드롭시킨다.
이 설정을 끝마치면 컨테이너 탈출 시도가 원천 차단된다. 샌드박스 내부 프로세스가 악성 명령어 주입이나 메모리 고갈 공격을 당해도 호스트 OS는 흔들리지 않는다.
Vercel 같은 서버리스 환경은 함수 실행 시간에 엄격한 제한이 걸린다. 멀티턴 에이전트의 대화 맥락과 실행 상태를 유지하려면 외부 저장소 기반의 비동기 작업 큐 패턴을 직접 짜야 한다. 추론 도중에 서버리스 인스턴스가 타임아웃이나 OOM으로 터지더라도 작업이 허공으로 날아가지 않고 안전하게 살아남는 아키텍처가 프로덕션의 생사를 가른다.
이 상태 관리 아키텍처는 다음 3단계를 수행한다. 첫째, Upstash Redis나 Vercel KV를 가져다 세션 상태와 멱등성 키를 관리한다. 세션 상태 데이터는 agent:session:{sessionId}:state 해시 구조에 24시간 TTL을 걸고, 작업 멱등성 키도 동일하게 24시간 동안 유지해 중복 실행을 막는다. 둘째, 작업 분산 락을 원자적 연산인 SET NX EX를 이용해 60초 동안 쥐고 흔들며 동시성 충돌을 방지한다. 셋째, 에이전트 실행이 실패하면 지수 백오프 전략을 적용해 10초, 20초 간격으로 재시도를 걸고, 최대 재시도 횟수를 넘기면 작업을 데드 레터 큐로 밀어 넣는다.
이 구조를 얹으면 대규모 비동기 에이전트가 아무리 몰려와도 메모리 누수가 잡히고 서버 운영 비용이 꺾인다.
모놀리식 커스텀 에이전트 하네스는 단일 프로세스 안에서 LLM 추론과 툴 실행을 동시에 돌린다. 이걸 서버리스 환경으로 그대로 옮기려 들면 프로세스가 좀비가 되거나 보안 경계가 완전히 무너진다. 인프라를 추론 중심의 브레인 영역과 격리된 툴 실행의 핸즈 영역으로 두개로 쪼개야 살아남는다.
이 마이그레이션은 다음 3단계로 밀어붙인다. 첫째, 모놀리식 코드에서 LLM 통신 로직만 도려내어 Vercel AI SDK 표준 구조를 따르는 무상태 함수로 바꾼다. 둘째, Zod 스키마를 가져와 에이전트가 호출할 툴의 입력과 출력 데이터 규격을 강제하고 런타임 검증 레이어를 세운다. 셋째, 검증된 툴 실행 요청을 호스트 프로세스가 아닌 별도의 격리된 샌드박스 런타임 엔드포인트로 REST API 기반 원격 전송을 날리도록 브릿지 코드를 작성한다.
이 리팩토링이 끝나면 복잡했던 코드가 단순해지고 추론 루프와 툴 실행 간의 신뢰 경계가 뚜렷해진다.
제멋대로 움직이는 멀티턴 에이전트는 무한 루프나 불필요한 맥락 복사 한 번으로 토큰과 돈을 순식간에 태워버린다. OpenTelemetry와 Langfuse를 엮어서 실시간으로 인프라 지출을 추적하고 이상 징후를 잡는 파이프라인을 구축하지 않으면 월말에 청구서를 보고 소리치게 된다.
이 모니터링 체계는 다음 3단계를 거쳐 완성한다. 첫째, instrumentation.ts를 손봐서 OpenTelemetry 인스트루멘테이션과 Langfuse 분산 추적 프로세서를 등록하고 서버리스 함수부터 샌드박스까지 단일 Trace ID로 묶는다. 둘째, 프롬프트 캐싱 메커니즘을 적용해 캐시 적중률을 끌어올리고 입력 토큰 비용을 80% 이상 깎아낸다. 셋째, 서킷 브레이커 임계값을 박아넣어 단일 요청당 추론 루프 횟수를 최대 15회로 끊고, 단일 대화 비용이 2.00달러를 넘거나 샌드박스 유휴 시간이 300초를 초과하면 즉시 에이전트를 강제 종료하고 자원을 회수한다.
이 지표들을 박아두면 불필요한 인프라 지출 폭주를 막고 장애가 났을 때 병목 구간을 순식간에 찾아낼 수 있다.