AI 워크플로우 패턴 5가지 — 상황에 맞는 설계 고르기
RoundPrep 제4화. 체인으로만 묶었다가 중간 단계에서 매번 끊겼다. “이 문제는 어떤 패턴의 그림으로 그려야 하지?”가 이 글의 출발점이다.
한줄 요약
올바른 패턴 선택이 시스템 복잡도와 비용을 결정한다 — 체인, 병렬, 라우팅, 오케스트레이터-서브에이전트, 평가-최적화 중 문제에 맞는 것을 골라야 한다.
테제
패턴을 고르지 않고 코드부터 쓰면, RoundPrep은 if문 유적지가 된다.
스테이크
박과장은 다이어그램을 원한다. 서진은 “이게 순차야 병렬이야?”를 한 마디로 말할 수 있어야 한다.
전환점 — RoundPrep 메모
팀이 처음 고른 “순차 파이프라인”이 야간 알림 분기에서 깨졌다. 그때 슈퍼바이저·그래프 이야기가 나온다.
본문
패턴이 왜 중요한가
오케스트레이션을 처음 설계할 때 가장 흔한 실수는 “모든 것을 다 연결”하는 것이다. 에이전트를 많이 만들고, 복잡하게 엮고, 대형 시스템처럼 보이게 한다.
결과는 대부분 실망스럽다. 비용은 많이 들고, 오류 발생 지점은 여러 개고, 디버깅은 어렵다.
문제에 맞는 패턴을 고르면 이 반대다. 단순하게 시작하고, 필요할 때 복잡도를 추가한다. 5가지 패턴을 이해하면 새 문제를 만났을 때 “이건 어떤 패턴으로 풀 수 있지?”를 빠르게 판단할 수 있다.
패턴 1 — 체인 (Chain)
가장 단순하다. AI 출력이 다음 AI의 입력이 된다.
[AI 1] → [AI 2] → [AI 3] → 최종 출력
의료 예시: 외래 환자가 증상을 구술한다 → AI1이 구조화된 증상 목록으로 변환 → AI2가 관련 가이드라인을 검색 → AI3가 의사용 요약 작성
언제 쓰나: 각 단계가 이전 단계의 출력만 있으면 충분할 때. 처리 순서가 명확하고 고정일 때.
주의점: 체인이 길수록 초기 오류가 증폭된다. 1단계에서 5% 오류가 생기면 5단계를 거치면서 커진다. 체인은 짧게 유지하는 것이 좋다.
패턴 2 — 병렬화 (Parallelization)
독립적인 태스크를 동시에 실행하고 결과를 합친다.
┌→ [AI A] ─┐
[입력] ─────┤ ├→ [취합] → 출력
└→ [AI B] ─┘
두 가지 방식이 있다:
섹션 병렬화: 큰 작업을 나눠서 동시에 처리한다. 예: 100명 환자 데이터를 10개 그룹으로 나눠서 동시 분석 → 결과 합치기
투표(Voting): 같은 질문을 여러 AI에게 독립적으로 물어본다.
같은 흉부 X-ray를 3개의 AI에게 동시에 판독
→ AI1: "폐렴 의심"
→ AI2: "폐렴 의심"
→ AI3: "정상"
→ 2:1 다수결 → "폐렴 의심"으로 결론
중요한 결정에서 단일 AI 판단보다 신뢰도가 높아진다.
언제 쓰나: 태스크 간 의존성이 없을 때. 속도가 중요할 때. 높은 신뢰도가 필요할 때.
패턴 3 — 라우팅 (Routing)
입력 분류에 따라 다른 처리 경로로 보낸다.
[입력] → [분류기] → {
의학적 질문 → [임상 AI]
응급 상황 → [응급 프로토콜 AI]
행정 문의 → [행정 AI]
처방전 문의 → [약제 AI]
}
의료 예시: 원격진료 플랫폼에서 환자 문의가 들어오면 먼저 분류한다. 의학적 질문인지, 예약 변경인지, 처방전 재발급인지에 따라 전문화된 처리 경로로 보낸다.
언제 쓰나: 다양한 입력 유형이 존재할 때. 각 유형에 최적화된 처리가 필요할 때.
함정: 분류기가 틀리면 잘못된 경로로 간다. 분류기 성능이 전체 시스템의 병목이 될 수 있다. 분류 실패 시 기본 경로(fallback)를 반드시 만들어야 한다.
패턴 4 — 오케스트레이터-서브에이전트 (Orchestrator-Subagents)
중앙 오케스트레이터가 복잡한 태스크를 분해하고 전문 서브에이전트에게 위임한다.
[오케스트레이터]
├→ 서브에이전트 A (태스크 1)
├→ 서브에이전트 B (태스크 2)
└→ 서브에이전트 C (태스크 3)
↓ (결과 수집)
[오케스트레이터] → 통합 → 최종 출력
의료 예시: 복잡한 환자 케이스 종합 평가
- 오케스트레이터: 전체 평가 계획 수립
- 서브에이전트 1: 심혈관 관련 소견 정리
- 서브에이전트 2: 약물 최적화 검토
- 서브에이전트 3: 사회적 요인 및 환경 평가
- 오케스트레이터: 세 결과를 종합해서 다학제 계획 작성
언제 쓰나: 태스크가 사전에 완전히 결정되지 않을 때. 다양한 전문성이 필요할 때. 태스크가 너무 복잡해서 단일 AI로는 컨텍스트 한계에 걸릴 때.
패턴 5 — 평가-최적화 루프 (Evaluator-Optimizer)
AI가 결과를 생성하고, 다른 AI(또는 같은 AI)가 평가하고, 기준 미달이면 개선을 반복한다.
[생성 AI] → [평가 AI] → {
기준 통과 → 출력
기준 미달 → [피드백] → [생성 AI] ← 루프
}
의료 예시: 의무 기록 초안 자동화
- AI1이 구술 내용으로 SOAP 노트 초안 작성
- AI2(평가자): “투약 섹션에 용량이 누락됨, 알레르기 기록 없음”
- AI1: 피드백 반영해서 재작성
- AI2: “기준 충족”
- 의사에게 검토용으로 전달
언제 쓰나: 품질 기준이 명확할 때. 첫 번째 시도가 항상 완벽하지 않을 때.
반드시 필요한 것: 루프 탈출 조건. 평가자가 너무 엄격하거나 기준이 모순적이면 영원히 루프에 갇힌다. 최대 반복 횟수를 설정하고, 그것을 넘기면 현재 최선의 결과를 반환하거나 사람에게 에스컬레이션한다.
패턴 선택 가이드
| 상황 | 추천 패턴 |
|---|---|
| 단계가 명확하고 순서 고정 | 체인 |
| 독립 태스크, 속도/신뢰도 중요 | 병렬화 |
| 입력 유형이 다양 | 라우팅 |
| 복잡한 태스크, 동적 분해 필요 | 오케스트레이터-서브에이전트 |
| 품질 보증, 자동 검토 필요 | 평가-최적화 |
실제 시스템은 이 패턴들을 조합한다. 예를 들어 “라우팅 → 각 경로에서 오케스트레이터-서브에이전트 → 마지막에 평가-최적화”처럼.
패턴 하나로 시작해서 필요할 때 다른 패턴을 추가하는 것이 현명한 접근이다. 처음부터 모든 패턴을 다 쓰면 복잡도만 올라간다.
이 패턴들을 구체적인 코드로 구현하는 LangGraph → LangGraph 입문
역할 기반 팀을 만드는 CrewAI가 어떤 패턴에 해당하는지 → CrewAI 입문
다음 회의 한 줄
서진: “우리는 지금 패턴 이름부터 합의하고 코드는 그다음에 갑시다.”
다음 화
패턴이 정해졌다면 동시에 긁을 수 있는 것부터 줄인다 — 병렬 실행
편집 초안(cu2604021138). 프레임워크·API·임상 규정은 발행일 이후 바뀔 수 있으니 공식 문서와 병원 정책을 기준으로 확인한다.
더 알고 싶다면
🔗 관련 글
- 오케스트레이션이란 — 패턴 선택 전에 알아야 할 기초 개념
- 병렬 실행 — 팬아웃/팬인 패턴을 실제로 적용하는 방법
- LangGraph 입문 — 패턴을 그래프로 구현하는 도구
- 태스크 분해 — 패턴의 기반이 되는 태스크 나누는 방법