#AI
Agentic AI Stack
AI 에이전트 시스템을 구성하는 기술 스택을 알아보자
· 9 MIN · 1459 WORDS
AI 에이전트가 빠르게 발전하는 것 같다. 에이전트가 스스로 판단하고 코드를 실행하는 환경을 더 안전하고 효율적이게 만드는 분야도 커지는 것 같다. 에이전트를 이해하기 위해 다섯 가지 레이어로 나누었다. Infrastructure, Foundation Models, Sandbox, Orchestration, Application, 그리고 Observability 와 Governance 도 여기저기 많이 등장한다.
Infrastructure
- 에이전트의 물리적 논리적 기반이며, 가장 기초가 되는 레이어
- 컴퓨터, 컨테이너 오캐스트레이션, 스토리지, 네트워킹으로 구성됨
Compute
- CPU, GPU/TPU 등으로 구성됨
- CPU는 오케스트레이션, API 서빙에 사용되고, GPU/TPU는 학습, 추론에 사용됨
- AWS EC2, GCP GCE, Azure VMs 가 주요 제공자
Container Orchestration
- 쿠버네티스가 유일한 선택지
- AWS EKS, GCP GKE, Azure AKS
- 하지만 쿠버네티스는 에이전트의 워크로드에 맞지 않음
- 쿠버네티스는
Deployment,StatefulSet두 개의 요소가 있음Deployment: 동일한 Pod을 여러개 복제해서 돌리자(stateless)StatefulSet: Pod에 아이디를 주고 각각 스토리지와 네트워크를 부여하자(stateful)
- 하지만 에이전트는 둘 다 아님
- 에이전트는 각각 고유의 컨텍스트와 메모리를 갖기 때문에 고유의 상태를 갖는다
- 에이전트는 클러스터 멤버가 아니라 독립된 싱글톤이므로
StatefulSet도 아님
- 쿠버네티스는
- 이를 해결하기 위해 여러 솔루션이 등장하는 중
Storage
- 에이전트 시스템에서 저장해야 하는 데이터는 크게 세 가지 종류
- Object Storage: 에이전트가 생성한 파일, 로그, 대화 이력 등 비정형 데이터를 저장하는 스토리지
- Block Storage: 컨테이너에 마운트되는, 컨테이너가 죽어도 유지되는 디스크
- Vector DB: RAG에서 사용되는 임베딩 벡터를 저장하고 검색하는 데이터베이스
Networking
- 네트워크는 크게 두 가지 종류
- 외부 인터넷으로의 네트워크: 피해 영역 최소화가 목표
- 에이전트가 API를 호출하거나 웹 검색을 하는 통신
- 코드를 LLM이 실행하므로 아웃바운드를 제어해야 함
- 화이트리스트, 프록시, DNS 제어 등을 통해 제어함
- 에이전트 간 네트워크: trust propagation 방지가 목표
- 멀티 에이전트 시스템에서 에이전트 간 이루어지는 통신
- 에이전트 찾기, 찾은 에이전트를 믿을 수 있는지, 누구에게 통신할 수 있는지 등을 제어
- 누가 누구에게 통신할 수 있는지를 제어함으로 성능과 안정성이 결정됨
- Hub-and-spoke: 중앙 에이전트가 모든 서브 에이전트에게 작업을 분배하고 결과를 수집함
- Peer-to-peer: 에이전트끼리 직접 메시지를 주고 받음
- Message queue: 에이전트가 직접 통신하지 않고 메시지큐를 통해 통신함
NOTE
Trust Propagation 이란? 영화 기생충에 나온 것과 같이 과외 선생님 - 미술 선생님 - 운전 기사 - 가정부로 최초의 신뢰를 악용해 악의적인 의도가 전체 네트워크에 전파되는 것
Foundation Models
Adaptable intelligence core
- 모델 그 자체로, 다양한 모델로 교체 가능한 컴포넌트임
- 하나의 모델에 종속되지 않고 여러 모델을 어떻게 조합하고 라우팅하느냐가 중요해짐
- 간단한 작업에 강력한 모델을 사용하거나 복잡한 추론에 가벼운 모델을 사용할 이유가 없기 때문
Inference economics
- 핵심 문제가 2020년 초 학습 비용에서 2026년 추론 비용으로 이동함
- 에이전트의 워크플로우는 하나의 작업에 수백번의 LLM 호출을 발생시키기 때문에 추론 비용이 중요함
- Quantization / Distillation: 모델의 정밀도를 줄이거나 경량 모델로 지식을 증류해 많은 추론을 수행
- Smart routing / caching: 반복되는 쿼리 패턴을 캐싱하고 복잡도에 따라 모델을 동적 라우팅함
- Speculative decoding: 경량 모델이 여러 토큰의 초안을 먼저 생성하고, 강력한 모델이 병렬로 검증해 틀린 지점부터 재생성함으로써 반응 속도를 절감함
- 하드웨어 차원에서는 최신 세대 GPU를 학습에 사용하고 이전 세대 GPU를 추론과 경량 모델 학습에 재배치하는 패턴이 일반적임
Serving infrastructure
- 사용자에게 강력한 모델을 빠르고 안정적으로 제공하기 위한 레이어
- Inference engine: vLLM, SGLang, TensorRT-LLM, NVIDIA Triton
- Cloud managed serving: AWS Bedrock, Google Vertex AI, Azure AI Studio, Databricks Model Serving
- Self-hosted serving: Ollama, Together AI, Fireworks AI
- Custom silicon: Google TPU, Amazon Inferentia, Amazon Trainium 등 GPU 의존도를 줄이면서 추론 비용을 최적화하는 방향으로 발전 중
NOTE
“모델을 만드는 건 소수의 일이지만, 모델을 잘 쓰는 건 모든 엔지니어의 일이다.” Foundation Model Layer는 모델의 성능을 논하는 것이 아닌, 모델을 교체 가능한 컴포넌트로 보고 비용-성능-가용성을 고려해 시스템을 설계하는 관점이다.
Sandbox
- 에이전트가 생성한 코드를 어디서, 어떻게 실행할 지 담당하는 레이어
- 에이전트가 동적으로 생성한 코드는 어떤 사람도 리뷰하지 않은 코드
- 그렇기 때문에 존재하지 않는 패키지명을 만들기도 하고 악의적인 코드가 생성될 수도 있음
- 호스트 머신에서 그대로 실행하면 다양한 보안 사고가 발생할 수 있음
- “AI가 생성한 코드를 믿지 않는다” 에서 시작한 레이어
- 샌드박스는 4가지의 격리 경계를 제공함
- Compute isolation
- 커널을 격리하기 위한 경계
- 격리 기술이 3-tier 로 나뉨
- Container (Process Isolation): Linux Namespace +
cgroup을 사용해 환경을 격리하지만, 호스트 커널을 공유하기 때문에 완벽한 격리는 불가능 - gVisor (Kernel Isolation): 컨테이너의 모든 시스템 콜을 호스트 커널에 직접 전달하지 않고 유저 공간에서 재구현함
- MicroVM (Hardware Isolation): 워크로드당 전용 커널을 부팅해 완전한 하드웨어 레벨의 커널 분리를 구현함
- Filesystem boundary: Linux Namespace, 가상 VFS, 또는 독립 커널 파일 시스템을 사용해 호스트 정보 격리, 다른 에이전트 세션과의 정보 격리를 구현함
- Network control:
iptables,nftables또는 네트워크 정책으로 코드가 접근할 수 있는 호스트를 제한함 - Resource limit and TTL
- 무한 루프를 제한하거나 무한한 리소스 사용을 제한하기 위해
cgroup을 사용함 - 또한 TTL을 설정해 종료 후 자동 파기되도록 설정함
- 무한 루프를 제한하거나 무한한 리소스 사용을 제한하기 위해
- Compute isolation
Orchestration
- 에이전트의 작업을 스케줄링하는 레이어
- Agent Loop: Observe(상태 인식) - Plan(다음 행동 결정) - Act(툴 호출, 코드 실행) - Reflect(평가, 종료 판단)
- Observe: 유저의 입력, 대화 기록, 실행 결과, 외부 데이터 등을 하나의 Context Window에 모아 현재 상태를 인식하는 단계
- Plan: LLM이 Context를 받아서 자연어로 추론한 뒤 구조화된 행동을 출력함
- Act: 계획 단계의 행동을 Sandbox Layer에서 실제로 실행하는 단계
- Reflect: 실행 결과를 보고 목표 달성 여부를 판단해 Observe로 돌아가거나 최종 답변을 생성하는 단계
- Planning: 에이전트의 작업을 스케줄링
- ReAct (Reason + Act)
- LLM이 한 단계씩 생각하고 행동하고 관찰하는 것을 반복하는 패턴
- 단순하고 디버깅이 쉽지만 장기 계획에 약함
- Plan and Execute
- Divide and Conquer 전략
- 에이전트 작업을 세부 작업으로 분해 후 순서대로 실행
- 장기 계획에 강하지만
- 초기 계획이 잘못되면 모든 결과물이 잘못됨
- LangGraph
- Agent Loop를 directed graph로 정의
- 노드가 하나의 실행 단위
- 엣지가 상태 전이 조건
- Finite State Machine 이지만 각 전이 조건이 LLM으로 동적 생성될 수 있음
- Agent Loop를 directed graph로 정의
- ReAct (Reason + Act)
- Memory: 에이전트에게 주어지는 상태
- LLM 자체는 매 호출마다 별도의 Context Window가 구성되므로 Stateless
- 별도의 기억(memory, state)를 명시적으로 관리해야 함
- Working Memory: 직접 Context Window 안에 들어가는 기억
- Short-term Memory: 세션 내 누적되는 기억
- 오래된 대화를 요약해 압축하거나
- 슬라이딩 윈도우로 최근 몇 개의 대화만 유지하는 전략을 가짐
- Long-term Memory: 세션 간 누적되는 기억
- 에이전트가 Observe 단계에서 Vector Search를 통해 관련 과거 경험을 상기하는 등
- Tool Registry: 에이전트가 사용할 수 있는 도구
- LLM이 생성한 텍스트를 실행하는 단계
- LLM이 생성한 구조화된 행동을 오케스트레이터가 파싱해 실행하고, 그 결과를 다시 LLM에게 전달하는 구조
- MCP가 이를 표준화한 프로토콜임
- Multi-agent coordination: 여러 에이전트가 협력하는 것
- 에이전트가 하위 에이전트에게 작업을 할당하고 결과를 수집하는 구조
- 한 에이전트의 결과물이 다음 에이전트의 입력이 되는 구조
- 에이전트끼리 메시지를 주고 받으며 자율적으로 협력함
- 디버깅이 매우 어려움
- A2A가 이를 표준화한 프로토콜임
Application
- 에이전트가 다른 시스템 또는 사용자와 만나는 접점
- Infrastructure - Foundation Model - Sandbox - Orchestration 이 제공하는 능력을 실제 문제 해결에 바인딩하는 계층
- 세 가지 특징을 가짐
- Non-deterministic execution: 같은 입력에 같은 출력을 보장하지 않음
- Loop-based execution model: Request - Process - Response 의 선형적 파이프라인이 아닌 Observe - Plan - Act - Reflect 의 루프를 반복함
- Tool-calling as first-class operation: 모델이 추론 시점에 동적으로 어떤 도구를 호출할지 결정함
- 세 가지 패턴이 있음
- Copilot Pattern: 사람이 주도하고 에이전트가 보조하는 구조
- Single Agent Pattern: 하나의 에이전트가 목표를 받아 루프를 돌며 완수하는 구조
- Multi Agent Pattern: 여러 에이전트가 하나의 목표를 받아 각각 다른 역할을 맡고 협업하는 구조
Observability & Governance
Observability: 무슨 일이 일어나고 있는가
- Distributed Tracing: 실행 경로 추적
- HTTP Request - Service A - Service B - Database - Response 와 같이
- User Prompt - LLM Reasoning - Tool Selection - Tool Execution - LLM Reasoning - Response 구조를 추적하는 방법
- LLM 호출, Tool 호출, 메모리 검색, 다른 에이전트 통신 등을 Session - Trace - Span 계층으로 나누어 기록하고 추적함
- Span에는 Input Prompt, Output, Token 수, Latency, 사용한 모델 등으로 기록함
- Evaluation: 품질 측정
- Non-deterministic 특성때문에 테스트 코드가 아닌 새로운 품질 특정 방법이 생김
- Offline eval: 배포 전 Golden Dataset으로 에이전트를 시뮬레이션하고 품질을 측정함
- Online eval: 배포 후 실제 트레픽을 기반으로 실시간 품질을 측정함
- LLM-as-a-judge: LLM이 에이전트의 결과를 평가하는 패턴
- Cost-Performance Monitoring: 비용 감시
- 에이전트 시스템은 실행마다 비용이 발생하는 구조
- 불필요한 추론 루프를 돌거나 과도한 도구 호출이 발생하면 많은 비용이 발생함
- GPU 사용량 또는 LLM API 호출량을 관찰하고 동적으로 스케일링해 수익성을 유지해야 함
Governance: 무슨 일이 일어나도 되는가
- Access Control and Permission Scoping: 에이전트를 사람처럼 인증-정책 기반 접근 관리를 해야 함
- Tiered Autonomy: 위험하지 않은 루틴 액션은 자동화, 위험한 운영 결정은 반자동화, 매우 위험한 활동은 반드시 사람에게 허가를 받아야 하는 모델
- Audit Trail and Compliance: 에이전트의 모든 결과물, 판단 컨텍스트, 접근한 데이터, 어떤 옵션을 고려해 어떤 판단을 내렸는지 등에 대한 변경할 수 없는 감사 로그가 있어야 함
NOTE
Agentic AI 스택은 LLM을 통해 신입사원을 만들고자 하는 문제에서 발전한 기술인 것 같다. 그 안에서 에이전트가 동적으로 생성한 코드를 실행하고자 하는 필요가 생겼고, Sandbox 레이어가 최근 분리되기 시작한 것 같다.