런타임 레이블 및 라우팅
레이블을 사용하여 필요한 기능에 따라 특정 작업을 런타임이 주장하고 실행할 수 있도록 제어합니다.
런타임 레이블 및 라우팅을 통해 능력 및 요구 사항에 따라 작업에서 런타임으로의 할당을 제어할 수 있습니다. 작업을 만들 때 런타임이 보유해야 할 레이블(OS, 도구 체인, 공급자, 사용자 지정 태그)을 지정할 수 있습니다. 스케줄러는 그런 다음 레이블 세트가 필요한 레이블과 일치하는 런타임에만 작업을 할당합니다.
레이블이 중요한 이유
세 개의 런타임이 있다고 가정하세요:
- macOS 데몬 - Claude 공급자, Docker 없음
- Linux 데몬 - Claude 및 Cursor, Docker 지원, Node.js 20
- Windows 데몬 - Claude 공급자만
"이 에이전트에는 Docker와 Node 20이 필요합니다"라는 작업을 만드는 경우 AACWorkflow는 Linux 데몬에만 제공해야 합니다. 레이블이 없으면 작업이 실수로 macOS 데몬에 할당되어 런타임에 실패합니다.
레이블이 이러한 불일치를 방지합니다.
레이블이란?
레이블은 런타임 기능 또는 속성을 설명하는 키워드입니다:
| 범주 | 예 |
|---|---|
| OS | macos, linux, windows |
| 아키텍처 | arm64, amd64 (x86-64) |
| 도구 체인 | node20, node22, python3.11, go, rust |
| 공급자 | claude, codex, cursor |
| 컨테이너 | docker, podman |
| 사용자 지정 | ci-runner, production, gpu-enabled |
레이블은 대소문자를 구분하지 않으며 kebab-case(소문자 및 하이픈)를 사용합니다.
기능에서 자동 레이블
데몬이 등록될 때 기능을 기반으로 자동으로 레이블을 광고합니다:
- OS 및 아키텍처 -
macos,linux,windows,arm64,amd64 - AI 공급자 -
claude,codex,cursor(설치된 공급자당 하나) - MCP 전송 -
mcp-stdio,mcp-sse,mcp-http
이들은 기능 레이블이며 데몬을 재시작하거나 새 공급자를 설치할 때 자동으로 업데이트됩니다.
자세한 내용은 Runtime capability registry를 참조하세요.
사용자 지정 레이블
자동 기능 레이블 외에도 사용자 지정 레이블을 런타임에 할당하여 AACWorkflow가 자동으로 감지하지 못하는 속성을 설명할 수 있습니다:
- 설정 → 런타임으로 이동합니다
- 런타임을 클릭합니다
- 사용자 지정 레이블로 스크롤합니다
node20,gpu-enabled,ci-runner,production과 같은 레이블을 추가합니다- 저장을 클릭합니다
다음에 사용자 지정 레이블을 사용합니다:
- 도구 체인 버전 -
node20,python3.11,go1.21 - 하드웨어 -
gpu-enabled,high-memory - 목적 -
ci-runner,local-dev,production - 위치 -
us-west,eu-central
작업에 레이블 요구
작업을 만들거나 문제에 에이전트를 할당할 때 필수 레이블을 지정할 수 있습니다. 레이블 세트가 필수 레이블의 슈퍼셋인 런타임만 작업을 주장합니다.
UI를 통해
- 문제/작업 생성 또는 편집
- 런타임 요구 사항 아래에서 레이블 추가 클릭
- 목록에서 레이블 선택(자동 완성, 모든 런타임에서 소싱)
- 예:
docker및node20선택 - 문제/작업 저장
작업은 이제 docker AND node20 레이블이 모두 있는 런타임에서만 실행됩니다.
문제에서 레이블 상속
문제는 모든 작업이 상속하는 기본 필수 레이블을 설정할 수 있습니다:
- 문제 열기
- 문제 설정 → 런타임 요구 사항으로 이동
- 필수 레이블 추가
- 이 문제에 할당된 모든 에이전트는 기본적으로 이 요구 사항을 갖습니다
필요에 따라 작업별로 요구 사항을 재정의할 수 있습니다.
레이블 일치 알고리즘
AACWorkflow는 집합 일치를 사용합니다:
- 작업 필수 레이블:
[docker, node20] - 런타임 레이블:
[macos, arm64, claude, docker, node20, custom-tag] - 일치? 예 - 런타임이 모든 필수 레이블을 가집니다
또 다른 예:
- 작업 필수 레이블:
[docker, gpu-enabled] - 런타임 레이블:
[linux, amd64, claude, docker] - 일치? 아니오 - 런타임이
docker는 있지만gpu-enabled는 없습니다
비어 있는 필수 레이블은 모든 런타임과 일치합니다(제한 없음).
런타임 레이블 보기
UI에서
- 설정 → 런타임으로 이동
- 런타임 클릭
- 기능 레이블(자동) 및 사용자 지정 레이블(수동) 확인
API를 통해
/runtimes/{id} 엔드포인트는 두 집합을 반환합니다:
{
"id": "runtime-123",
"name": "Linux CI runner",
"capability_labels": ["linux", "amd64", "claude", "docker"],
"custom_labels": ["ci-runner", "node20", "python3.11"],
"effective_labels": ["linux", "amd64", "claude", "docker", "ci-runner", "node20", "python3.11"]
}유효 레이블은 스케줄러가 일치에 사용하는 것입니다.
예약 불가능한 작업
작업에 런타임이 가지지 않은 레이블이 필요한 경우 예약 불가능이 됩니다:
- 작업이 대기열에 유지됩니다
- 문제에는 경고가 표시됩니다: "이러한 요구 사항과 일치하는 런타임 없음"
- 작업은 대기합니다 (실패하지 않음) 적절한 런타임이 온라인이 될 때까지
- 7 일 후에 예약 불가능한 작업이 만료되고 미완료로 표시됩니다
해결하려면:
- 작업의 필수 레이블 검토
- 어떤 런타임이 온라인인지 및 어떤 레이블이 있는지 확인
- 둘 중 하나:
- 런타임에 필수 레이블 추가 - 예: 작업이 필요한 경우 Docker 설치
- 레이블 요구 사항 제거 - 작업이 실제로 필요하지 않은 경우
- 필수 기능이 있는 새 런타임 가져오기
최상의 실천 방법
- 간단하게 시작 - 레이블을 과도하게 지정하지 마세요. 자동 기능 레이블에 의존
- 도구 체인에 사용자 지정 레이블 사용 - 지원하는 언어/버전으로 런타임 태그 지정
- 레이블 문서화 - 팀과 레이블 어휘 공유
- 예약 불가능한 작업 검토 - 작업이 큐에 걸려 있으면 레이블 요구 사항을 확인
예제 시나리오
시나리오 1: Docker + 특정 Node 버전
작업: "Node 20 앱에 대해 Docker 빌드 실행"
필수 레이블: docker, node20
결과: 두 레이블이 모두 있는 런타임만 주장합니다.
시나리오 2: ML 추론용 GPU
작업: "ML 추론 작업 실행"
필수 레이블: gpu-enabled
결과: GPU 지원 런타임만 주장합니다. GPU 런타임이 없으면 작업이 대기합니다.
시나리오 3: 프로덕션만 변경
작업: "프로덕션에 배포"
필수 레이블: production
결과: production 태그가 지정된 런타임만 실행할 수 있습니다. 개발 런타임이 제외됩니다.
시나리오 4: 로컬 개발
작업: "로컬에서 테스트 실행"
필수 레이블: (비어있음)
결과: 모든 런타임이 실행할 수 있습니다. AACWorkflow는 가장 적게 로드된 사용 가능한 런타임을 선택합니다.
다음 단계
- Runtime capability registry - 자동 기능 레이블 이해
- Daemon and runtimes - 데몬 및 런타임 아키텍처 학습