Agent Flows V2와 Model Context Protocol 마스터하기

발행: (2025년 12월 13일 오전 04:41 GMT+9)
12 min read
원문: Dev.to

Source: Dev.to

소개

우리 모두 그런 경험을 해봤을 겁니다. 로컬 머신에서 아름답게 동작하는 챗봇을 만들었을 때, 아마도 간단한 RAG(검색‑증강 생성) 시스템일 겁니다. 질문에 답하고, 컨텍스트를 검색하며, 마법처럼 느껴졌죠. 그런데 계산을 하거나, Slack에 메시지를 보내거나, 복잡한 로직에 따라 사용자를 라우팅하려고 하면, 선형 체인이 깨집니다. 마법은 스파게티 코드와 부서지기 쉬운 API 접착제로 변해버립니다.

단순한 대형 언어 모델(LLM) 체인에서 자율 에이전트로의 전환은 현재 AI 사이클을 정의하는 변곡점입니다. Flowise 버전 2(V2)는 이러한 시스템을 설계하는 방식에 있어 중요한 아키텍처 도약을 의미합니다. 경직된 선형 의존성에서 동적이고 상태‑인식적인 에이전시 워크플로우로 이동하는 것이죠.

버전 1이 진주를 꿰어‑프롬프트 → 모델 → 출력 연결에 초점이 있었다면, 버전 2는 도구들의 신경망을 구축하는 것입니다. 인터페이스는 익숙해 보일 수 있지만, 로직은 근본적으로 바뀌었습니다. V2에서 가장 큰 차별점은 에이전트의 의사결정 과정에 대한 제어 granularity(세분화)입니다. 이제 우리는 단순히 프롬프트를 보내는 것이 아니라 작업 공간을 오케스트레이션합니다.

V2 워크플로우의 구조

시작 노드 및 입력 전략

진입점은 더 이상 단순한 텍스트 박스가 아닙니다. Form Input 스키마를 정의할 수 있습니다. 예를 들어, LLM이 작동하기 전에 “직업이 있나요?”와 같은 질문을 불리언이나 옵션 선택기로 사용자에게 물어 구조화된 데이터를 강제할 수 있습니다. 이 구조화된 데이터는 변수(예: job)가 되어 확률적인 AI 로직이 작동하기 전, 결정론적인 프로그래밍 로직을 가능하게 합니다.

에이전트 노드

이것이 실행 기능입니다. OpenAI의 gpt‑4o‑mini든 다른 모델이든, 에이전트 노드는 단순히 텍스트를 생성하는 것이 아니라 어떤 도구를 사용할지 결정합니다. Tools 입력에 연결되며, 계산기부터 맞춤형 API 통합까지 무엇이든 될 수 있습니다.

조건문 및 로직

V2는 Condition Node(변수 기반 표준 if/else 로직)와 Condition Agent에서 빛을 발합니다. 후자는 LLM을 활용해 “순차적 사고”를 수행하고, 사용자의 의도를 분석해 동적으로 다른 경로로 라우팅합니다.

루프 노드

종종 간과되지만, 루프 노드는 반복적인 정제를 가능하게 합니다. 에이전트가 자신의 추론 과정을 n번 반복하도록 강제함으로써 자기‑수정, 즉 원시적인 “System 2” 사고를 구현할 수 있습니다.

스티키 노트로 혼란 관리

스티키 노트는 사소해 보일 수 있지만, 프로덕션 환경에서 “Calculator Agent”, “Slack Logic”과 같이 노드 클러스터에 라벨을 붙이는 것은 유지보수에 필수적입니다.

MCP 약속 vs. 현재 현실

이 생태계에서 가장 중요한 기술 업그레이드는 Model Context Protocol (MCP) 지원입니다. 이전에는 LLM을 외부 도구와 연결하려면 맞춤 JavaScript 함수나 독점 통합이 필요했습니다. MCP는 이를 표준화합니다—AI 에이전트 세계의 USB‑C와 같은 존재죠.

지원되는 MCP 도구 (예시)

  • Brave Search – 실시간 웹 접근
  • Slack – 메시지 읽기 및 쓰기
  • Postgres – 데이터베이스 연동
  • Filesystem – 로컬 디렉터리 읽기

현재 병목 현상

현재 Flowise V2에서는 npx를 사용해 MCP 서버를 실행하는 일반적인 빠른 배포 방법이 종종 실패하거나 지원되지 않습니다. 우리는 node‑based 실행에 제한되어 있어, GitHub 레포에 포인팅하고 npx가 맞춤형 MCP 도구 노드의 종속성을 해결하도록 할 수 없습니다.

슈퍼 게이트웨이 솔루션

npx 제한에도 불구하고 MCP를 활용하려면 Super Gateway를 Server‑Sent Events(SSE)를 통해 사용합니다.

  1. Flowise 컨테이너 외부에서 MCP 서버를 실행합니다(예: n8n 같은 자동화 플랫폼 내부).
  2. MCP 서버를 SSE 엔드포인트로 노출합니다.
  3. Flowise에 해당 엔드포인트를 설정합니다:
# Example configuration
SSE: "https://your-mcp-server.example.com/sse"

이 우회 방법을 통해 Flowise 에이전트는 n8n에 정의된 도구(Google Sheets, 맞춤 HTTP 요청, 날씨 API, 금융 데이터 등)를 마치 네이티브 함수처럼 사용할 수 있습니다. 흐름이 “Apple에 대한 최신 뉴스가 뭐야?”라고 물으면, 에이전트는 게이트웨이를 통해 Brave Search MCP를 호출해 링크를 가져오고, 답변을 합성하며 출처를 인용합니다. 추상화 레이어는 완전히 투명합니다.

장기 메모리 및 벡터 데이터베이스

운영 중인 에이전트는 지속적인 메모리가 필요합니다. 간단한 상호작용은 메모리 버퍼에 의존할 수 있지만, 프로덕션 급 구현은 견고한 벡터 데이터베이스가 요구됩니다. 권장 전환은 일시적인 저장소에서 Postgres(Supabase 활용)로 이동하는 것입니다.

인제스트 파이프라인

단계권장 도구
LoaderPDF 로더
SplitterRecursive Character Text Splitter (청크 크기 = 1000, 오버랩 = 200)
Embeddingstext‑embedding‑3‑small (또는 유사 모델)
Vector StorePostgres에 벡터 업서트

레코드 매니저

레코드 매니저(SQLite 또는 Postgres)는 콘텐츠 해시를 추적해 중복 임베딩을 방지합니다. 이 없이 인제스트를 실행하면 청크가 중복 저장돼 데이터베이스가 팽창하고 검색 품질이 저하됩니다. “33 documents skipped”와 같은 멱등성 메시지는 정상적인 중복 제거를 의미합니다.

에이전트가 “강아지 트레이너의 세 가지 카테고리는?”이라고 물으면, Postgres 스토어에서 관련 청크를 가져와 투명하게 출처 문서를 반환하도록 구성할 수 있습니다.

임시 스토리지 함정

localhost:3000에서 개발하는 것은 편리하지만, 사일로를 만들게 됩니다. 클라이언트나 원격 팀원이 접근하도록 하려면 배포가 필요합니다.

Render는 Flowise를 호스팅하기에 최적의 환경이지만, 무료 티어는 임시 스토리지를 사용합니다. 영구적이고 전문적인 인스턴스를 위해서는 Persistent Disks를 지원하는 플랜(보통 “Starter” 플랜)으로 업그레이드해야 합니다.

구성 변수

호스팅 플랫폼에 다음 환경 변수를 정의하세요:

FLOWISE_USERNAME=your_username
FLOWISE_PASSWORD=your_password
DATABASE_PATH=/opt/render/flowise/.flowise   # 영구 마운트
APIKEY_PATH=/opt/render/flowise/apikeys      # 도구 인증 정보
SECRETKEY_PATH=/opt/render/flowise/secretkey # 암호화 키
LOG_PATH=/opt/render/flowise/logs

배포 체크리스트

  1. Repo 포크 – GitHub에 Flowise 레포를 복제합니다. 업데이트(예: npx 지원 수정)를 받기 위해 upstream과 동기화 상태를 유지하세요.
  2. Web Service 생성 (Render) – GitHub 포크를 연결합니다.
  3. 플랜 선택 – 디스크 마운트를 활성화하려면 “Starter” 플랜을 선택합니다.
  4. 디스크 마운트 – 디스크(보통 1 GB 충분) 를 /opt/render/flowise에 매핑합니다.
  5. 환경 변수 설정 – 위에 나열된 경로와 인증 정보를 입력합니다.
  6. 배포 – 로그를 모니터링하고, 서비스가 살아나면 전 세계에서 접근 가능한 URL이 제공됩니다.

호스팅이 완료되면, 에이전트는 단순 도구를 넘어 제품이 됩니다.

프론트엔드 통합

  • HTML/Script Tag – 웹페이지 <head>에 간단한 JS 스니펫을 삽입해 플로팅 채팅 버블을 생성합니다.
  • React/Full Page – 깊은 통합을 위해 React 컴포넌트를 사용합니다.
  • API/Curl – Python 등 백엔드에서 HTTP 요청으로 에이전트를 프로그래밍 방식으로 호출합니다.

커스터마이징 폭이 넓습니다: “Start Chatting” 버튼, 환영 메시지, 색상 스키마 등을 임베딩 설정 JSON으로 수정하면 백엔드 로직(Flowise 흐름)과 프론트엔드 프레젠테이션을 분리할 수 있어, 에이전트 로직을 업데이트해도 클라이언트 웹사이트를 재배포할 필요가 없습니다.

Flowise V2로의 전환과 Model Context Protocol 도입은 단순한 기능 업데이트가 아니라, 새로운 **)

Back to Blog

관련 글

더 보기 »

RAG 청크 전략 심층 분석

Retrieval‑Augmented Generation(RAG) 시스템은 근본적인 과제에 직면합니다: LLM은 컨텍스트 윈도우 제한이 있지만, 문서는 종종 이 제한을 초과합니다. Simply stuffi...