오케스트레이션 패턴 — 모델 호출을 조합하는 법
한 번의 호출로 안 되면, 여러 번을 어떻게 엮는가
"LLM에게 물어보면 답이 나온다" — 간단한 질문은 이걸로 충분하다. 하지만 "이 레포의 버그를 고쳐줘"는 한 번에 안 된다. 파일을 읽고, 문제를 분석하고, 패치를 만들고, 테스트를 돌리고, 실패하면 다시 수정한다. 이 전체 흐름을 설계하는 게 오케스트레이션이다.
주요 패턴
체이닝(Chaining) — 첫 번째 호출의 출력이 두 번째 호출의 입력이 되는 직렬 구조. 가장 단순하지만 효과적이다. 예: 코드 생성 → 코드 리뷰 → 수정. 각 단계마다 다른 프롬프트를 쓸 수 있다.
라우팅(Routing) — 입력을 분석해서 적절한 처리 경로로 보낸다. "이 질문은 코드 관련이니 코딩 에이전트로", "이건 문서 관련이니 검색 에이전트로" 같은 분기. 분류 모델이 라우터 역할을 한다.
병렬화(Parallelization) — 독립적인 작업을 동시에 실행한다. 파일 10개를 분석해야 하면, 하나씩 순서대로 하는 것보다 동시에 돌리는 게 빠르다. fan-out → 처리 → fan-in 구조.
에이전트 루프 — 목표를 달성할 때까지 계속 반복한다. "테스트 통과할 때까지 코드 수정"이 전형적인 예. while 루프 안에서 모델을 계속 호출하는 구조. Agentic AI 카테고리의 Agent Loop 참고.
파이프라인 — 체이닝의 확장. 여러 단계가 정해진 순서로 실행되고, 각 단계에서 다른 도구와 모델을 쓸 수 있다. CI/CD와 비슷한 개념.
패턴 선택 기준
단순한 질의응답 → 단일 호출로 충분.
품질이 중요한 생성 작업 → 체이닝 (생성 → 검증 → 수정).
다양한 유형의 입력 → 라우팅.
독립적인 대량 처리 → 병렬화.
불확실한 결과, 반복 개선 필요 → 에이전트 루프.
복잡한 다단계 처리 → 파이프라인.
실제로는 이 패턴들을 조합해서 쓴다. Claude Code는 에이전트 루프 안에서 체이닝과 병렬화를 모두 사용한다.
동작 흐름
체이닝 — A의 출력이 B의 입력이 되는 직렬 구조 (생성 → 검증 → 수정)
라우팅 — 입력을 분류해서 적절한 처리 경로로 분기
병렬화 — 독립적인 작업을 동시 실행 (fan-out → 처리 → fan-in)
에이전트 루프 — 목표 달성까지 반복 (while + 모델 호출 + 도구 사용)
파이프라인 — 정해진 순서의 다단계 처리, 각 단계에서 다른 도구/모델 사용