oto/README.md
toki 365995900e feat(runner): output port 경계 작업을 반영한다
runner 출력 경계 분리의 첫 계약 작업을 완료하고 후속 subtask와 로드맵 상태를 함께 기록한다. workspace 포트와 local smoke 기준도 독립 Control Plane 방향에 맞춰 정리한다.
2026-06-07 13:12:46 +09:00

71 lines
2.8 KiB
Markdown

# OTO Monorepo
YAML 기반 CI/CD 파이프라인 자동화 도구 OTO의 Monorepo 프로젝트입니다.
독립 Control Plane 분리 마이그레이션을 통해 Runner, Client, Core Service로 컴포넌트를 분리하여 관리합니다.
## 프로젝트 구조
```
/
├── apps/
│ ├── runner/ # Dart CLI 기반 OTO Runner (파이프라인 실행 엔진)
│ └── client/ # Flutter 기반 OTO Console Client (독립 제어 콘솔)
├── services/
│ └── core/ # Go 기반 OTO Control Plane Server (Runner Registry & Bootstrap)
└── Makefile # Monorepo 작업을 위한 루트 진입점 Helper
```
## 시작하기
루트 `Makefile`을 통해 모든 서브프로젝트의 의존성 설치, 분석, 테스트 작업을 통합 관리할 수 있습니다.
## Workspace 포트와 환경 기준
OTO는 독립 Control Plane 제품 경로를 기준으로 포트와 환경값을 기록합니다.
iop Edge 또는 wire 포트는 OTO workspace 포트 표준의 source of truth가 아닙니다.
| 표면 | 표준 후보 | 호환 기준 |
|------|-----------|-----------|
| OTO Core HTTP | backend host publish `18020` | 로컬 실행 기본값 `OTO_CORE_ADDR` 미설정 시 `127.0.0.1:8080`은 기존 개발 호환 경로로 유지 |
| Flutter client/web preview | frontend preview `13020` | preview 포트는 UI dev server 포트이며, 서버 연결 URL은 `OTO_SERVER_HTTP_URL`로 별도 지정 |
| runner bootstrap/release | `OTO_RUNNER_RELEASE_BASE_URL` | release base URL은 `https://`만 기록하고, token/credential/private endpoint 원문은 tracked 문서에 남기지 않음 |
Core를 workspace publish 포트로 띄울 때는 `OTO_CORE_ADDR=0.0.0.0:18020`처럼 listen 주소를 명시합니다.
Flutter web preview는 `cd apps/client && flutter run -d chrome --web-port=13020`을 기준 후보로 둡니다.
bootstrap command와 artifact URL 문서는 public validation 기준과 source of truth만 남기고, enrollment token이나 private release host는 런타임 환경에서만 주입합니다.
### 의존성 설치 (Setup)
각 앱/서비스의 패키지 및 모듈 의존성을 설치합니다.
```bash
make setup
```
### 코드 분석 및 린트 (Analyze)
서브프로젝트별 정적 분석을 수행합니다.
```bash
make runner-analyze
make client-analyze
```
### 테스트 실행 (Test)
#### 개별 서브프로젝트 테스트
```bash
make runner-test
make client-test
make core-test
```
#### 통합 테스트 실행 (전체 서브프로젝트)
```bash
make test
```
## 서브프로젝트 상세 안내
각 서브프로젝트의 내부 아키텍처 및 상세 사용 방법은 하위 경로의 README 문서를 참조하세요:
- [OTO Runner README](apps/runner/README.md)
- [OTO Client README](apps/client/README.md)
- OTO Core Server: [services/core/](services/core/)