Workflow와 Agent, 그리고 하네스 — LLM에게 얼마만큼의 자유를 줄 것인가
LLM 애플리케이션에서 workflow와 agent는 무엇이 다른가. 사람이 경로를 정하는 workflow, LLM이 스스로 경로를 정하는 agent, 그리고 그 사이에서 자유와 안전의 균형을 잡는 하네스(harness)를 철길·사거리·신호등 비유로 정리합니다.
LLM으로 뭔가를 만들다 보면 반드시 마주치는 갈림길이 있습니다. “이 판단을 내가 코드로 정해줄 것인가, 아니면 LLM이 스스로 정하게 둘 것인가.” 이 질문의 답이 workflow와 agent를 가릅니다. 그리고 이 둘 사이에서 균형을 잡아주는 것이 하네스(harness)입니다.
Anthropic이 Building Effective Agents에서 이 구분을 명확히 정리했는데, 이 글에서는 그 정의를 바탕으로 제가 실제로 만들어본 시스템들을 대입해 정리해보려 합니다.
Workflow: 사람이 깐 철길 위를 LLM이 달린다
Anthropic의 정의는 간결합니다. Workflow는 LLM과 도구가 미리 정의된 코드 경로(predefined code paths)를 통해 오케스트레이션되는 시스템입니다.
핵심은 “미리 정의된”에 있습니다. 어떤 단계를 어떤 순서로 밟을지, 각 단계에서 무엇을 할지를 사람이 코드로 먼저 정해둡니다. LLM은 그 위에서 각 단계의 지적인 처리를 담당할 뿐, 전체 경로를 바꾸지는 못합니다.
저는 이걸 철길에 비유합니다. 레일은 사람이 미리 깔아둡니다. 기차(LLM)는 그 레일 위를 강력하게 달리지만, 어디서 갈라지고 어디서 멈출지는 레일이 결정합니다. 기차가 아무리 똑똑해도 레일 없는 곳으로는 가지 않습니다. 그래서 workflow는 예측 가능하고 일관적입니다. 잘 정의된 작업에서는 이 예측 가능성이 곧 신뢰성이 됩니다.
Anthropic이 소개하는 prompt chaining, routing, parallelization, orchestrator-workers 같은 패턴이 모두 이 workflow 계열입니다. 공통점은 경로의 뼈대를 사람이 쥐고 있다는 것입니다.
저에게 이 철길의 경험은 명확합니다. 예전에 커스텀 오케스트레이션 엔진을 Graph / Node / Edge 구조로 직접 만든 적이 있습니다. 각 Node가 하나의 처리 단위이고, Edge가 그 사이를 잇는 경로였죠. 어떤 Node에서 어떤 Node로 이어질지를 제가 그래프로 설계했습니다. 이게 전형적인 workflow였습니다. LLM은 각 Node 안에서 똑똑하게 일했지만, 그래프 자체의 모양은 제가 정했으니까요.
Agent: LLM이 사거리에서 스스로 방향을 정한다
Agent의 정의는 정반대 지점에 있습니다. Agent는 LLM이 스스로 자신의 프로세스와 도구 사용을 동적으로 지시하며, 작업을 어떻게 수행할지에 대한 통제권을 유지하는 시스템입니다.
여기서는 경로가 미리 깔려 있지 않습니다. LLM이 환경으로부터 피드백(도구 실행 결과, 코드 실행 결과 등)을 받아가며, 다음에 무엇을 할지 매 순간 스스로 결정합니다. 대개 “도구를 쓰고 → 결과를 보고 → 다음 행동을 정하는” 루프의 형태입니다.
저는 이걸 사거리에 비유합니다. 철길과 달리 사거리에는 정해진 방향이 없습니다. 도착한 차량(LLM)이 상황을 보고 직진할지 좌회전할지 스스로 정합니다. 유연합니다. 미리 몇 단계가 필요한지 예측할 수 없는 열린 문제, 경로를 하드코딩할 수 없는 문제에 강합니다. Anthropic도 agent를 단계 수를 예측할 수 없고 고정된 경로를 못 박을 수 없는 열린 문제에 쓰라고 권합니다.
대신 대가가 있습니다. 사거리는 사고가 날 수 있습니다. Anthropic은 agent의 자율성이 더 높은 비용과 오류 누적(compounding errors)의 가능성을 부른다고 지적합니다. 매 판단이 조금씩 어긋나면, 그 오차가 여러 턴에 걸쳐 쌓입니다.
제 경험에서 agent에 가까웠던 건 사업계획서 검증 에이전트의 도구 판단 부분이었습니다. 어떤 검증 도구를 언제 호출할지, 결과를 보고 추가로 무엇을 확인할지를 제가 일일이 경로로 정하지 않고 LLM의 판단에 맡긴 지점이 있었죠. 그 부분은 철길이 아니라 사거리였습니다. 유연했지만, 그만큼 예측이 어렵고 통제가 필요했습니다.
하네스: 사거리에 신호등과 가드레일을 세운다
여기서 하네스(harness)가 등장합니다. Agent의 유연함은 매력적이지만, 통제 없는 사거리는 위험합니다. 그렇다고 모든 걸 철길로 깔아버리면 agent를 쓰는 의미가 없어집니다. 이 사이에서 자유와 안전의 균형을 잡는 장치가 하네스입니다.
저는 이걸 사거리의 신호등과 가드레일에 비유합니다. 신호등과 가드레일은 차량이 어디로 갈지를 대신 정해주지 않습니다. 방향 선택의 자유는 여전히 운전자(LLM)에게 있습니다. 다만 사고가 나지 않도록, 위험한 방향으로는 못 가도록 경계와 규칙을 세워둘 뿐입니다.
Anthropic의 글에서 하네스라는 단어가 직접 나오진 않지만, agent를 안전하게 운용하기 위해 권하는 장치들이 정확히 이 역할을 합니다.
- 정지 조건(stopping conditions): 최대 반복 횟수 같은 걸 두어 무한 루프를 막습니다. 신호등의 빨간불입니다.
- 가드레일(guardrails)과 샌드박스: 위험한 행동을 격리된 환경에서만 하게 합니다. 도로 밖으로 못 나가게 막는 가드레일입니다.
- Human checkpoint: 중요한 갈림길에서는 사람에게 판단을 넘깁니다. 사람이 서 있는 횡단보도인 셈입니다.
- 투명성(transparency): agent의 계획 단계를 명시적으로 드러내, 지금 어느 방향으로 가려는지 보이게 합니다.
하네스의 핵심은 “자유를 얼마나 줄 것인가”를 끄고 켜는 이분법이 아니라 정도의 문제로 다룬다는 데 있습니다. 신뢰할 수 있는 판단에는 파란불을 많이 주고, 위험한 판단에는 빨간불과 가드레일을 촘촘히 세웁니다.
정리 — 결국 자유의 총량을 설계하는 일
세 개념을 한 장면으로 묶으면 이렇습니다.
- Workflow(철길): 사람이 경로를 미리 정하고 LLM은 그 위를 달린다. 예측 가능하지만 유연하지 않다.
- Agent(사거리): LLM이 스스로 경로를 정한다. 유연하지만 예측이 어렵고 오류가 누적될 수 있다.
- 하네스(신호등·가드레일): 그 사거리에서 자유와 안전의 균형을 잡는다. 자유를 없애지 않으면서 사고를 막는다.
Anthropic이 글 전체에서 반복하는 조언은 결국 하나입니다. 가장 단순한 해법에서 시작하고, 필요할 때만 복잡성을 더하라. 모든 문제에 agent가 필요한 건 아닙니다. 잘 정의된 작업이라면 철길이 오히려 낫습니다. 문제가 열려 있고 경로를 못 박을 수 없을 때 비로소 사거리로 나아가되, 그때는 반드시 신호등과 가드레일을 함께 세워야 합니다.
제가 만들어본 두 시스템 — 철길이었던 Graph/Node/Edge 오케스트레이션 엔진과, 사거리에 가까웠던 사업계획서 검증 에이전트의 도구 판단 — 을 이 틀에 놓고 보니, 제가 그동안 암묵적으로 조절해온 것이 결국 LLM에게 허용한 자유의 총량이었다는 게 선명해졌습니다. workflow냐 agent냐는 양자택일이 아니라, 그 총량을 어디에 맞출 것인가의 문제였던 셈입니다.
📚 시리즈: AI 에이전트, 만들고 평가하기
- Workflow와 Agent, 그리고 하네스 — LLM에게 얼마만큼의 자유를 줄 것인가 ← 지금 글
- 에이전트의 도구(Tool)와 세 층의 평가 — 선택·실행·결과
- 멀티에이전트의 두 숙제 — 토큰 비용과 안정성, 그리고 평가라는 해법
- ReAct와 Plan-and-Execute를 LangGraph로 직접 구현하며 배운 것
- 그래서 Agent에 데이터를 어떻게 입히나요? — 데이터가 작을 때의 온톨로지 설계
- 제조업 AI 에이전트 프로젝트 1차 회고 — 평가, 저장소, 코드 정리에 대한 세 가지 교훈
- AI 에이전트의 예시 데이터는 어떻게 다룰까 — 컨텍스트 엔지니어링부터 파인튜닝 준비까지