Providers
Provider는 union-cli에서 실제 작업을 수행하는 실행 엔진입니다. 4가지 Provider 타입을 지원하며, 각각 다른 백엔드 시스템과 통신합니다.
Quick Comparison
어떤 Provider를 선택해야 할지 빠르게 비교할 수 있는 표입니다.
| HTTP | CLI | Python | JS | |
|---|---|---|---|---|
| 용도 | REST API 호출 | 외부 CLI 바이너리 래핑 | Python 함수 호출 | Node.js 모듈 호출 |
| 통신 방식 | fetch() | child_process.spawn() | JSON-RPC over stdio | in-process 직접 호출 |
| 응답 속도 | ~50ms+ (네트워크 RTT) | ~100ms+ (프로세스 spawn) | ~10ms (persistent) / ~500ms+ (one-shot) | ~1ms (가장 빠름) |
| 인증 지원 | bearer, basic, jwt, api-key, cookie | N/A | N/A | N/A |
| 대표 사례 | 내부/외부 REST API | kubectl, terraform, docker | ML SDK, 데이터 파이프라인 | 유틸리티 모듈 |
Provider 선택 기준
- REST API가 있다면 → HTTP Provider
- 이미 잘 동작하는 CLI 도구가 있다면 → CLI Provider
- Python 라이브러리/SDK를 사용해야 한다면 → Python Provider
- 최대 성능이 필요하거나 Node.js 모듈이라면 → JS Provider
Provider 개념
모든 Provider는 IProvider 인터페이스를 구현합니다:
interface IProvider {
readonly type: ProviderType; // 'http' | 'cli' | 'python' | 'js'
resolveCommands(manifest: PluginManifest): CommandSpec[];
execute(spec: CommandSpec, input: ExecutionInput): Promise<ExecutionResult>;
healthCheck?(): Promise<HealthCheckResult>;
}
execute(): 커맨드의 args와 flags를 받아 Provider별 방식으로 실행하고ExecutionResult를 반환합니다.healthCheck(): Provider의 연결 상태를 확인합니다 (doctor커맨드에서 사용).
Health Check 방식
| Provider | Health Check 방식 |
|---|---|
| HTTP | baseUrl에 GET 요청 (5초 타임아웃) |
| CLI | {binary} version 또는 --version |
| Python | python3 --version |
| JS | 모듈 import() 시도 |