
에이전틱 AI (Agentic AI)의 운영화: OpenAI Presence에 대한 엔지니어링 가이드
요약
프로덕션 환경에서 AI 에이전트를 운영할 때 발생하는 보안, 신뢰성, 거버넌스 문제를 다룹니다. OpenAI의 새로운 플랫폼인 Presence를 통해 에이전트의 상태 유지와 안전한 실행을 관리하는 기술적 아키텍처를 분석합니다.
핵심 포인트
- 에이전트의 비결정론적 특성으로 인한 기존 인프라의 한계 지적
- OpenAI Presence를 통한 엔터프라이즈급 에이전트 관리 패러다임 제시
- 보안 샌드박싱, 상태 지속성, 인간 참여형(HITL) 워크플로우의 중요성
- 에이전틱 아키텍처 운영화를 위한 엔지니어링 가이드 제공
프로덕션 에이전트의 운영 현실
지난 몇 년 동안 엔지니어링 팀은 AI 에이전트를 로컬 개발자 샌드박스(sandbox)에서 신뢰할 수 있는 프로덕션 시스템으로 전환하기 위해 고군분투해 왔습니다. 기본적인 오케스트레이션 프레임워크 (orchestration frameworks)를 사용하여 프로토타입 에이전트를 구축하는 것은 비교적 간단하지만, 해당 에이전트를 기업 환경 내에서 자율적으로 작동하도록 배포하는 것은 완전히 다른 차원의 도전 과제입니다. 에이전트에게 코드를 작성하고, API를 호출하며, 데이터베이스를 읽고, 사용자를 대신하여 의사결정을 내릴 수 있는 권한(agency)이 부여되는 순간, 전례 없는 보안, 신뢰성 및 거버넌스 (governance) 리스크가 발생합니다.
전통적인 애플리케이션 인프라는 결정론적 (deterministic) 소프트웨어를 위해 설계되었습니다. 이는 예측 가능한 실행 경로, 정적 액세스 제어, 명확한 요청-응답 라이프사이클을 가정합니다. AI 에이전트는 그 본질상 이러한 가정들을 위반합니다. 에이전트는 비결정론적 (non-deterministic)이며, 상태 유지형 (stateful)이고, 장시간 실행되며, 매우 예측 불가능합니다. 이러한 에이전트를 표준 서버리스 런타임 (serverless runtimes) 또는 컨테이너 플랫폼에서 실행하려고 시도할 때, 우리는 실행 시간 초과 (execution timeouts), 지속적인 상태 유지의 부재, 복잡한 인간 참여형 (human-in-the-loop, HITL) 통합 병목 현상, 그리고 내부 네트워크에서 모델이 생성한 코드를 실행할 때 발생하는 막대한 보안 리스크와 같은 심각한 한계에 빠르게 직면하게 됩니다.
이러한 중대한 운영 격차를 해결하기 위해, OpenAI는 프로덕션 AI 에이전트를 대규모로 배포, 실행 및 관리할 수 있도록 특별히 설계된 엔터프라이즈급 플랫폼인 Presence를 도입했습니다. 저의 분석에 따르면, Presence는 AI 워크로드를 관리하는 방식에 있어 근본적인 패러다임 전환을 의미합니다. 이는 업계가 LLM을 상태가 없는 (stateless) API로 취급하던 방식에서 벗어나, 에이전트를 관리되고 상태가 유지되며 고도로 보안이 강화된 프로세스로 취급하는 방향으로 나아가게 합니다.
이 글에서 저는 OpenAI Presence의 기술 아키텍처를 분석하고, 샌드박싱 (sandboxing) 및 거버넌스 메커니즘을 평가하며, 상태 지속성 (state durability) 및 인간 참여형 (human-in-the-loop) 워크플로우를 어떻게 처리하는지 살펴보고, 에이전틱 아키텍처 (agentic architectures)를 운영화하고자 하는 엔지니어링 리더들을 위한 구체적인 구현 가이드를 제공할 것입니다.

OpenAI Presence에 대한 심층적인 기술 분석으로, 이 엔터프라이즈 플랫폼이 에이전틱 거버넌스 (agentic governance), 보안 샌드박싱 (secure sandboxing), 상태 지속성 (state durability), 그리고 인간 참여형 워크플로 (human-in-the-loop workflows)를 어떻게 운영화하는지 살펴봅니다.
🏗️ 상태 유지형, 샌드박스형 에이전트 런타임의 아키텍처 (The Architecture of Stateful, Sandboxed Agent Runtimes)
Presence와 같은 플랫폼이 왜 필요한지 이해하려면, 먼저 에이전틱 워크플로 (agentic workflows)에 적용될 때 기존 컴퓨팅 런타임 (compute runtimes)이 갖는 아키텍처적 한계를 살펴보아야 합니다. 만약 표준 서버리스 함수 (serverless function)에 에이전트를 배포한다면, 해당 에이전트는 엄격한 실행 제한 시간(보통 15분 이하)에 묶이게 됩니다. 하지만 저장소 (repository)를 분석하고, 테스트를 작성하며, 패치 (patch)를 배포하는 작업을 맡은 에이전트는 비동기 컴파일 단계나 인간의 승인을 기다리기 위해 반복적으로 일시 중지하면서 몇 시간 동안 실행되어야 할 수도 있습니다.
게다가 에이전트는 도구 (tools)를 실행하기 위해 보안 환경이 필요합니다. 만약 에이전트가 CSV 파일을 파싱하기 위해 Python 스크립트를 작성하고 실행하기로 결정했다면, 해당 스크립트를 애플리케이션 서버에서 직접 실행하는 것은 전체 인프라를 원격 코드 실행 (RCE, Remote Code Execution) 취약점에 노출시키는 행위입니다.
Presence는 에이전트의 추론 엔진 (reasoning engine, 즉 LLM)을 실행 환경 (execution environment)으로부터 분리함으로써 이러한 과제들을 해결합니다. Presence는 에이전트 컨트롤러 (agent controller), 보안 실행 샌드박스 (secure execution sandbox), 그리고 통합 백엔드 (integration backend, 예: Appwrite 또는 맞춤형 엔터프라이즈 데이터베이스)라는 세 가지 주요 구성 요소를 오케스트레이션하는 관리형 상태 유지 런타임 (managed, stateful runtime)을 도입합니다.
이 아키텍처의 핵심은 보안 실행 샌드박스 (secure execution sandbox)입니다. Presence는 에이전트가 생성한 코드와 도구 호출 (tool calls)을 실행하기 위해 가볍고 고도로 격리된 마이크로 가상 머신 (microVMs)을 활용합니다. 이러한 microVM은 일시적 (ephemeral)이며, 밀리초 단위로 프로비저닝되고, 하이퍼바이저 (hypervisor) 수준에서 엄격하게 격리됩니다. 에이전트가 터미널 명령 실행이나 스크립트 실행과 같은 도구 실행을 요청하면, Presence 컨트롤러는 해당 작업을 격리된 microVM 내부에서 스케줄링합니다. 이 샌드박스의 네트워크 인터페이스는 기본적으로 차단되어 있으며, 보안 프록시 (secure proxy)를 통해 사전에 승인된 외부 API 및 지정된 내부 엔드포인트와만 통신할 수 있습니다.
이 런타임 모델은 상태를 유지하고 외부 리소스를 관리하기 위해 통합 백엔드 (integration backends)에 크게 의존합니다. 예를 들어, Appwrite와 통합함으로써 Presence 에이전트는 보안이 확보된 즉시 사용 가능한 데이터베이스, 파일 스토리지 및 사용자 인증 시스템을 활용할 수 있습니다. 에이전트는 커스텀 상태 동기화 레이어 (state-synchronization layers)를 구축하는 대신, 관리형 Appwrite 데이터베이스에 세션 데이터를 직접 읽고 쓸 수 있으며, Appwrite의 세밀한 액세스 제어 목록 (ACLs)을 사용하여 에이전트가 권한 범위를 벗어난 데이터에 절대 접근하지 못하도록 보장합니다.
이 아키텍처는 개발자의 책임을 변화시킵니다. 모든 에이전트에 대해 컨테이너 생명주기 (container lifecycles), 네트워크 격리 및 상태 지속성 (state persistence)을 관리하기 위한 복잡한 인프라 코드를 작성하는 대신, 개발자는 에이전트의 역량, 도구 및 경계를 정의하기만 하면 되며, 저수준 오케스트레이션 (low-level orchestration)은 Presence 런타임에 맡기게 됩니다.
에이전트 거버넌스 정책 정의 및 강제 적용
자율 에이전트 (autonomous agents)를 배포할 때 발생하는 가장 중대한 위험 중 하나는 "에이전트 드리프트 (agent drift)" 또는 의도하지 않은 행동의 가능성입니다. 데이터베이스 쿼리를 최적화하도록 설계된 에이전트가 읽기 지연 시간 (read latency)을 줄이는 가장 빠른 방법이라고 판단할 경우, 이론적으로 테이블을 삭제(drop)하기로 결정할 수도 있습니다. 이러한 파괴적인 실패를 방지하기 위해, 우리는 비결정론적 시스템 (non-deterministic systems) 주변에 결정론적 가드레일 (deterministic guardrails)을 구현해야 합니다.
Presence는 강력한 코드형 정책 (Policy-as-Code) 엔진을 통해 이 문제를 해결합니다. 애플리케이션 로직에 안전 점검 (safety checks)을 하드코딩하는 대신, Presence를 사용하면 에이전트의 동작을 실시간으로 제어하는 선언적 정책 (declarative policies)을 정의할 수 있습니다. 이러한 정책은 도구 실행 (tool execution)이나 외부 API 호출 (external API call)이 진행되기 전, Presence 컨트롤러 (Presence controller)에 의해 평가됩니다.
효과적인 정책 프레임워크는 세 가지 별개의 벡터 (vectors)를 관리해야 합니다:
- 도구 권한 (Tool Permissions): 에이전트가 어떤 도구에 접근할 수 있으며, 어떤 파라미터 (parameters)가 유효한가?
- 재무 및 운영 예산 (Financial and Operational Budgets): 단일 실행에 허용되는 최대 토큰 소비량, 실행 단계 수 (execution step count), 또는 금전적 비용은 얼마인가?
- 네트워크 및 데이터 경계 (Network and Data Boundaries): 에이전트가 어떤 도메인 (domains)에 쿼리할 수 있으며, 어떤 데이터 분류 수준 (data classification levels)을 읽거나 쓸 수 있는가?
다음은 Presence에 배포된 데이터베이스 유지보수 에이전트를 위한 선언적 정책 설정의 예시입니다. 이 설정은 엄격한 도구 경계를 정의하고, 속도 제한 (rate limits)을 강제하며, 파괴적인 작업 (destructive operations)에 대해서는 명시적인 인간의 승인을 요구합니다.
version: "presence/v1alpha1"
metadata:
name: "db-optimization-agent"
...
에이전트가 drop_index 도구를 실행하려고 시도하면, Presence 컨트롤러가 요청을 가로채고, 에이전트의 실행 상태 (execution state)를 일시 중지한 뒤, 지정된 엔지니어링 그룹으로 승인 요청을 보냅니다. 에이전트는 전체 콜 스택 (call stack)과 메모리 (memory)를 보존한 채 일시 중단 상태로 유지되며, 인간이 해당 동작을 명시적으로 승인하거나 거부할 때까지 대기합니다. 요청이 승인되면 실행이 매끄럽게 재개되고, 거부되면 에이전트의 컨텍스트 (context)로 에러가 반환되어 에이전트가 대안적인 경로를 계획할 수 있도록 합니다.
저는 이러한 정책 파일들을 핵심 소프트웨어 자산 (software assets)으로 취급할 것을 권장합니다. 이 파일들은 버전 관리 시스템 (version control systems)에 저장되어야 하며, 동료 검토 (peer review)를 거쳐 CI/CD 파이프라인 (CI/CD pipelines)을 통해 배포되어야 합니다. 이를 통해 에이전트 권한의 변경 사항이 완전히 감사 (audited)되고 추적 가능하도록 보장할 수 있습니다.
상태 지속성 (State Durability) 및 인간 참여형 (Human-in-the-Loop, HITL) 프로토콜
전통적인 웹 애플리케이션에서 요청은 상태가 없으며 (stateless) 수명이 짧습니다. 네트워크 연결이 끊기거나 서버가 충돌하면 클라이언트는 단순히 요청을 재시도합니다. 하지만 자율 에이전트 (autonomous agents)의 경우, 단일 작업이 수 시간에 걸쳐 수십 개의 순차적인 추론 단계 (reasoning steps), 도구 실행 (tool executions), 그리고 외부 API 쿼리를 포함할 수 있습니다. 만약 에이전트가 일시적인 네트워크 오류로 인해 38번째 단계에서 실패한다면, 에이전트를 첫 번째 단계부터 다시 시작하는 것은 매우 비용이 많이 들고, 느리며, 흐름을 방해하는 일이 됩니다.
운영 환경에서의 신뢰성 (production reliability)을 달성하기 위해, 에이전트에는 상태 지속성 (state durability)이 필요합니다. Presence는 에이전트의 실행 상태를 지속적으로 체크포인트 (checkpointing) 함으로써 이를 구현합니다. 이 상태에는 대화 기록 (conversational history, 프롬프트 컨텍스트)뿐만 아니라 에이전트 변수의 정확한 상태, 도구 실행 기록, 그리고 실행 계획 (execution plan) 상의 현재 단계가 포함됩니다.
이러한 체크포인트 메커니즘은 인간 참여형 (Human-in-the-Loop, HITL) 프로토콜을 관리하는 데 매우 중요합니다. 에이전트가 인간의 개입 없이는 진행할 수 없거나, 진행해서도 안 되는 시나리오는 매우 많습니다. 여기에는 데이터를 삭제하거나 금융 거래를 실행하는 것과 같은 고위험 작업뿐만 아니라, 에이전트가 모호함에 직면하여 명확한 설명이 필요한 상황도 포함됩니다.
에이전트가 인간의 입력이 필요한 체크포인트에 도달하면, Presence 플랫폼은 구조화된 전환 (structured transition)을 실행합니다:
- 상태 직렬화 (State Serialization): 컨트롤러는 에이전트의 전체 런타임 상태 (runtime state)를 직렬화하여 영구 저장소(암호화된 문서 저장소 또는 통합된 Appwrite 데이터베이스 등)에 기록합니다.
- 실행 중단 (Execution Suspension): 에이전트에 할당된 활성 컴퓨팅 리소스가 해제되어, 인간의 응답을 기다리는 동안 유휴 컴퓨팅 (idle compute) 비용이 발생하지 않도록 보장합니다.
- 알림 발송 (Notification Dispatch): Presence는 웹훅 (webhook)을 트리거하거나 외부 알림 시스템(예: Slack, PagerDuty 또는 내부 포털)으로 이벤트를 발송합니다.
- 상태 수화 및 재개 (State Hydration and Resumption): 인간이 필요한 입력이나 승인을 제공하면, Presence는 새로운 런타임 컨테이너를 프로비저닝하고, 직렬화된 상태를 다시 메모리로 수화 (hydrate)하며, 인간의 입력을 에이전트의 컨텍스트 (context)에 추가한 뒤 중단되었던 정확한 지점부터 실행을 재개합니다.
이 모델은 우리가 AI를 위한 사용자 인터페이스 (UI)를 설계하는 방식을 완전히 변화시킵니다. LLM 루프를 일시 중지하고 재개하기 위해 복잡하고 맞춤화된 상태 머신 (state machine)을 구축하는 대신, Presence가 기저의 상태 직렬화 및 재개 메커니즘을 처리하도록 맡길 수 있습니다. 이를 통해 개발자는 에이전트의 현재 추론 체인 (reasoning chain)을 표시하고 인간의 개입을 위한 명확한 인터페이스를 제공하는, 깔끔하고 직관적인 프론트엔드를 구축하는 데 집중할 수 있습니다.
비결정론적 루프의 관측 가능성, 트레이싱 및 디버깅
결정론적 (deterministic) 애플리케이션을 디버깅하는 것은 간단합니다. 스택 트레이스 (stack trace)를 살펴보고, 실패한 코드 라인을 식별하여 로직을 수정하면 됩니다. 하지만 자율 에이전트 (autonomous agent)를 디버깅하는 것은 훨씬 더 복잡합니다. 에이전트는 구문 오류 (syntax error)나 처리되지 않은 예외 (unhandled exception) 때문이 아니라, 생산적이지 않은 도구 호출 (tool calls)의 무한 루프에 빠지거나, 도구의 출력을 오해하거나, 긴 대화 과정에서 "환각 드리프트 (hallucination drift)"를 겪음으로써 실패할 수 있습니다.
전통적인 애플리케이션 성능 모니터링 (APM, Application Performance Monitoring) 도구들은 이러한 실패 모드(failure modes)를 포착하지 못합니다. 이러한 도구들은 API 호출에 500ms가 소요되었다는 사실은 알려줄 수 있지만, 에이전트가 왜 해당 호출을 하기로 결정했는지, 내부적인 추론(reasoning) 과정은 무엇이었는지, 또는 프롬프트 컨텍스트(prompt context)가 시간이 지남에 따라 어떻게 변화했는지는 알려줄 수 없습니다.
Presence는 에이전틱 워크플로 (agentic workflows)에 특화된 깊고 구조화된 관측성 (observability)을 제공함으로써 이 문제를 해결합니다. 에이전트 실행의 모든 단계는 구조화된 트레이스 (trace)로 기록됩니다. 이 트레이스는 다음 사항들을 캡처합니다:
- 사고 (Thought, Chain of Thought): 행동을 결정하기 전 모델에 의해 생성된 내부 추론 (reasoning).
- 행동 (Action): 전달된 정확한 인자 (arguments)를 포함한 구체적인 도구 호출 (tool call).
- 관찰 (Observation): 도구 또는 환경으로부터 반환된 가공되지 않은 출력 (raw output).
- 컨텍스트 델타 (Context Delta): 해당 단계의 결과로 시스템 프롬프트 (system prompt)와 대화 기록 (conversation history)이 어떻게 변화했는지.
현재의 모니터링 역량을 평가하고 Presence에서 실행되는 프로덕션 에이전트로의 전환을 계획하는 데 도움을 드리기 위해, 전통적인 APM 지표와 Presence에서 실행되는 프로덕션 에이전트에 필요한 특정 텔레메트리 (telemetry)를 비교하여 정리했습니다:
| 텔레메트리 카테고리 (Telemetry Category) | 전통적 APM 지표 (Traditional APM Metric) | 에이전틱 관측성 지표 (Agentic Observability Metric, Presence) |
|---|---|---|
| 성능 (Performance) | 응답 지연 시간 (Response Latency, p95/p99), CPU/메모리 사용률 (CPU/Memory utilization). | 첫 번째 토큰 생성 시간 (TTFT, Time-to-First-Token), 단계별 실행 지연 시간 (step execution latency), 도구 실행 오버헤드 (tool execution overhead). |
| ... |
Presence에서 실패한 에이전트 실행을 디버깅할 때, 단순히 로그 파일만을 확인하지 않습니다. 실행 과정을 단계별로 다시 재생 (replay)합니다. 이를 통해 에이전트의 추론이 예상된 경로에서 정확히 어느 지점에서 벗어났는지 확인할 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기