Multi-Agent 18

Router 패턴, 특정 시나리오를 넘어 범용적 아키텍처로

Router 예제가 고객센터에만 쓰이는 특수한 구조로 보일 수 있다.

근거 · 교안 p69-p72

Router 패턴, 특정 시나리오를 넘어 범용적 아키텍처로 대표 이미지

1장: 자소서 예시, 그 이상의 Router?

솔라는 노트북 화면에 떠 있는 다이어그램을 보며 미간을 찌푸렸다. 스터디 자료에 있던 ‘AI 자기소개서 컨설턴트’ 아키텍처였다. 사용자가 자기소개서를 입력하면, 시스템이 내용을 요약하고 강점과 약점을 분석한다. 그 다음 ‘라우터(Router)’라는 모듈이 등장해 ‘성장 과정’, ‘지원 동기’, ‘직무 역량’ 같은 질문 분야를 선택하고, 각 분야에 특화된 여러 에이전트(Agent)가 동시에 질문을 생성해 최종 결과를 보여주는 흐름이었다.

깔끔하고 효율적으로 보였다. 하지만 솔라의 마음속에는 작은 의문이 가시처럼 박혀 있었다. ‘결국 이건 너무 뻔한 상황 아닌가?’

“언니, 이 라우터라는 거 말이야.”

옆에서 조용히 책을 읽던 루나가 고개를 들었다.

“자기소개서 예시를 보니까, 라우터는 결국 교통경찰 같아. ‘성장 과정’은 1번 길, ‘지원 동기’는 2번 길. 이렇게 표지판이 명확한 사거리에서나 필요한 존재 아닐까? 처음부터 갈림길이 명확하게 정해져 있는 곳에서만 쓸 수 있는, 좀 특수한 구조 같아서.”

솔라는 자신의 생각을 덧붙였다. 고객센터의 문의 유형처럼, 입력의 종류가 손에 꼽을 수 있을 정도로 예측 가능할 때만 유용할 것이라는 확신이 섞인 목소리였다.

루나는 솔라의 말을 잠자코 듣더니, 책갈피를 끼워 책을 덮었다. 그리고는 솔라의 노트북 화면을 가리키는 대신, 다른 질문을 던졌다.

“그 교통경찰을 완전히 낯선 곳에 데려다 놓으면 어떨까? 예를 들어, 온갖 물건을 파는 대형 온라인 쇼핑몰의 고객센터라고 해보자. 거기서도 똑같이 교통정리를 할 수 있을까?”

“쇼핑몰 고객센터?”

솔라는 잠시 상상에 잠겼다. 자기소개서 대신 고객들의 불만 섞인 메시지가 쏟아져 들어오는 상황.

“음… 거기도 갈림길은 있겠지. ‘환불 요청’, ‘배송 문의’, ‘결제 오류’, ‘제품 불량’ 같은 거. 만약 고객이 ‘어제 주문한 신발 환불해주세요’라고 명확하게 보내면, 라우터가 ‘환불 처리팀’으로 보내주면 되겠네. 자소서 예시랑 똑같잖아. 쉽지 뭐.”

솔라의 목소리에는 ‘내 생각이 맞았어’라는 안도감이 살짝 묻어났다. 하지만 루나는 거기서 멈추지 않았다.

“만약 고객의 메시지가 이거라면?”

루나는 가상의 메시지를 읊었다.

“‘이틀 전에 받은 옷, 사진이랑 색깔이 너무 달라요. 그리고 같이 주문한 책은 언제 오는 거예요? 상담원 연결은 왜 이렇게 어렵죠? 정말 최악이네요.’”

순간 솔라의 눈썹이 꿈틀했다.

“어… 이건…”

솔라의 자신감 있던 목소리가 머뭇거리기 시작했다. 환불 문제인가? 배송 지연? 아니면 상담 서비스에 대한 불만? 여러 가지 문제가 한 문장에 뒤엉켜 있었다. 자기소개서 문단을 보고 ‘이건 성장 과정에 대한 내용’이라고 깔끔하게 분류하던 것과는 차원이 달랐다.

“하나로 딱 정하기가 애매한데. 환불팀으로 보내야 할지, 배송팀으로 보내야 할지… 아니면 전부 다 처리할 수 있는 상급 상담사한테 보내야 하나? 이래서는 라우터가 길을 안내할 수가 없잖아. 역시 라우터는 명확한 상황에서만 쓸 수 있는 거 아니야?”

솔라는 자신의 처음 생각으로 되돌아가려 했다. 이 복잡한 상황은 라우터가 활약할 무대가 아니라는 결론이었다.

“바로 그 지점이야.”

루나가 말했다.

“네가 지금 ‘어디로 보내야 할지’를 고민하고 있잖아. 그게 바로 라우터가 할 일의 본질이야. 자기소개서 예시에서는 ‘성장 과정’, ‘지원 동기’ 같은 잘 닦인 도로명이 분기 기준이었지. 방금 우리가 상상한 고객센터에서는 ‘고객의 가장 시급한 불만’이나 ‘가장 핵심적인 의도’가 그 기준이 될 거야.”

루나는 솔라의 노트북을 자기 쪽으로 살짝 돌려, 자기소개서 다이어그램의 ‘Router’라고 적힌 상자를 손가락으로 가볍게 두드렸다.

“라우터의 역할은 ‘자기소개서 질문 분야를 나눈다’는 특정 작업에 묶여있지 않아. ‘입력을 분석해서, 정해진 기준에 따라 가장 적절한 다음 단계로 작업을 넘긴다’는 역할 그 자체가 핵심인 거지. 도로명은 바뀔 수 있어. 쇼핑몰이 될 수도 있고, 병원이 될 수도 있고, 법률 상담이 될 수도 있겠지. 하지만 어떤 상황이든 교통경찰의 역할, 즉 ‘분기’라는 행위는 변하지 않아.”

솔라는 루나의 손가락 끝에 놓인 ‘Router’ 상자와 방금 머릿속을 어지럽혔던 복합적인 고객 문의를 번갈아 보았다. 그제야 라우터라는 개념이 자기소개서라는 특정 예시의 울타리를 넘어 빠져나오는 듯했다. 라우터는 특정 목적지의 이름표가 아니라, 어떤 목적지든 찾아갈 수 있도록 방향을 가리키는 나침반에 더 가까웠다.

“아… 그러니까 라우터의 진짜 역할은 ‘어떤 종류의 질문을 만들지 선택하는 것’이 아니라, 그냥 ‘길을 찾아주는 것’ 그 자체구나. 어떤 길로 나눌지는 우리가 그 상황에 맞게 정해주면 되는 거고.”

편협한 정의에 갇혀 있던 개념이 시야를 넓히자, 새로운 궁금증이 고개를 들었다. 솔라는 조금 전과는 다른 종류의 질문을 떠올렸다.

“그런데 언니, 굳이 이렇게 길을 나눠야 하는 이유가 뭐야? 그냥 아주 똑똑한 에이전트 한 명이 처음부터 끝까지 다 처리하면 안 되나?”

2장: Single Flow의 한계, Router의 필요성

솔라의 질문에 루나는 대답 대신 옆에 놓인 메모장을 집어 들었다. 그녀는 펜으로 큼직한 사각형 하나를 그리고, 그 안에 ‘만능 해결사 에이전트’라고 적었다. 솔라가 방금 말한 ‘아주 똑똑한 에이전트 한 명’을 시각화한 것이다. 이어서 루나는 사각형 위쪽에 두 개의 화살표를 그렸다. 하나는 ‘감정이 섞인 고객 문의’라고, 다른 하나는 ‘건조한 기술 문서’라고 이름 붙였다. 두 화살표 모두 ‘만능 해결사 에이전트’라는 단 하나의 상자로 향하고 있었다.

루나가 펜을 내려놓자, 솔라는 그 그림을 보고 고개를 끄덕였다.

“응, 바로 이거야. 내 생각은. 굳이 길을 나눌 필요 없이, 저 만능 해결사한테 모든 상황에 대처할 수 있는 아주 상세하고 긴 지침을 주는 거지. ‘고객이 화가 났을 땐 공감하는 말투로 응대하고, 기술 문서 요약을 요청하면 핵심만 간결하게 정리해’ 이런 식으로. 요즘 AI가 워낙 똑똑하니까, 문맥을 보고 알아서 역할을 바꾸면 되잖아?”

솔라의 목소리에는 합리적인 대안을 찾았다는 확신이 묻어났다. 그녀에게 이 ‘만능 해결사’ 구조, 즉 단일한 흐름(Single Flow)으로 모든 것을 처리하는 방식은 훨씬 직관적이고 간단해 보였다. 복잡하게 길을 나누는 것보다 똑똑한 한 명에게 전부 맡기는 편이 깔끔하지 않은가.

“그럼 그 만능 해결사는 항상 두 가지 역할을 동시에 수행할 준비를 하고 있어야겠네.”

루나가 메모장 위의 그림을 톡톡 건드리며 말했다.

“여기, 최고의 요리사이면서 동시에 세계적인 자동차 정비사인 사람이 있다고 상상해 보자. 우리가 그 사람에게 샌드위치 하나를 만들어 달라고 부탁했어. 그런데 그가 요리를 시작하기 전에, 작업대 위에 스패너와 엔진오일, 타이어 렌치를 전부 꺼내놓고 시작한다면 어떨까?”

“그건 좀… 비효율적이지. 샌드위치 만드는 데 스패너는 전혀 필요 없으니까.”

솔라는 루나의 비유를 곱씹다가 순간 멈칫했다. 그녀의 눈이 커졌다.

“아…! 알겠다. 내가 기술 문서를 요약해 달라고 요청했을 뿐인데, 이 만능 에이전트는 ‘화난 고객을 응대하는 매뉴얼’까지 머릿속에 전부 펼쳐놓고 있는 거구나. 불필요하게.”

“바로 그거야. 그리고 그 불필요한 매뉴얼이 전부 LLM에게 보내는 프롬프트의 일부라고 생각해 봐.”

루나의 설명이 이어졌다.

“우리는 LLM을 호출할 때마다 프롬프트의 길이에 비례해 비용을 지불해야 해. 작업과 관련 없는 정보가 많아질수록 응답 속도는 느려지고 비용은 계속 올라가지. 심지어 더 큰 문제가 있어. 만약 여기에 ‘신제품 아이디어 제안’ 기능까지 추가한다면? 그땐 정비 도구와 요리 도구에 더해 브레인스토밍 도구까지 항상 꺼내 둬야 하는 거야. 이 ‘만능 해결사’는 점점 더 무겁고, 비싸고, 다루기 힘든 존재가 되어버릴 거야.”

루나는 메모장의 다음 페이지를 넘겨 새로운 그림을 그리기 시작했다. 이번에는 작은 ‘교통경찰’ 상자가 먼저 등장했다. 그리고 그 뒤로 ‘고객 응대 전문가’와 ‘기술 문서 분석가’라는 두 개의 작은 전문 에이전트 상자가 나란히 놓였다. 모든 화살표는 먼저 교통경찰에게 향했고, 교통경찰이 각 화살표를 알맞은 전문가에게 연결해 주었다.

솔라는 두 그림을 번갈아 보았다. 첫 번째 그림 속, 온갖 연장을 들고 쩔쩔매는 만능 해결사의 모습과 두 번째 그림 속, 각자 자기 연장만 들고 깔끔하게 대기하는 전문가들의 모습이 겹쳐졌다.

“아… 라우터는 그냥 보기 좋으라고 길을 나누는 게 아니었구나.”

솔라가 나지막이 중얼거렸다.

“애초에 모든 걸 다 잘하는 해결사는 비효율적이니까, 처음부터 각자 자기 일만 잘하는 전문가들을 따로 두는 거였어. 라우터는 그저 가장 적합한 전문가에게 일을 보내주는 거고. 이게 훨씬 효율적이네.”

그녀는 이제 라우터가 단순히 특정 시나리오의 기능이 아님을 깨달았다. 그것은 시스템 전체를 더 효율적이고, 저렴하며, 앞으로 새로운 기능이 추가되더라도 쉽게 확장할 수 있도록 만드는 근본적인 ‘설계’의 문제였다. 라우터는 복잡한 과정을 나누는 도구가 아니라, 비효율이라는 근본적인 문제를 해결하는 하나의 구조적 해법이었던 것이다.

새로운 이해는 곧 새로운 질문을 낳았다.

“알겠어, 언니. 왜 길을 나눠야 하는지는 이제 확실히 알겠어. 그런데 저 교통경찰, 그러니까 라우터는 도대체 자기가 뭘 보고 판단하는 거야? ‘이건 고객 문의고, 저건 기술 문서야’라고 구분하는 기준은 뭐고, 어떻게 그렇게 정확하게 분류해서 넘겨주는 거지?”

3장: Router 동작 원리와 설계 전략

솔라의 질문은 허공에 잠시 머물렀다. 루나는 대답 대신, 솔라가 이전에 만능 해결사와 전문가들의 비효율성을 비교하기 위해 사용했던 메모장을 가져왔다. 그리고 깨끗한 새 페이지를 펼쳐 솔라 앞에 놓아주었다.

“네가 아까 말한 그 교통경찰, 직접 한번 설계해 볼까? 우리가 상상했던 그 복잡한 쇼핑몰 고객센터의 교통경찰 말이야.”

솔라는 잠시 망설이다 펜을 집어 들었다. 그녀는 페이지 중앙에 ‘라우터’라고 적힌 사각형을 그렸다. 그리고 그 주변으로 ‘환불 전문가’, ‘배송 전문가’, ‘상담 품질 불만 처리’라는 세 개의 상자를 더 그렸다. 마지막으로, ‘고객 문의’라는 화살표가 라우터 상자를 향하도록 그렸다. 그림은 그럴듯했지만, 솔라의 펜은 이내 라우터 상자 위에서 멈췄다. 무엇을 더 그려야 할지 막막했다.

“여기서… 뭘 어떻게 해야 할지 모르겠어.”

솔라는 결국 펜을 내려놓으며 말했다.

“‘이틀 전에 받은 옷, 사진이랑 색깔이 너무 달라요. 그리고 같이 주문한 책은 언제 오는 거예요?’라는 문의가 들어왔다고 치자. 라우터가 이 문장을 보고, ‘환불 전문가’와 ‘배송 전문가’ 둘 다에게 보내야 하나? 아니면 둘 중 하나를 선택해야 하나? 선택한다면 기준이 뭐야? 그냥 문장에 ‘환불’이나 ‘배송’ 같은 단어가 더 많이 나오면 그쪽으로 보내는 건가? 너무 주먹구구식인데.”

솔라는 자신이 그린 다이어그램을 보며 한숨을 쉬었다. 자기소개서 예시에서는 ‘성장 과정’이나 ‘지원 동기’처럼 분기점이 명확했지만, 현실의 문제는 이렇게 뒤죽박죽이었다. 이래서는 라우터가 제대로 작동할 리 없다고 생각했다.

“교통경찰이 운전자의 얼굴만 쓱 보고 길을 안내하지는 않지.”

루나가 솔라의 펜을 집어 들었다. 그녀는 솔라가 그린 ‘라우터’ 상자 안의 텅 빈 공간을 가리켰다.

“이 상자 안이 너무 비어있어. 라우터는 마법 상자가 아니야. 명확한 절차를 따르는 작은 공장에 더 가까워.”

루나는 ‘라우터’ 상자 안에 작은 흐름도를 그리기 시작했다. 첫 번째 단계로 작은 사각형을 그리고 ‘① 입력 분석’이라고 적었다.

“첫 단계는 들어온 요청을 해부하는 거야. ‘옷 색깔이 다르다’는 건 ‘제품 품질 불만’이고, ‘책이 언제 오냐’는 건 ‘배송 지연 문의’라는 식으로, 문장의 표면이 아니라 그 안에 담긴 진짜 ‘의도’를 파악하는 거지.”

이어서 루나는 두 번째 사각형을 그리고 ‘② 분기 조건 판단’이라고 적었다.

“분석이 끝나면, 우리가 미리 정해둔 규칙집을 펼쳐보는 단계야. 예를 들어, 우리 고객센터의 규칙집에 이렇게 적혀 있다고 해보자.”

루나는 흐름도 옆에 작은 글씨로 규칙을 써 내려갔다.

  • 규칙 1: ‘제품 불만’ 의도가 있고 ‘배송 지연’ 의도가 없으면 -> ‘환불 전문가’에게 전달
  • 규칙 2: ‘제품 불만’ 의도가 없고 ‘배송 지연’ 의도가 있으면 -> ‘배송 전문가’에게 전달
  • 규칙 3: ‘제품 불만’과 ‘배송 지연’ 의도가 모두 있으면 -> ‘상급 상담사’에게 전달

“아까 그 복잡한 문의는 규칙 3번에 해당하겠네. 그럼 라우터는 망설일 필요 없이 ‘상급 상담사’를 호출하는 거야. 이게 세 번째 단계, ‘③ 적절한 전문가 호출’이지.”

솔라의 눈이 동그래졌다. 텅 비어 있던 검은 상자 같던 라우터의 내부가 체계적인 시스템으로 채워지는 순간이었다. 라우터는 눈치나 감으로 일하는 게 아니었다. 철저히 설계된 규칙에 따라 움직이는 논리적인 기계였다.

“한 가지만 더.”

루나는 규칙 목록 맨 아래에 새로운 항목을 추가했다.

  • Fallback: 위의 어떤 규칙에도 해당하지 않으면 -> ‘일반 문의팀’으로 전달

“만약 규칙집에 없는, 완전히 새로운 유형의 문제가 들어오면 어떻게 해야 할까? 라우터가 아무것도 못 하고 멈춰버리면 안 되잖아. 이럴 때를 대비한 비상 통로가 바로 ‘Fallback’ 경로야. 어떤 길로 가야 할지 모를 때 일단 보내는 곳이지.”

솔라는 고개를 끄덕였다. 그녀는 루나가 완성한 라우터 내부의 흐름도와 분기 규칙을 한참 동안 들여다보았다. 이제 라우터는 더 이상 특정 시나리오에 갇힌 특수한 도구가 아니었다. 어떤 문제든 해결할 수 있는, 잘 짜인 ‘설계 패턴’ 그 자체로 보였다. 자기소개서 예시는 단지 이 설계도에 ‘성장 과정’, ‘지원 동기’라는 규칙을 적용한 하나의 사례에 불과했다.

“알겠다…”

솔라는 루나에게서 펜을 돌려받았다. 그녀는 자신이 처음 그렸던 ‘환불 전문가’, ‘배송 전문가’ 상자 옆에 ‘상급 상담사’와 ‘일반 문의팀’ 상자를 추가했다. 그리고 방금 배운 대로, 라우터 상자 안에 ‘입력 분석’과 ‘분기 조건 판단’이라는 절차를 명확히 그려 넣었다.

더 이상 펜은 망설이지 않았다. 솔라는 이제 어떤 복잡한 문의가 들어와도, 어떤 규칙에 따라 어디로 보내야 할지 자신 있게 설명할 수 있었다. 그녀는 방금 완성한 자신만의 작은 시스템 설계도를 보며 나지막이 말했다.

“결국 중요한 건 길의 이름이 아니라, 어떤 상황에서 어떤 길로 보낼지 정하는 ‘규칙’을 만드는 거였어. 이 설계도만 있으면, 어떤 문제가 와도 길을 찾아줄 수 있겠네.”