Dev Stories

IoT에서 멀티 시나리오 오케스트레이터까지: '설정 지향' 아키텍처 구축기

Intro
복잡한 물리 도메인을 디딤돌 삼아, 신규 시나리오 개발 기간을 70% 단축하는 백엔드 프레임워크 설계


안녕하세요. IT부문 IT플랫폼본부에서 IoT플랫폼 개발을 담당하고 있는 윤영로입니다.


최근 생성형 AI가 다양한 업무와 서비스에 적용되면서 LLM의 활용처가 급속도로 넓어지고 있습니다. 특히 단순한 질의응답을 넘어, 스스로 실행 계획을 세우고 여러 외부 도구(Tool)를 활용하는 AI 에이전트의 사용이 크게 확대되고 있습니다.


하지만 AI 에이전트를 실무 비즈니스에 전면 도입하는 과정에는 큰 걸림돌이 존재합니다. 바로 에이전트가 생각하고 추론하는 과정에서 소비되는 토큰 비용과 이에 따른 인프라 비용 관리입니다. AI가 문제를 해결하기 위해 스스로 생각하고 답하며 길게 고민할수록 지불해야 하는 토큰의 양은 기하급수적으로 늘어납니다. 이 토큰은 비유하자면 AI가 글을 읽고 쓸 때 지불해야 하는 ‘에너지 혹은 고속도로 통행세’와 같습니다. 따라서 고성능 에이전트 시스템을 설계할 때는 이 통행세를 얼마나 영리하게 아끼며 최적의 경로를 타느냐가 상용화 여부를 결정짓는 핵심 엔지니어링 지표가 됩니다.


그렇다면 복잡하고 엄격한 데이터 정합성과 물리적 디바이스 통제가 요구되는 IoT 플랫폼 환경에서, AI 에이전트는 어떻게 돌발 행동 없이 안전하게 설계될 수 있을까요? 그리고 수많은 비즈니스 시나리오가 끊임없이 추가되는 상황에서 어떻게 코어 영역을 단 한 줄도 수정하지 않고 새로운 시나리오를 유연하게 이식하고 가동할 수 있을까요?


이번 글에서는 저희 본부가 복잡한 IoT 도메인을 성공적인 디딤돌로 삼아 구축한 도메인 독립적 '설정 지향형(Configuration over Code)' 에이전트 오케스트레이터의 설계 철학과 핵심 추상화 포인트를 소개합니다. 또한 실전 프로덕션 환경의 최대 병목이었던 '대용량 데이터로 인한 컨텍스트 폭증''LLM의 통제 불능 무한 루프' 장벽을 아키텍처적 장치로 돌파해낸 문제해결 사례를 공유하고자 합니다.


Problems


저희 팀의 핵심 미션은 지속적으로 확장하는 전사 통합 IoT 플랫폼과 홈IoT 서비스의 운영 안정성을 확보하는 것입니다. 이와 더불어 인접 도메인으로 비즈니스를 유연하게 확장하고 지속적인 기술 혁신 과제를 적극적으로 수행하는 것을 목표로 삼고 있습니다. 하지만 기존 시스템 운영과 플랫폼 대응 업무 등 매일같이 쏟아지는 수동 반복 업무의 부하는 팀 내부 개발 리소스를 빠르게 잠식해 나가는 근본적인 장애물이었습니다.


단순히 전통적인 개발 단계를 조율하는 것만으로는, 매달 건물 관리비나 전기세처럼 꼬박꼬박 새어 나가는 '고정 운영비(OPEX)'의 병목을 극복하기 어렵다고 판단했습니다. 결국 개인이 담당하고 있는 수동 업무 영역을 비즈니스 워크플로우 수준으로 격상시키고, 이를 자율형 AI 및 자동화 시스템에 완전히 위임하는 변화가 요구되었습니다.


하지만 이를 실제 에이전트로 구현해내는 여정에는 다음과 같은 현실적인 아키텍처적 장벽들이 가로막고 있었습니다:


  • 규칙 기반 정적 워크플로우(RPA)의 한계: 과거의 고정된 규칙 기반 자동화(RPA)나 정적인 하드코딩 워크플로우 구조는 새로운 이종 제휴사가 추가되거나 예외 상황이 발생할 때마다 매번 비즈니스 코드를 다시 수정하고 전체 배포 파이프라인을 기동해야 했습니다. 새 차를 살 때 차량 가격뿐만 아니라 취득세, 보험료, 기름값, 수리비까지 결국 내 주머니에서 전부 나가는 비용을 계산하듯, 시스템 구축 및 유지 전 과정에서 발생하는 '총소유비용(TCO)'을 지속적으로 높이는 원인이 되었으며 전사적 오버헤드를 가중시켰습니다.


  • 지독한 보일러플레이트(Boilerplate) 지옥: 새로운 비즈니스 시나리오가 추가되어 새로운 에이전트를 확장할 때마다 YAML 파싱 코드 구현, 보안 키 저장소 연동, 로깅 인프라 세팅, 모니터링 미들웨어 구성을 매번 바닥부터 구현해야 하는 무한 반복 문제가 있었습니다. 이 보일러플레이트 지옥은 비유하자면, 매번 새로운 서류를 작성할 때마다 이름, 주소, 주민번호를 처음부터 끝까지 똑같이 손으로 무한히 반복해서 적어야 하는 지루하고 똑같은 형식의 기초 서류 양식과 같습니다. 개발자마다 구현 방식이 달라지면서 아키텍처가 점차 파편화되었고, 이는 고스란히 재사용성과 유지보수성이 나빠지는 결과로 이어졌습니다.


Solutions

설계 철학: Configuration over Code

단일 에이전트 미션에서 '멀티 시나리오 오케스트레이터'로


초기에 저희가 당면했던 현업 조직의 미션은 특정 수동 업무를 자동화하는 '단일 목적의 AI 에이전트 구축'이었습니다. 그러나 하나의 에이전트를 만들기 위해 거대하고 무거운 백엔드 아키텍처를 매번 새로 구현하는 방식은 장기적인 관점에서 유지보수가 불가능하다고 판단했습니다.


마침 LLM 에이전트 생태계의 기술적 성숙도가 높아지고 참고할 수 있는 표준 명세 및 학습 환경이 풍부해진 시점이었기에, 저희는 관점을 완전히 뒤집기로 결정했습니다. 단 한두 명의 소규모 리소스만으로도 수십 개의 상이한 비즈니스 시나리오를 신속하게 수용하고 에이전트 구동 환경을 동적으로 프로비저닝할 수 있는 '도메인 독립적 설정 지향 프레임워크'를 개발하는 방향으로 목표를 재정의한 것입니다.


이 설계의 핵심은 바로 '설정 지향(Configuration over Code)'입니다. 오케스트레이션 코어 엔진은 단 하나로 엄격하게 고정하되, 에이전트의 역할(Persona), 연동 도구(Tool), 구체적인 비즈니스 규칙(Rule)은 선언적 설정 파일 형태로 동적 로드 및 바인딩되도록 유연하게 추상화했습니다. 이 추상화 아키텍처 덕분에 개발자는 복잡한 공통 인프라 코드에 손대지 않고도 새로운 비즈니스 시나리오를 무한히 확장할 수 있는 '멀티 시나리오 오케스트레이터'를 실현할 수 있었습니다.


왜 IoT 도메인이 최적의 무대였는가?


이러한 도메인 독립적 추상화 프레임워크를 검증하고 안착시키기에 IoT 플랫폼 도메인은 가장 완벽한 샌드박스이자 엔지니어링 요충지였습니다:


  • 풍부한 원천 데이터: IoT 장비와 센서로부터 실시간으로 유입되는 대량의 원천 데이터가 상시 확보되어 있어, 에이전트가 상황을 인지하고 추론할 수 있는 환경 데이터 소스가 매우 풍부했습니다.


  • 명확한 비즈니스 룰과 검증 메트릭: AI 에이전트를 상용 서비스에 적용할 때 가장 큰 걸림돌은 '통제 가능성'입니다. IoT 도메인은 장비 제어 인터페이스와 센서 수치 등 에이전트의 동작과 판단을 엄격하게 규제하고 평가할 수 있는 비즈니스 룰 및 메트릭 설정 기준이 비교적 명확했습니다. 따라서 자율적 지능과 엄격한 제어의 균형점을 찾기 위한 최적의 실험실이 될 수 있었습니다.


Harness Files: 코드 변경 없는 확장


정적으로 짜인 이전의 워크플로우는 미리 설계된 플로우 차트 범위를 벗어나거나 이종 플랫폼의 데이터 수신 형식이 조금이라도 어긋나면 곧바로 시스템 에러로 이어집니다. 저희가 구축한 프레임워크는 Harness Files 동적 로딩 개념을 설계의 뼈대로 삼았습니다.


Harness Files는 비유하자면 "에이전트의 역할과 행동 규칙을 적어둔 '설정 설명서'"입니다. 사용자 요청이 유입되는 런타임 환경에서 설정 파일을 직접 로드하여 실행 스키마와 액션 셋을 바인딩하므로, 개발자는 메인 코드를 일일이 수정할 필요 없이 선언적 Markdown/TOML/Scripts 파일 설정만으로 비즈니스 로직을 즉각 수정하고 대응할 수 있습니다.



핵심: 3-Layer 아키텍처

자율성과 통제의 조화: Dual Control Plane 아키텍처

이미지

LLM의 뛰어난 추론과 판단 능력은 에이전트에 무한한 가능성을 선사하지만, 비결정론적 특성으로 인해 발생하는 '예상치 못한 도구 호출 실수''루프 고착화 현상'은 프로덕션 환경의 심각한 운영 위험 요인이기도 합니다. 엔터프라이즈 환경이 요구하는 비즈니스 신뢰성을 만족하기 위해, 저희는 통제와 자율을 물리적으로 온전히 이원화하여 관리하는 Dual Control Plane 아키텍처를 고안했습니다.

이 구조는 '기차 철길''자율주행 자동차'라는 비유를 활용해 시각화할 수 있습니다:


  • Top Layer (Deterministic Control Plane): 절대 선로를 벗어나면 탈선 대형사고가 나는 '기차 철길'입니다. 거시적인 워크플로우를 결정론적인 유한 상태 머신(FSM) 엔진으로 단단히 옭아매고, 전체 에이전트가 지정된 기차역(State) 순서대로만 안전하게 이동하도록 흐름을 엄격하게 통제합니다.


  • Bottom Layer (Nondeterministic Control Plane): 기차역 주변의 복잡한 골목길 구석구석을 자유롭게 누비는 '자율주행 자동차'입니다. 지정된 기차역 내부라는 안전한 테두리 안에서 AI가 머리를 써서 ReAct(Reasoning + Acting) 루프를 돌며 자율적으로 최적의 도구를 활용해 임무를 수행하도록 보장합니다.


  • Middle Layer (AgentMiddleware): 철길과 자율주행 도로를 안전하게 이어주는 '중앙 관제소'이자 양측 대화를 조율하는 '교통경찰'입니다. FSM의 현재 전이 상태와 실행 태스크 스키마를 판별하여 동적으로 최적의 상태별 프롬프트, 바인딩 툴셋, 환경 변수를 적재적소에 주입합니다.


이처럼 거시 흐름은 '철길 FSM'으로 규격화하여 엄수하고, 역 내부의 상세 추론은 '자율주행 ReAct'로 해결하는 구조를 완성했습니다.


에이전트의 뇌 구조: Thread -> Plan -> Step -> Task & Action

이미지


에이전트 시스템이 특정 시나리오나 비즈니스 로직에 종속되는 순간, 프레임워크로서의 범용성은 상실됩니다. 저희 팀은 철저히 "설정 지향" 아키텍처 하에 에이전트의 논리적 실행 흐름과 상태 관리를 4단계의 데이터 계층 구조로 격리하여 정규화했습니다:


  • Thread: 사용자와 매핑되는 최상위 계층입니다. 다른 작업이나 이전 상담 내용이 뒤섞이지 않도록 사용자마다 부여되는 '개인 전용 대화 노트'처럼 작동하며, 연속적인 상호작용 맥락을 안전하게 영속 격리하여 관리합니다.


  • Plan: 전체 비즈니스 목표를 달성하기 위한 구체적 실행 전략의 집합입니다. LLM이 도메인 환경과 요구사항을 파악한 후, 정해진 비즈니스 규칙과 결합하여 순서가 보장된 복수의 Step 형태로 계획을 도출해 냅니다.


  • Step: 실질적인 독립 실행을 보장받는 안전한 가상 공간입니다. FSM 내부에서 이전 단계가 완벽히 성공해야만 다음 단계로 상태가 이어집니다. 중간 장애 발생 시 완료된 단계는 격리되어 재실행되지 않으며, '미완료된 첫 Step'부터 복원 후 재수행합니다. 이는 마치 인터넷 쇼핑몰에서 실수로 결제 버튼을 연달아 두 번 클릭했어도 중복 결제되지 않고 오직 단 한 번만 정상 결제되는 안정성과 같습니다. 시스템이 중간 장애로 몇 번을 다시 실행되어도 부작용 없이 단 한 번만 안전하게 처리되도록 보장합니다.


  • Task & Action: 가장 원자적인 작업 단위입니다. 개별 Task는 구체적인 외부 행위를 수행하는 실질적인 함수 바인딩(Action Binding) 구조를 취하며, 이는 프레임워크 하위에 추상화된 Subagent, MCP Tool, Skill 중 하나에 1:1 매핑되어 실행됩니다.


컨텍스트 관리: VFS 오프로딩

이미지

홈 센서 정보나 대용량 통계 로그 분석 시 수십 MB 수준에 달하는 데이터 전체가 LLM 프롬프트 영역으로 직접 인입되는 병목 현상이 있었습니다. 이로 인해 불필요한 데이터 파싱 비용으로 인해 API 처리 속도가 급락하고 통행세(토큰 비용)가 심각하게 폭증하는 아키텍처 한계에 봉착했습니다.

데이터 크기가 일정 규격 이상일 때 외부 저장소에 즉각 적재하는 가상 파일 시스템(VFS, Virtual File System) 오프로딩 메커니즘을 도입했습니다.

이 메커니즘은 '도서관 서가'로 비유할 수 있습니다.

AI 에이전트에게 1,000페이지짜리 백과사전 원본(대용량 데이터)을 매번 직접 전달해 주며 학습하라고 하면, AI의 책상이 미어터지고 통행세(토큰 비용)도 매번 엄청나게 듭니다.
대신, 그 무거운 사전은 도서관 서가(VFS 저장소)에 안전하게 꽂아 두고, AI에게는 '이 책은 3번 서가 4번째 칸에 꽂혀 있고, 주요 수치들이 요약되어 있음'이라는 짧은 '요약 쪽지(VFS 가상 경로 및 메타 포인터)'만 쥐여 주는 방식입니다.
AI는 무거운 짐 없이 가볍게 생각(추론)에만 집중할 수 있게 되어 속도가 빨라지고 비용도 획기적으로 아끼게 된 것입니다.

VFS 구조 정립 이후, 복잡한 통계 데이터 분석 시 평균 토큰 소모량을 약 50%가량 획기적으로 세이빙하였으며, 컨텍스트 크기를 대폭 낮춤으로써 속도 지연 없이 균일하고 정교한 추론 안정성을 확보해 냈습니다.


구현 표준화: LLM 과 Action

LLM 설정 표준화와 벤더 종속성 해소


에이전트가 어떤 LLM 모델을 사용하고 어떻게 비용과 추론 목적에 맞게 분배할지 정의하는 영역 또한 파일 단위로 완벽히 격리되었습니다. 프레임워크 내부에 내장된 LLM Router는 설정 파일을 실시간 해석하여 라우팅 제어를 수행합니다.

이미지


이 라우팅 구조 덕분에 비즈니스 코드는 특정 벤더나 단일 모델에 결코 종속되지 않습니다. 가벼운 포맷 가공 및 상태 조회 작업은 고속도로 통행세(토큰 비용)가 대단히 저렴한 경량 모델로 통제하고, 자율적인 플랜 수립과 정교한 검증은 똑똑한 고급 모델로 연결하여 전체 가용 운영 비용을 극적으로 절감합니다.


Action 설정 표준화와 유연한 연동


에이전트가 외부 세계와 대화하며 액션을 구성하는 인터페이스 규격은 독립적인 Action 단위의 유연한 조화 구조를 지닙니다. 새로운 비즈니스 시나리오가 들어올 때, Planner는 이 독립적인 Action들의 조합을 통해 시나리오 맞춤형 계획을 설계합니다.


MCP Tool


외부 공통 규격인 Model Context Protocol(MCP)을 채택해, 물리 네트워크에서 실행 가능한 툴들의 결합도와 이식성을  확보했습니다.

이미지


Agent Skill Specification


한 도메인의 기능을 완수하는 비즈니스 스크립트 도메인 가이드입니다. 시나리오의 핵심 비즈니스 로직과 제약 사항들이 이 문서에 자연어 가이드라인 형태로 상세히 서술되어 있습니다. 오케스트레이터가 Plan 단계일 때 LLM Planner가 이 설명서들을 동적으로 스캔하여 비즈니스 요건에 맞는 동적 Plan을 유기적으로 수립하도록 유도합니다.

이미지


Subagent Architecture와 명시적 종료 강제


복잡하고 거대한 멀티 에이전트 협업 구조를 지탱하기 위해, 개별 서브에이전트 역시 동적 바인딩 모델에 맞춰 개발되었습니다. 서브에이전트의 구성을 격리하는 프로파일 agent.toml 역시 완벽하게 구조화되었습니다.

이미지


서브에이전트는 단순히 명령에 복종하는 봇이 아닙니다. 자신에게 부여된 역할 정의서(AGENTS.md)에 기반해 작동하는 순간, 상위 오케스트레이터로부터 허용된 도구 셋(MCP)과 비즈니스 스크립트(Agent Skills)를 상황에 맞춰 실시간으로 갈아 끼우는 '동적 주입(Dynamic Binding)'을 통해 독립적인 지능형 실행 환경을 완성합니다.


이미지


동작이 종결되는 시점에는 LLM이 결론 내리기를 지연하며 무한 궤도를 도는 현상을 막기 위해 물리적인 인터셉터 데코레이터(@mark_response)로 완벽한 종료 처리를 강제 제어합니다. 이는 마치 일 잘 마치고 나가는 직원의 등에 '빨간 딱지(완료 태그)'를 붙여, 중앙 관제소가 이를 감지하고 지체 없이 퇴근할 수 있도록 식별하게 돕는 영리한 제어 장치와 같습니다.


이미지



Result

사례 A: 대용량 환경 데이터 기반 분석 보고서 자율 생성 인프라


전국 총 9개 핵심 거점 지역을 대상으로 월별, 분기별, 반기별, 연간 대기환경 지표 보고서를 주기적으로 발행하는 비즈니스입니다. 기존에는 환경 전문가들이 유료 트렌드 수집 및 분석을 위해 직접 데이터를 수동으로 모으고 가공하여 리포트를 작성해 왔으며, 이로 인해 많은 공수와 수작업 비용이 발생하고 있었습니다.

이를 전 과정 완전히 자율적으로 실행하는 Autopilot 파이프라인 모듈로 개발 완료했습니다. 에이전트가 스스로 데이터를 자동으로 조회하고, 분석 텍스트와 가시화 차트를 순차 렌더링하여 최종 전문가 수준의 완성도 높은 결과물을 직접 조립해 냅니다.


사례 B: 실시간 공공 데이터 추론 기반 차량 경로 자율 최적화


통합IoT 플랫폼으로 마이그레이션 도중 중단되었던 단순 규칙 기반의 추천 시스템을, 실시간 살수차 위치 및 환경 데이터까지 유기적으로 추론하여 연계하는 'AI 기반 실시간 맞춤형 추천' 방식으로 고도화 개발을 완료했습니다.이 기능은 성공적인 대외 기술 홍보 포인트가 될 뿐만 아니라, 새로운 에이전트 워크플로우를 코어 코드의 변경 없이 신속하게 얹을 수 있다는 AI 기반 개발의 신속함(AIDD, AI-Driven Development)을 검증하는 기술적 기반이 되었습니다.


사례 C: 지능형 제휴사 연동 실시간 스트림 이상 징후 자동 탐지


고객 VoC 접수 후 엔지니어가 수동으로 원인을 규명하던 기존의 대응 패러다임을 바꾸어, 실시간으로 기기들이 주고받는 끊임없는 '대화 데이터의 흐름(Logs)'을 백그라운드에서 추적하다가 이상 징후 발생 즉시 사내 전용 협업 도구로 원인 분석 보고서를 실시간 전파하는 탐지 모듈을 탑재했습니다:


  • 이종 도메인 마이그레이션 검증: 원래 일괄(Batch) 처리를 위해 조립되었던 에이전트 아키텍처가, 아무런 수정 없이 실시간 스트리밍 탐지 시스템으로 기존 대비 개발 기간을 대략 70% 단축하여 성공적으로 이식되는 데 성공했습니다.


  • 고객 VoC 사전 예방: 대외 오픈 이후 제휴사 연동 문제를 선제 파악 및 해결할 수 있게 되어, 평균 복구 시간(MTTR)을 비약적으로 단축시키고 VoC를 사전에 철저히 억제하는 뛰어난 효과를 거둘 것으로 기대됩니다.

Lessons Learned


본 도메인 독립적 설정 구동형 프레임워크 구축 여정은 저희 소수 정예 팀이 마주한 비즈니스 운영 오버헤드를 줄이고, 인접 업무를 스마트하게 자동화하려는 치열한 엔지니어링 고민의 산물이었습니다.


이번 프로젝트를 통해 확립한 저희의 AI 에이전트 구축의 3대 엔지니어링 법칙을 제안하며 본 글을 마칩니다:


  1. Embrace the Dual Plane (선로 위의 기차와 자율주행차): 추론 능력의 유연한 자율성은 살리되, 거시적 운영 플로우는 FSM 기반의 확정적 제어 평면으로 단단히 감싸 엔터프라이즈급 신뢰도를 확보해야 합니다.

  2. Configuration over Code (코드 대신 선언적 설명서): 코드 변경 없이 비즈니스 인터페이스를 유연하게 스캔하고 적재하는 Harness Files 기반의 선언적 지향 설계를 수용하여 향후 기능 확장에 따른 중복 투자를 방지해야 합니다.

  3. Manage the Context (책상 위 요약 쪽지): LLM을 전지전능한 엔진으로 신봉하는 오류를 지양하고, VFS 오프로딩과 같은 포인터 기반 Context 세이빙 기법을 장착하여 지능 자체에 집중할 수 있는 컴팩트한 아키텍처 환경을 조성해야 합니다.


Future Work


개발 및 기술 검증을 마친 본 프레임워크는 대외 서비스 적용을 앞둔 현 시점에도 지속적인 개선 작업을 진행하고 있습니다. 특히 메인 백엔드 코드를 재배포할 필요 없이 선언적 설정 파일(Harness Files)만 추가·수정하여 동적으로 가동할 수 있는 아키텍처 특성을 극대화하여, 기존의 대기환경 분석이나 차량 경로 최적화 사례를 넘어 다양한 시나리오로 적용 범위를 끊임없이 넓혀가고 있습니다.

이와 함께 Model Context Protocol(MCP) 및 AGENTS.md, Agent Skills 등 AI 표준 규격을 프레임워크 전반에 정교하게 이식하여 이종 시스템 및 외부 에이전트와의 결합도를 최적화하는 작업을 병행하고 있습니다. 소수 인력으로도 수십 개의 복잡한 비즈니스 워크플로우를 지탱할 수 있도록 완성도를 다듬어 나갈 계획입니다.


References

윤영로

KT IoT플랫폼에서 이벤트, 전송, AI 에이전트 등을 설계 및 개발하고 있습니다.