MCP 기반 지능형 알림 시스템 구축
비즈니스 배경 및 과제
데이터 제품에서 생성된 리포트 모니터링 작업에서 FBI 시스템은 다음과 같은 한계를 보였습니다:
- 표 형식 데이터를 Excel로만 내보내야 하며 프로그래밍 처리가 복잡
- 특정 조건 충족 시 선택적 알림 기능 부재
- 가공된 지표(예: 일간 변동률) 추출 불가
MCP 표준 프로토콜
MCP(Model Context Protocol)는 LLM이 외부 도구를 안전하게 사용할 수 있는 표준 인터페이스를 제공합니다. 주요 구성 요소:
# MCP 클라이언트 초기화 예제
from mcp_client import MCPClient
client = MCPClient(
protocol="streamablehttp",
endpoint="https://tool-service/api",
auth_key="secure_token"
)
기존 Function Calling과의 차이점:
- 벤더 중립적 표준으로 Anthropic, OpenAI 등 크로스 플랫폼 호환
- STDIO/StreamableHttp 통신 모드 지원
- 커뮤니티 도구 지속 확장(예: modelscope 라이브러리)
브라우저 자동화 구현
Playwright-MCP 서버를 활용한 웹 상호작용:
// Playwright 도구 호출 예시
const actions = [
{ command: "navigate", url: "https://report-portal" },
{ command: "resize", width: 3840, height: 2160 },
{ command: "extract_table", selector: "#data-grid" }
];
시스템 아키텍처
에이전트 작업 흐름:
- 크론 작업 트리거
- 데이터베이스에서 시나리오 메타데이터 조회
- Playwright-MCP 통해 웹 데이터 수집
- 결과를 JSON 형식으로 변환
- DingTalk API로 알림 전송
최적화 방안
- 브라우저 창 크기 3840x2160으로 고정
- 실패 시 3회 재시도 후 작업 중단
- 작업 완료 후 반드시 브라우저 인스턴스 종료
배치 태스크 생성 시스템
하이브리드 처리 아키텍처
엔지니어링과 에이전트의 협업 방식:
def process_tasks(excel_data):
# 엔지니어링 처리: 데이터 정규화
normalized = normalize_data(excel_data)
# 에이전트 호출: 시맨틱 매칭
task_mapping = agent_match_tasks(normalized)
# 엔지니어링 처리: 작업 생성
create_batch_tasks(task_mapping)
성능 개선 전략
- 50개 작업을 5개 그룹으로 분할 처리
- 비동기 방식으로 응답 대기 시간 단축
- Redis에 중간 결과 캐싱
기술 선택 가이드라인
| 영역 | 에이전트 적합도 | 엔지니어링 적합도 |
|---|---|---|
| 자연어 이해 | 높음 | 낮음 |
| 규칙 기반 처리 | 낮음 | 높음 |
| 대규모 데이터 처리 | 낮음 | 높음 |
| 비정형 작업 | 높음 | 중간 |
에이전트는 확률 기반 솔루션이므로 다음 원칙이 적용됩니다:
- 토큰 비용이 높은 작업은 엔지니어링으로 처리
- 실패 시 3회 재시도 후 작업 중단
- 작업 완료 후 반드시 브라우저 인스턴스 종료