fos-blog/study
01 / 홈02 / 카테고리03 / 시리즈
01 / 홈02 / 카테고리03 / 시리즈

카테고리

  • AI 페이지로 이동
    • RAG 페이지로 이동
    • agent 페이지로 이동
    • langgraph 페이지로 이동
    • 사람용 CLI와 AI 에이전트용 CLI는 설계가 다르다
    • agents.md
    • BMAD Method — AI 에이전트로 애자일 개발하는 방법론
    • Claude Code 메모리: CLAUDE.md와 .claude/rules를 규칙으로 쓰는 법
    • Claude Code의 Skill 시스템 - 개발자를 위한 AI 자동화의 새로운 차원
    • Claude Code를 5주 더 쓴 결과 — 스킬·CLAUDE.md를 키워가는 방식
    • Claude Code를 11일 동안 쓴 결과 — 데이터로 본 나의 사용 패턴
    • Claude Code 멀티 에이전트 — Teams
    • AI 에이전트와 디자인의 새 컨벤션 — DESIGN.md, Google Stitch, Claude Design
    • Docling — IBM Research 의 문서 파싱 toolkit 상세 정리
    • 하네스 엔지니어링 실전 — 4인 에이전트 팀으로 코딩 파이프라인 구축하기
    • 하네스 엔지니어링 — 오래 실행되는 AI 에이전트를 위한 설계
    • 멀티모달 LLM (Multimodal Large Language Model)
    • AI 에이전트와 함께 MVP 만들기 — dooray-cli 사례
    • OpenClaw는 context와 memory를 어떻게 관리하나 — 나만의 에이전트를 구성하는 법
    • OpenClaw vs Hermes Agent — 갈아탈까 고민하며 정리한 비교
    • 스킬 문서를 신경망처럼 학습시킨다 — Microsoft SkillOpt 분석
  • ai 페이지로 이동
    • agent 페이지로 이동
    • [초안] AI 제품 백엔드 안정성 — 지연·비용·권한·관측·도구 실패·폴백/재시도/사람 에스컬레이션
    • [초안] LLM 평가 프레임워크: 골든셋, 회귀 테스트, LLM-as-a-judge, 사람 피드백 루프
  • algorithm 페이지로 이동
    • live-coding 페이지로 이동
    • 분산 계산을 위한 알고리즘
  • apartment 페이지로 이동
    • 구리 럭키아파트 24평 인테리어 레퍼런스 모음
  • architecture 페이지로 이동
    • [초안] 시니어 백엔드를 위한 API 설계 실전 스터디 팩 — REST · 멱등성 · 페이지네이션 · 버전 전략
    • [초안] API Versioning과 Backward Compatibility: 시니어 백엔드 관점 정리
    • 캐시 설계 전략 총정리
    • [초안] 커머스 Spring 서비스에 Clean/Hexagonal Architecture를 실용적으로 적용하기
    • [초안] 커머스 도메인 모델링: 주문·재고·노출의 세 축을 분리해서 설계하기
    • 커머스 주문 상태와 데이터 정합성 기본기
    • [초안] 쿠폰/프로모션 동시성과 정합성 기본기 — 선착순·중복 사용 방지·발급/사용/복구
    • [초안] DDD와 도메인 모델링: 시니어 백엔드 관점의 전술/전략 패턴 실전 가이드
    • [초안] Decorator & Chain of Responsibility — 행동을 체인으로 조립하는 두 가지 방식
    • 디자인 패턴
    • [초안] 분산 아키텍처 완전 정복: Java 백엔드 시니어 인터뷰 대비 실전 가이드
    • [초안] 분산 트랜잭션과 Outbox 패턴 — 왜 2PC를 피하고 어떻게 대신할 것인가
    • 분산 트랜잭션
    • [초안] e-Commerce 주문·결제 도메인 모델링: 상태머신, 멱등성, Outbox/Saga 실전 정리
    • [초안] Event Sourcing과 CQRS — 상태가 아니라 변화를 저장한다는 발상
    • [초안] F&B 쿠폰·프로모션·멤버십·포인트 설계
    • [초안] F&B · e-Commerce 디지털 채널 도메인 한 장 정리
    • [초안] F&B 주문/매장/픽업 상태머신 설계
    • [초안] F&B 이커머스 결제·환불·정산 운영 가이드
    • [초안] Hexagonal / Clean Architecture를 Spring 백엔드에 적용하기
    • [초안] 대규모 커머스 트래픽 처리 패턴 — 대규모 회원과 메가 프로모션을 버티는 설계
    • [초안] 레거시 JSP/jQuery 화면과 신규 API가 공존하는 백엔드 운영 전략
    • [초안] MSA 서비스 간 통신: Redis [Cache-Aside](../database/redis/cache-aside.md) × Kafka 이벤트 하이브리드 설계
    • [초안] Observability 입문: 시니어 백엔드가 장애를 탐지하고 대응하는 방식
    • [초안] Outbox / Inbox Pattern 심화 — 분산 메시징의 정합성 문제를 DB 트랜잭션으로 풀어내기
    • [초안] 결제 도메인 멱등성과 트랜잭션 재시도 기본기
    • [초안] 시니어 백엔드를 위한 Resilience 패턴 실전 가이드 — Timeout, Retry, Circuit Breaker, Bulkhead, Backpressure
    • [초안] REST API 버저닝과 모바일 앱 하위 호환성 — 디지털 채널 백엔드 관점
    • [초안] Spring Batch vs Event-Driven — 같은 비동기처럼 보이지만 전혀 다른 두 패러다임
    • [초안] Strategy Pattern — 분기문을 없애는 설계, 시니어 백엔드 인터뷰 핵심 패턴
    • [초안] 시니어 백엔드를 위한 시스템 설계 입문 스터디 팩
    • [초안] 템플릿 메서드 패턴 - 백엔드 처리 골격을 강제하는 가장 오래되고 가장 위험한 패턴
    • [초안] 대규모 트래픽 중 무중단 마이그레이션 — Feature Flag + Shadow Mode 실전
  • database 페이지로 이동
    • milvus 페이지로 이동
    • mysql 페이지로 이동
    • opensearch 페이지로 이동
    • qdrant 페이지로 이동
    • redis 페이지로 이동
    • vespa 페이지로 이동
    • 김영한의-실전-데이터베이스-설계 페이지로 이동
    • [초안] DB Connection Pool Saturation과 Thread Pool 격리
    • 커넥션 풀 크기는 얼마나 조정해야 할까?
    • 인덱스 - DB 성능 최적화의 핵심
    • [초안] JPA N+1과 커머스 조회 모델: 주문/메뉴/쿠폰 도메인에서 살아남기
    • [초안] MyBatis 기본기 — XML Mapper, resultMap, 동적 SQL, 운영 패턴 정리
    • [초안] MyBatis와 JPA/Hibernate 트레이드오프 — 레거시 백엔드를 다루는 시니어 관점
    • 벡터 DB 5종, 아키텍처는 어떻게 다른가
    • 벡터 DB 어떻게 고를까 — OpenSearch · Milvus · Qdrant · Vespa · pgvector 비교
    • 벡터 DB를 실제로 도입한 사례 — 빅테크 프로덕션
    • 역정규화 (Denormalization)
    • 데이터 베이스 정규화
  • devops 페이지로 이동
    • docker 페이지로 이동
    • k8s 페이지로 이동
    • k8s-in-action 페이지로 이동
    • observability 페이지로 이동
    • [초안] 커머스/F&B 채널 장애 첫 5분과 관측성 기본기
    • [초안] 운영 데이터 정합성 장애 대응 — 결제 취소 누락과 중복 적재 런북
    • Envoy Proxy
    • [초안] F&B / e-Commerce 운영 장애 대응과 모니터링 — 백엔드 관점 정리
    • Graceful Shutdown
    • [초안] 시니어 백엔드를 위한 SLO와 Error Budget 기반 장애 대응
  • http 페이지로 이동
    • HTTP Connection Pool
    • HTTPS는 어떻게 안전한가 — TLS, 인증서, 그리고 termination
  • interview 페이지로 이동
    • [초안] AI 서비스 팀 경험 기반 시니어 백엔드 면접 질문 뱅크 — Spring Batch RAG / gRPC graceful shutdown / 전략 패턴 / 12일 AI 웹툰 MVP
    • Observability — 면접 답변 프레임
    • [초안] 시니어 Java 백엔드 면접 마스터 플레이북 — 김병태
    • [초안] NSC 슬롯팀 경험 기반 질문 은행 — 도메인 모델링·동시성·성능·AI 협업
  • java 페이지로 이동
    • concurrency 페이지로 이동
    • jdbc 페이지로 이동
    • opentelemetry 페이지로 이동
    • spring 페이지로 이동
    • spring-batch 페이지로 이동
    • testing 페이지로 이동
    • 더_자바_코드를_조작하는_다양한_방법 페이지로 이동
    • [초안] Java 동시성 락 정리 — 커머스 메뉴/프로모션 정책 캐시 갱신 관점
    • [초안] JVM 튜닝 실전: 메모리 구조부터 Virtual Threads, GC 튜닝, 프로파일링까지
    • Java의 로깅 환경
    • MDC (Mapped Diagnostic Context)
    • Java StampedLock — 읽기 폭주에도 쓰기가 밀리지 않는 락
    • Virtual Thread와 Project Loom
  • javascript 페이지로 이동
    • typescript 페이지로 이동
    • AbortController
    • Async Iterator와 제너레이터
    • CommonJS와 ECMAScript Modules
    • 제너레이터(Generator)
    • Http Client
    • Node 백엔드 운영 패턴 — Streams 백프레셔, pipe/pipeline, 멱등성 vs 분산 락
    • Node.js
    • npm vs pnpm — 어떤 기준으로 선택했나
    • `setImmediate()`
  • kafka 페이지로 이동
    • [초안] Kafka 기본 개념 — 토픽, 파티션, 오프셋, 복제
    • Kafka를 사용하여 **데이터 정합성**은 어떻게 유지해야 할까?
    • [초안] Kafka 실전 설계: 파티션 전략, 컨슈머 그룹, 전달 보장, 재시도, 순서 보장 트레이드오프
    • 메시지 전송 신뢰성
    • [초안] Spring Kafka 컨슈머 오프셋 커밋과 트랜잭션 정렬: AckMode, manual ack, 멱등 처리
  • linux 페이지로 이동
    • fsync — 리눅스 파일 동기화 시스템 콜
    • tmux — Terminal Multiplexer
  • mlops 페이지로 이동
    • Python CUDA 버전 생태계 — nvidia-smi, nvcc, pip, conda가 다 다른 버전을 말하는 이유
    • GPU 컨테이너의 CUDA 버전 호환성 — nvidia-smi부터 이미지 다이어트까지
    • Kubernetes GPU 노드에서 /run tmpfs가 꽉 차서 Pod가 안 뜰 때
    • GPU·CUDA·MPS 기초 — 자바 백엔드 개발자가 처음 만나는 그림
    • Multi-process GPU 워크로드 — 자바 ThreadPool 사용자가 만나는 모델 차이
    • ML 서비스 성능 분석 워크플로 — 자바 백엔드 트러블슈팅과 다른 점
    • 한 GPU 를 여러 프로세스가 나눠 쓰기 — Time-Slicing 과 MPS
  • network 페이지로 이동
    • Connection reset by peer는 누가 보낸 걸까 — 리버스 프록시 홉마다 TCP 연결은 따로 논다
    • L2(스위치)와 L3(라우터)의 역할 차이
    • L4와 VIP(Virtual IP Address)
    • IP Subnet
  • python 페이지로 이동
    • Python async/await — CompletableFuture·Reactor 와 다른 점, 그리고 blocking I/O 함정
    • Python 의존성 관리 — Java Maven/Gradle 사용자가 만나는 첫 충격
    • FastAPI 기초 — Spring Boot 사용자가 빠르게 익히는 법
    • Java 개발자를 위한 Python 심화 — OOP·데코레이터·컨텍스트 매니저
    • PyTorch 기초 — 텐서, 디바이스, 그리고 모델 로딩이 무거운 이유
    • Java 개발자를 위한 Python 문법 핵심
    • ThreadLocal 에서 contextvars 로 — Python 의 요청 컨텍스트 전파
    • OCR 동작 원리 — Layout · Text · Post-process 3단계
    • Python 서버의 RSS 가 안 줄어드는 이유 — gc.collect 의 한계와 malloc_trim
  • rabbitmq 페이지로 이동
    • [초안] RabbitMQ Basics — 실전 백엔드 관점에서 정리하는 메시지 브로커 기본기
    • [초안] RabbitMQ vs Kafka — 백엔드 메시징 선택 기준과 실전 운영 관점
  • security 페이지로 이동
    • [초안] 시니어 백엔드를 위한 보안 / 인증 스터디 팩 — Spring Security, JWT, OAuth2, OWASP Top 10
    • [초안] Spring Security 6.x OAuth2 + JWT 상용 인증 설계 — Grant 선택, Resource Server, Refresh Rotation, 로그아웃
  • task 페이지로 이동
    • ai-service-team 페이지로 이동
    • nsc-slot 페이지로 이동
    • sb-dev-team 페이지로 이동
    • the-future-company 페이지로 이동
  • testing 페이지로 이동
    • [초안] 시니어 Java 백엔드를 위한 테스트 전략 완전 정리 — 피라미드부터 TestContainers, 마이크로벤치, Contract까지
  • travel 페이지로 이동
    • 오사카 3박 4일 일정표: 우메다 쇼핑, USJ, 난바·도톤보리, 오사카성
  • web 페이지로 이동
    • [초안] HTTP / Cookie / Session / Token 인증 기본기 — 레거시 JSP와 모바일 API가 공존하는 백엔드 관점
FOS-BLOG · FOOTERall systems normal·v0.1 · 2026.04.27·seoul, kr
Ffos-blog/study

개발 학습 기록을 정리하는 블로그입니다. 공부하면서 기록하고, 기록하면서 다시 배웁니다.

visitors
01site
  • Home↗
  • Posts↗
  • Categories↗
  • About↗
02policy
  • 소개/about
  • 개인정보처리방침/privacy
  • 연락처/contact
03categories
  • AI↗
  • Algorithm↗
  • DB↗
  • DevOps↗
  • Java/Spring↗
  • JS/TS↗
  • React↗
  • Next.js↗
  • System↗
04connect
  • GitHub@jon890↗
  • Source repositoryjon890/fos-study↗
  • RSS feed/rss.xml↗
  • Newsletter매주 1 회 · 한 편의 글→
© 2026 FOS Study. All posts MIT-licensed.
built with·Next.js·Tailwind v4·Geist·Pretendard·oklch
fos-blog/AI/엔터프라이즈 AI Agent 설계 — rea…
ai

엔터프라이즈 AI Agent 설계 — reasoning, tool, memory, cost를 운영 시스템으로 묶기

AI Agent를 엔터프라이즈 환경에 올린다는 건 "LLM이 알아서 일하게 한다"가 아니다. 모델의 reasoning 능력, 도구 호출, 메모리, 비용 예산, 권한, 감사 로그를 하나의 운영 시스템으로 묶는 일이다. 이 글은 Chain of Thought부터 MCP, LangGraph, Agent SDK, memory, cost control, risk g...

2026.06.25·17 min read·10 views

AI Agent를 엔터프라이즈 환경에 올린다는 건 "LLM이 알아서 일하게 한다"가 아니다. 모델의 reasoning 능력, 도구 호출, 메모리, 비용 예산, 권한, 감사 로그를 하나의 운영 시스템으로 묶는 일이다. 이 글은 Chain of Thought부터 MCP, LangGraph, Agent SDK, memory, cost control, risk gate까지를 백엔드 설계 관점에서 정리한다.

내가 이 글에서 답하고 싶었던 질문은 셋이다.

  • Agent가 어느 정도까지 자율적으로 판단하게 둘 것인가
  • 긴 작업에서 context와 memory를 어떻게 나눠 비용과 품질을 동시에 잡을 것인가
  • 기업 환경에서 도구, 권한, 평가, 감사 로그를 어떤 구조로 묶어야 하는가

가져갈 판단 기준도 셋으로 좁힌다.

  • 자율성은 모델이 아니라 게이트가 정한다.
  • 메모리는 저장소가 아니라 정책이다.
  • 비용 최적화는 모델 선택보다 context 설계에서 먼저 갈린다.

Agent를 루프가 아니라 운영 시스템으로 본다

가장 작은 Agent 루프는 단순하다.

하지만 엔터프라이즈 Agent는 이 그림만으로는 부족하다. 실제 시스템에는 사용자 권한, 도구별 위험도, 비용 예산, context 압축, 장기 memory, 사람 승인, trace, eval, red team이 붙는다.

이 구조에서 모델은 중요한 구성 요소지만 중심은 아니다. 중심은 상태와 권한을 가진 dispatcher, context를 조립하는 builder, 실행 경로를 남기는 trace다. LLM이 도구를 "직접 실행"한다고 표현하면 설계가 흐려진다. 정확히는 모델이 도구 호출 후보를 만들고, 백엔드가 검증한 뒤 자기 책임으로 실행한다.

도구 호출의 기본 구조는 LLM Tool Calling과 Agent Workflow 설계에 더 자세히 정리해 뒀다. 여기서는 그 위에 엔터프라이즈 운영 레이어를 얹는 쪽에 집중한다.

Chain of Thought는 로그가 아니라 내부 reasoning 예산이다

Agent 설계를 공부하다 보면 Chain of Thought, ReAct, Tree of Thoughts 같은 용어가 계속 나온다. 이들을 한 줄로 나누면 이렇게 볼 수 있다.

기법핵심 아이디어실무에서의 위치
Chain of Thought중간 추론 단계를 생성해 복잡한 문제를 푼다reasoning 모델 내부 또는 비공개 scratchpad
ReActreasoning과 action을 번갈아 수행한다tool-calling Agent 루프의 원형
Tree of Thoughts여러 reasoning 경로를 탐색하고 평가한다고비용 계획·검색 문제에 제한적으로 사용
Reflexion실패 피드백을 언어 memory로 남겨 다음 시도에 반영한다eval 기반 개선 루프의 원형
Toolformer모델이 언제 어떤 API를 쓸지 학습한다tool-use가 모델 능력의 일부가 될 수 있다는 근거

여기서 조심할 점은 Chain of Thought를 그대로 사용자에게 보여주거나 audit log에 남기는 설계다. 최신 reasoning 모델은 내부 reasoning을 수행하고, OpenAI의 reasoning best practices도 reasoning 모델에 "think step by step"이나 reasoning 설명을 요구하는 프롬프트가 불필요하다고 설명한다. 따라서 제품 설계에서는 raw reasoning trace가 아니라 다음 정보만 남기는 편이 안전하다.

  • 최종 판단
  • 참조한 근거
  • 호출한 도구와 인자
  • 검증 결과
  • 거절 또는 에스컬레이션 사유

내부 reasoning은 모델 품질을 위한 계산 자원이고, 운영 로그는 사람이 책임을 추적할 수 있는 증거여야 한다. 둘을 섞으면 보안, 개인정보, 프롬프트 유출, 비용 문제가 같이 터진다.

ReAct 논문은 reasoning trace와 action을 엮으면 환각과 오류 전파를 줄일 수 있다고 봤고, Tree of Thoughts는 여러 후보 경로를 탐색해 계획형 문제에서 성능을 올리는 방향을 제시했다. 하지만 엔터프라이즈 시스템에서는 "탐색을 많이 한다"가 항상 좋은 답이 아니다. 탐색은 곧 토큰, 지연, 비용, 부작용 가능성이다.

내 기준은 이렇다.

상황권장 패턴
단순 조회·FAQRAG 또는 단일 tool call
정책 판단 + 근거 필요retrieve → answer → citation 검증
여러 도구를 순차 호출ReAct를 제한된 step 안에서 사용
비가역 행동 포함plan → 사람 승인 → execute
고비용 탐색 문제Tree of Thoughts류 탐색을 offline 또는 batch로 제한

도구는 많을수록 좋은 게 아니다

MCP는 Agent가 외부 시스템과 연결되는 방식을 표준화한다. 공식 MCP 문서는 MCP를 AI 애플리케이션이 파일, 데이터베이스, API, workflow 같은 외부 시스템에 연결되는 open-source standard로 설명하고, specification은 resources, prompts, tools를 서버 기능으로 정의한다. 이 방향은 맞다. 기업마다 내부 API와 데이터 소스가 많기 때문에, 도구 연결을 매번 provider별 SDK로 붙이면 운영이 금방 무너진다.

다만 MCP나 tool registry가 있다고 해서 모든 도구를 모델에게 그대로 노출하면 안 된다. 도구 수가 늘어나면 세 가지 문제가 생긴다.

  • 모델이 잘못된 도구를 고를 확률이 오른다.
  • tool schema와 설명이 context 비용을 계속 먹는다.
  • prompt injection이 여러 도구를 조합해 권한 밖 행동을 유도할 수 있다.

그래서 tool layer는 "가능한 도구 목록"이 아니라 현재 요청에서 허용되는 최소 도구 집합이어야 한다.

예를 들어 사내 업무 Agent라면 전체 도구는 수십 개일 수 있다. 하지만 "이번 주 보고서 초안 만들어줘"라는 요청에 노출해야 하는 도구는 문서 검색, 일정 조회, 초안 저장 정도면 충분하다. 결재 승인, 권한 변경, 외부 메일 발송 같은 도구는 요청 의도와 권한이 확인되기 전까지 모델에게 보이지 않아야 한다.

MCP specification도 tool invocation에는 trust and safety가 중요하며, 사람이 tool invocation을 거절할 수 있어야 한다고 적고 있다. 이건 UX 권장사항이 아니라 엔터프라이즈 설계의 기본값이다.

memory는 네 층으로 나눠야 한다

Agent memory를 "대화 기록을 벡터 DB에 넣는다"로 이해하면 거의 항상 망가진다. memory는 저장 방식이 아니라 사용 목적과 보존 정책으로 나눠야 한다.

층예시저장 위치만료 정책
Working context현재 turn의 메시지, tool observationprompt context즉시 휘발
Thread state진행 중 workflow 상태, pending approvalcheckpointworkflow 종료 후 만료
Long-term profile사용자 선호, 반복 업무 규칙structured store동의·TTL 기반
Knowledge memory문서, 정책, 사내 지식RAG index원문 lifecycle 기반

LangGraph의 persistence 문서는 checkpointer와 store를 구분한다. checkpointer는 thread의 graph state를 저장해 conversation continuity, HITL, time travel, fault tolerance에 쓰고, store는 user preferences나 shared knowledge 같은 장기 데이터를 저장한다. 이 구분이 실무에서도 중요하다.

Thread state는 "지금 이 작업이 어디까지 왔나"를 나타낸다. Long-term profile은 "이 사용자가 반복적으로 어떤 선호를 보였나"를 나타낸다. Knowledge memory는 "조직의 공식 지식이 무엇인가"를 나타낸다. 세 가지를 한 벡터 DB에 섞으면 삭제, 정정, 권한, 감사가 어려워진다.

memory에 저장할 때는 다음 질문을 통과해야 한다.

  • 이 정보가 다음 의사결정에 실제로 쓰이는가
  • 사용자가 정정하거나 삭제할 수 있는가
  • 언제 만료되는가
  • prompt injection 문자열이 장기 memory로 승격되지 않는가
  • 어떤 권한 스코프에서만 retrieval 되는가

헬스케어처럼 민감한 도메인의 memory 설계는 헬스케어 AI Agent의 멀티턴 메모리 설계에 따로 정리해 뒀다. 일반 Agent도 원리는 같다. 자유 텍스트 memory보다 구조화된 fact가 안전하고, 장기 memory는 retrieval 전에 권한과 동의 범위를 먼저 통과해야 한다.

context는 매번 새로 조립하는 빌드 산출물이다

context window가 커졌다고 모든 걸 넣으면 비용과 성능이 같이 나빠진다. 엔터프라이즈 Agent의 context는 매 요청마다 다음 순서로 조립되는 빌드 산출물로 보는 편이 낫다.

OpenAI의 prompt caching 문서는 1024 tokens 이상 prompt에서 caching이 가능하고, messages와 tools도 cache 대상이 될 수 있다고 설명한다. 이 말은 엔터프라이즈 Agent에서 context 순서가 비용에 직접 영향을 준다는 뜻이다. 변하지 않는 system/developer instruction, policy, tool schema는 앞쪽에 안정적으로 두고, 매번 바뀌는 사용자 입력과 retrieval 결과는 뒤쪽에 둬야 cache hit가 잘 난다.

긴 작업에서는 compaction도 필요하다. OpenAI compaction 문서는 long-running interaction에서 context size를 줄이면서 다음 turn에 필요한 state를 보존하는 방식으로 compaction을 설명한다. Google ADK 문서도 context를 단순 문자열 누적이 아니라 sessions, memory, tool outputs, artifacts를 구조화해 조립하고, 불필요한 event filtering과 요약, lazy loading을 한다고 설명한다.

내가 설계한다면 context budget을 이렇게 쪼갠다.

영역예산 원칙
정책·권한항상 포함, 짧고 안정적
현재 사용자 요청원문 보존
thread state요약보다 구조화 상태 우선
retrieval 결과top-k보다 source diversity와 freshness 우선
tool schema현재 요청에 필요한 subset만
과거 대화최근 일부 + compaction summary

이 설계의 목표는 "많이 기억하는 Agent"가 아니다. 목표는 필요한 것만 정확히 현재 window에 올리는 Agent다.

비용 효율성은 모델 라우팅보다 workflow 라우팅이 먼저다

비용 최적화를 모델 가격표 비교로 시작하면 늦다. Agent 비용은 모델 단가보다 다음 네 가지에 더 크게 흔들린다.

  • 요청당 step 수
  • 각 step의 context 크기
  • tool schema와 retrieval 결과의 반복 주입
  • 실패 루프와 retry

OpenAI cost optimization 문서는 Batch API로 비동기 작업을 묶어 처리하는 경로를 제공하고, prompt caching과 compaction은 context 비용을 낮추는 도구다. 하지만 실무에서 먼저 해야 할 일은 "이 요청이 Agent일 필요가 있는가"를 가르는 것이다.

요청 유형싸고 안정적인 처리
정형 조회API 직접 호출 + 템플릿 응답
단순 요약작은 모델 + 짧은 context
근거 기반 답변RAG + citation 검증
복잡한 multi-stepAgent loop
대량 비동기 처리batch workflow
위험 행동deterministic workflow + 사람 승인

모든 요청을 Agent로 보내면 비싸고 느리다. 반대로 모든 요청을 정형 workflow로 묶으면 사용자가 원하는 유연성이 사라진다. 그래서 앞단에는 항상 router가 필요하다.

Agent loop 안에서도 비용 가드는 명시적으로 둔다.

  • 최대 step 수
  • 최대 tool call 수
  • 최대 wall-clock time
  • 최대 input tokens
  • 최대 reasoning effort
  • 최대 spend per request
  • fallback 또는 human escalation 조건

OWASP LLM Top Ten 2025에는 Unbounded Consumption이 포함돼 있다. 이건 보안 이슈이면서 비용 이슈다. 공격자가 일부러 긴 context, 반복 tool call, 과도한 reasoning을 유도하면 지연과 비용이 동시에 터진다. 따라서 budget guard는 FinOps가 아니라 security control에 가깝다.

발전하는 Agent는 trace와 eval에서 배운다

Agent가 발전한다는 말은 운영 중에 마음대로 자기 코드를 고친다는 뜻이 아니다. 엔터프라이즈 환경에서 self-improving은 최소한 다음 단계를 거쳐야 한다.

Reflexion은 실패 피드백을 언어 memory에 남겨 다음 시도를 개선하는 방향을 보여줬고, Agent Workflow Memory는 과거 성공 workflow를 memory로 유도해 web navigation 성공률을 높이는 접근을 제안했다. 최근 ACON 같은 연구는 긴 Agent trajectory의 observation과 interaction history를 압축해 peak token 사용량을 줄이면서 성능을 유지하려고 한다.

이 연구들이 주는 실무 힌트는 같다. Agent를 개선하려면 raw transcript를 그냥 쌓는 게 아니라, 실패 원인과 성공 workflow를 구조화된 학습 자산으로 바꿔야 한다.

실무 루프는 이렇게 두는 편이 안전하다.

  • trace에서 실패 case를 샘플링한다.
  • 실패를 outcome failure, process failure, safety failure, cost failure로 라벨링한다.
  • 사람이 eval case로 승격할지 결정한다.
  • prompt, tool schema, router, policy 중 어디를 고칠지 분리한다.
  • canary에서 기존 eval과 신규 eval을 모두 통과해야 배포한다.

평가와 risk gate 자체는 Agentic Workflow 평가와 Risk Gate 설계에 더 자세히 정리했다. 여기서 중요한 건 "발전"이 runtime magic이 아니라 software delivery loop라는 점이다.

프레임워크는 철학이 다르다

현재 Agent 프레임워크는 크게 네 갈래로 볼 수 있다.

계열대표강점주의점
Provider SDKOpenAI Agents SDK, Google ADK모델·도구·trace 통합이 빠름provider 기능에 설계가 끌려갈 수 있음
Graph runtimeLangGraphdurable execution, HITL, state 관리추상화가 낮아 설계 책임이 큼
Multi-agent teamCrewAI, AutoGenrole 기반 협업, research/write 같은 작업에 직관적자유도가 높아 gate 없으면 비용과 안전이 흔들림
Harness patternClaude Code, Codex, custom harness파일·테스트·브라우저 등 실제 작업 환경과 결합프레임워크보다 운영 규율이 중요

OpenAI Agents SDK는 agents, handoffs, guardrails, sessions, tracing 같은 primitives를 제공하고, tracing으로 agentic flow를 시각화·디버깅·평가할 수 있다고 설명한다. LangGraph는 long-running stateful agent를 위한 durable execution, streaming, HITL, persistence에 초점을 둔다. CrewAI는 Flow와 Crew를 나눠, Flow가 state와 control을 잡고 Crew가 자율 협업을 수행하는 구조를 권한다. Google ADK는 graph workflow, multi-agent orchestration, evaluation, deployment, context management를 production agent의 구성 요소로 묶는다.

내 선택 기준은 이렇다.

  • state와 HITL이 핵심이면 LangGraph류 graph runtime을 먼저 본다.
  • provider의 tracing, guardrail, hosted tool을 빠르게 쓰고 싶으면 provider SDK가 유리하다.
  • research, report, content pipeline처럼 역할 분업이 자연스러우면 CrewAI류 multi-agent framework가 잘 맞는다.
  • coding agent처럼 파일 시스템, 테스트, 브라우저, 리뷰 루프가 핵심이면 harness를 별도 설계한다.

프레임워크보다 먼저 결정할 것은 성공 조건과 실패 경계다. 그게 없으면 어떤 프레임워크를 써도 Agent는 데모에서만 그럴듯하다.

Claude Code류 coding agent에서 배울 수 있는 것

Claude Code, Codex, Cursor 같은 coding agent는 엔터프라이즈 Agent 설계의 가장 좋은 관찰 대상이다. 이들은 단순 챗봇이 아니라 파일을 읽고, shell을 실행하고, patch를 만들고, test를 돌리고, 사용자의 승인 경계를 통과한다. 즉 Agent가 실제 시스템에 행동하는 문제를 매일 다루고 있다.

2026년 4월에는 Claude Code 소스가 npm packaging 실수로 노출됐다는 보도가 있었고, Guardian과 TechRadar는 Anthropic이 고객 데이터나 credential 노출은 아니며 human error에 따른 packaging issue라고 설명했다고 보도했다. 이런 자료는 법적·보안 리스크가 있으므로 원문 소스나 유출본을 구현 blueprint로 삼으면 안 된다. 대신 공개 논문과 보도에서 확인 가능한 설계 패턴만 학습 대상으로 삼는 게 안전하다.

특히 Dive into Claude Code 논문은 공개된 TypeScript source를 분석해 Claude Code의 core가 "model 호출 → tool 실행 → 반복"이라는 단순 while loop라고 요약한다. 흥미로운 건 loop 자체가 아니라 loop 주변이다. 논문은 주변 시스템으로 다음 요소를 짚는다.

  • permission system과 safety classifier
  • context management를 위한 multi-layer compaction pipeline
  • MCP, plugins, skills, hooks 같은 확장 메커니즘
  • worktree isolation을 동반한 subagent delegation
  • append-oriented session storage

이건 앞에서 본 엔터프라이즈 Agent 원칙과 거의 같다. Agent의 본체는 loop지만, 제품의 가치는 loop를 감싸는 permission, context, extension, isolation, persistence에서 나온다.

coding agent manifest 연구도 같은 방향을 보인다. Claude.md 같은 agent manifest를 분석한 연구들은 공개 repository의 설정 파일이 project context, identity, operational rules, architecture constraint, tool usage policy를 담는다고 본다. 다시 말해 좋은 coding agent는 "좋은 프롬프트"보다 좋은 실행 계약 파일에 의존한다.

내가 이 자료에서 가져갈 실무 교훈은 셋이다.

관찰실무 설계로 번역
loop는 단순하다복잡도는 runtime 주변 시스템으로 옮겨야 한다
permission mode가 제품 핵심이다autonomy는 model prompt가 아니라 실행 권한 정책으로 제어한다
manifest가 성능을 좌우한다AGENTS.md, CLAUDE.md, skill 문서를 운영 artifact로 관리한다

이 관점은 하네스 엔지니어링과도 이어진다. coding agent가 오래 살아남으려면 프롬프트보다 harness가 중요하고, harness는 파일, 테스트, 권한, 상태, review loop를 제품화한 것이다.

엔터프라이즈에서 반드시 필요한 경계

엔터프라이즈 Agent의 핵심 위험은 모델이 틀린 답을 하는 것보다 틀린 행동을 실제 시스템에 실행하는 것이다. OWASP LLM Top Ten 2025는 prompt injection, sensitive information disclosure, supply chain, data and model poisoning, excessive agency, vector and embedding weaknesses, unbounded consumption 같은 위험을 정리한다. NIST AI RMF는 AI 제품의 설계, 개발, 사용, 평가에 trustworthiness 고려를 통합하는 risk management framework를 제공한다.

이를 Agent 설계로 내리면 다음 경계가 필요하다.

경계구현 방식
권한 경계모든 tool call은 사용자 auth context로 검증
데이터 경계retrieval 전에 tenant, role, consent scope 필터
행동 경계write/delete/send/pay 같은 비가역 행동은 HITL 또는 policy gate
네트워크 경계browser와 internal API 접근 권한 분리
memory 경계장기 memory 승격 전 sanitization과 user-visible edit path
비용 경계step, token, time, spend budget
감사 경계prompt version, exposed tools, tool calls, validation result, final response 저장

MCP specification도 arbitrary data access와 code execution path가 강력한 capability를 만든다고 경고하고, user consent, data privacy, tool safety, sampling controls를 핵심 원칙으로 둔다. 따라서 tool server를 붙이는 순간부터 보안 설계가 시작된다.

특히 prompt injection은 "모델을 속이는 문제"가 아니라 도구와 데이터 경계를 우회하려는 문제다. 외부 문서, 웹 페이지, 이메일, ticket 내용은 모두 untrusted input이다. 이 입력이 system prompt를 덮어쓸 수 없게 role separation을 강제하고, tool dispatcher는 모델의 문장을 신뢰하지 말고 현재 사용자 권한과 policy만 신뢰해야 한다.

실무 적용 순서

처음부터 완전한 autonomous Agent를 만들려고 하면 대개 실패한다. 내가 권하는 순서는 다음이다.

  • 정형 workflow로도 풀 수 있는지 먼저 본다.
  • 필요한 도구를 registry로 만들고, schema와 권한을 코드에 붙인다.
  • RAG가 필요하면 문서 lifecycle과 citation 검증부터 만든다.
  • Agent loop는 제한된 step 수와 제한된 tool subset으로 시작한다.
  • trace를 전부 남기고, 실패 case를 eval로 승격한다.
  • memory는 thread checkpoint부터 시작하고, long-term profile은 나중에 붙인다.
  • 비가역 행동은 사람이 승인하는 workflow로 시작한다.
  • 비용 budget이 안정된 뒤에만 autonomy를 늘린다.

이 순서에서 중요한 건 "Agent를 작게 시작하라"가 아니다. Agent가 할 수 있는 행동의 경계를 먼저 제품화하라는 뜻이다. 경계가 제품화돼 있으면 모델을 바꾸거나 프레임워크를 바꿔도 시스템은 무너지지 않는다.

근거 메모

주장근거
tool은 모델이 제안하고 backend가 실행해야 한다MCP specification의 tools/call 구조와 tool safety 원칙, OpenAI Agents SDK의 tools/guardrails/tracing 구성
long-running Agent에는 checkpoint와 store 구분이 필요하다LangGraph persistence 문서의 checkpointer/store 구분
context 비용은 prompt caching과 compaction 설계에 좌우된다OpenAI prompt caching, compaction 문서와 Google ADK context management 설명
Agent 보안은 prompt injection만이 아니라 excessive agency와 unbounded consumption까지 봐야 한다OWASP LLM Top Ten 2025
기업 환경에서는 risk management framework가 필요하다NIST AI RMF와 GenAI profile
reasoning 기법은 유용하지만 운영에서는 예산·로그·보안 경계가 필요하다ReAct, Tree of Thoughts, Reflexion, Toolformer 논문과 OpenAI reasoning best practices
Claude Code류 coding agent도 결국 loop보다 주변 시스템이 중요하다Claude Code 공개 분석 논문의 permission, compaction, extension, subagent, session storage 분석

참고 링크

  • OpenAI Agents SDK — agents, handoffs, guardrails, sessions, tracing.
  • OpenAI Prompt Caching — 1024 tokens 이상 prompt caching, cached_tokens, messages/tools caching.
  • OpenAI Compaction — long-running conversation context compaction.
  • OpenAI Cost Optimization — Batch API 등 비용 최적화 경로.
  • OpenAI Reasoning Best Practices — reasoning 모델에 chain-of-thought prompt를 강제하지 않는 권장.
  • Model Context Protocol Introduction — MCP의 목적과 적용 범위.
  • MCP Specification 2025-06-18 — resources, prompts, tools, security 원칙.
  • MCP Tools Specification — tools/list, tools/call, human-in-the-loop 권장.
  • LangGraph Overview — durable execution, HITL, persistence 중심의 orchestration runtime.
  • LangGraph Persistence — checkpointer와 store 구분.
  • Google Agent Development Kit — graph workflows, multi-agent orchestration, context management, production deployment.
  • CrewAI Introduction — Flow와 Crew 분리, production-ready multi-agent workflow.
  • CrewAI Agents — role, goal, tools, memory, delegation, reasoning 설정.
  • Dive into Claude Code — Claude Code 공개 분석 기반 coding agent architecture 연구.
  • On the Use of Agentic Coding Manifests — 공개 Claude.md manifest 구조 분석.
  • Decoding the Configuration of AI Coding Agents — Claude Code 프로젝트 configuration artifact 분석.
  • TechRadar: Anthropic confirms Claude Code source leak — 2026년 4월 소스 노출 보도.
  • The Guardian: Claude's code leak — packaging issue와 보안 논점 보도.
  • OWASP Top 10 for LLMs and Gen AI Apps 2025 — prompt injection, excessive agency, unbounded consumption 등.
  • NIST AI Risk Management Framework — AI risk management와 GenAI profile.
  • ReAct: Synergizing Reasoning and Acting in Language Models — reasoning과 action을 interleaving하는 Agent 패턴.
  • Toolformer: Language Models Can Teach Themselves to Use Tools — tool-use를 모델 학습 대상으로 본 연구.
  • Reflexion: Language Agents with Verbal Reinforcement Learning — 언어 피드백과 episodic memory로 Agent를 개선하는 접근.
  • Tree of Thoughts — 여러 reasoning path를 탐색하고 self-evaluate하는 접근.
  • Agent Workflow Memory — reusable workflow memory를 통해 long-horizon task 성능을 높이는 접근.
  • ACON: Optimizing Context Compression for Long-horizon LLM Agents — long-horizon Agent의 context compression 최적화.
on this page
  • 01Agent를 루프가 아니라 운영 시스템으로 본다
  • 02Chain of Thought는 로그가 아니라 내부 reasoning 예산이다
  • 03도구는 많을수록 좋은 게 아니다
  • 04memory는 네 층으로 나눠야 한다
  • 05context는 매번 새로 조립하는 빌드 산출물이다
  • 06비용 효율성은 모델 라우팅보다 workflow 라우팅이 먼저다
  • 07발전하는 Agent는 trace와 eval에서 배운다
  • 08프레임워크는 철학이 다르다
  • 09Claude Code류 coding agent에서 배울 수 있는 것
  • 10엔터프라이즈에서 반드시 필요한 경계
  • 11실무 적용 순서
  • 12근거 메모
  • 13참고 링크

이런 글도

  • HNSW 심화 — 파라미터 튜닝과 구현체별 성능 차이
    벡터 검색 알고리즘 입문에서 HNSW가 kNN을 실시간에 쓰게 만든 표준 알고리즘이라는 걸 봤다. 이 글은 그 다음 단계다 — 파라미터를 어떻게 튜닝하고, 왜 같은 설정인데 제품마다 성능이 다른가. - HNSW 튜닝은 파라미터 3개로 끝난다 — M(그래프 밀도), efconstruction(빌드 품질), efsearch(검색 품질). 앞 둘은 인덱스에 고정...
    🤖 ai
    ai
    2026.07.01
  • 사람용 CLI와 AI 에이전트용 CLI는 설계가 다르다
    예전에는 CLI를 사람만 썼다. 지금은 Claude Code 같은 AI 에이전트가 CLI를 호출해 업무를 자동화한다. 같은 도구라도 "에이전트가 쓰기 좋게" 설계하면 자동화가 훨씬 매끄럽고, 그러지 않으면 자동화가 자주 깨진다. 여러 업무 자동화 CLI를 직접 만들어 에이전트로 호출해 보면서 정리한 설계 원칙을 공유한다. (예시는 공개한 개인 도구 door...
    🤖 ai
    ai
    2026.06.17
  • 벡터 검색 알고리즘 — kNN에서 HNSW까지
    임베딩으로 텍스트를 벡터로 바꾸고 나면, "질문 벡터와 가장 가까운 문서 벡터"를 찾아야 한다. 이 글은 그 검색을 담당하는 알고리즘을 kNN(개념) → 왜 느린가 → ANN → HNSW(실전 표준) 순서로 정리한다. - kNN(k-Nearest Neighbors) = 어떤 벡터(쿼리)와 가장 가까운 k개의 이웃 벡터를 찾는 알고리즘 - 예를 들어 - 문서...
    🤖 ai
    ai
    2026.06.16
  • OpenClaw vs Hermes Agent — 갈아탈까 고민하며 정리한 비교
    지금 나는 OpenClaw로 개인 에이전트를 돌리고 있다. 잘 동작하지만, 에이전트를 여러 개 구성하고 그 위에 제대로 된 화면을 얹는 그림을 그리다 보니 Hermes Agent가 자꾸 눈에 들어온다. 갈아탈지 말지를 결정하기 전에, 두 프레임워크가 메모리·구성·UI·자기개선에서 실제로 무엇이 다른지 공식 문서 기준으로 정리했다. OpenClaw 자체의 내...
    🤖 ai
    ai
    2026.06.16

댓글 (0)