에이전틱 폴리레포 개발을 위한 누락된 워크스페이스 레이어
Source: Dev.to
번역을 진행하려면 번역하고자 하는 전체 텍스트를 제공해 주세요. 텍스트를 주시면 요청하신 대로 한국어로 번역해 드리겠습니다.
문제 개요
코딩 에이전트는 하나의 저장소에서 사양을 기능으로, 그리고 작업 중인 PR까지 단일 흐름으로 처리할 수 있습니다—이 부분은 기본적으로 해결되었습니다.
하지만 엔드‑투‑엔드로 기능을 구현한다는 것은 보통 여러 저장소에 걸쳐 작업한다는 의미입니다. 다음과 같은 작업이 필요합니다:
- 전체 저장소에 걸친 아키텍처 이해 – 코딩 표준, 서비스 간 관계, 연결 방식 등을 파악합니다.
- 브랜치 조정 – 변경 사항에 포함된 모든 저장소에서 동일한 기능 브랜치를 유지합니다.
- 크로스‑저장소 검증 – 테스트를 실행하고 상태를 확인하며, 단일 체크아웃에 국한되지 않고 전체 스택을 검증합니다.
단일 저장소에서는 에이전트가 이러한 작업을 자연스럽게 처리합니다. 하지만 여러 저장소에 걸쳐서는 각 저장소마다 컨텍스트를 수동으로 설정하고, 브랜치를 하나씩 만들고, 터미널을 전환하면서 검증해야 하는 불편함이 발생합니다.
워크스페이스 레이어
Mars는 모든 레포가 하나의 트리 아래에 존재하는 워크스페이스를 생성합니다:
workspace/
├── .claude/ # or .cursor/, .aider.conf — any agent config
├── CLAUDE.md # shared context: architecture, standards, patterns
├── mars.yaml # workspace definition
└── repos/
├── backend-api/
├── frontend-app/
├── shared-lib/
└── infra/
- 워크스페이스 루트에 있는 에이전트 구성은 모든 레포에 상속됩니다.
- 에이전트를 한 번 설정하면—아키텍처 개요, 코딩 표준, 서비스 관계—각 레포가 자동으로 해당 컨텍스트를 받습니다. 레포별 중복이 없습니다.
Mars는 그 위에 구조 와 교차 레포 작업을 제공합니다.
Mars와 코딩 에이전트와 함께하는 하루
아침 동기화
mars sync # pull latest across all repos
mars status # one table: every repo's branch, dirty state, ahead/behind
기능 시작
mars branch feature-auth --tag backend # coordinated branch across backend repos
에이전트는 워크스페이스‑레벨 설정에서 전체 아키텍처 컨텍스트를 이미 가지고 있으므로, 서비스 간 관계, 코딩 표준, 그리고 따라야 할 패턴을 모든 레포지토리에서 파악합니다.
검증
mars exec "npm test" --tag frontend # targeted tests on frontend repos
mars status # which repos changed? any drift?
리뷰 및 병합
표준 git/GitHub 도구를 사용하세요. Mars가 워크스페이스를 조정하고, 나머지 워크플로우는 그대로 유지됩니다.
Source:
워크스페이스 자체가 Git 저장소가 될 수 있습니다
git clone git@github.com:org/platform-workspace.git
cd platform-workspace
mars clone # mars.yaml에 정의된 모든 저장소를 복제합니다
# 완료 — 공유 에이전트 설정과 모든 저장소가 포함된 전체 워크스페이스가 준비됩니다
mars.yaml및 에이전트 설정을 버전 관리합니다.- 모든 개발자(또는 CI 작업)는 해당 저장소를 하나만 복제하고
mars clone을 실행하면 두 명령만으로 완전하게 부트스트랩된 워크스페이스를 얻을 수 있습니다. - 팀 온보딩: 몇 분 안에 생산성을 확보하고, 몇 시간은 걸리지 않습니다.
- CI 환경: 교차 저장소 검증을 설정하기 위해 동일한 두 명령만 사용합니다.
- 표준화: 어떤 저장소가 함께 묶여야 하는지, 에이전트가 어떻게 동작해야 하는지에 대한 단일 진실 소스를 제공합니다.
이렇게 하면 Git 히스토리, CI 파이프라인, 릴리스 주기와 결합하지 않으면서도 모노레포와 같은 공유 컨텍스트와 재현성을 얻을 수 있습니다.
태그 기반 필터링
mars.yaml의 모든 레포는 태그를 가집니다—프로젝트에 맞게 자유롭게 지정하세요:
repos:
- url: git@github.com:org/frontend.git
tags: [frontend, web]
- url: git@github.com:org/backend-api.git
tags: [backend, api, payments]
- url: git@github.com:org/shared-lib.git
tags: [shared, backend, frontend]
모든 명령은 --tag 옵션을 지원하여 특정 서브셋을 대상으로 할 수 있습니다:
mars branch feature-x --tag backend # backend 레포만 브랜치
mars exec "npm test" --tag frontend # frontend 레포만 테스트
mars status --tag payments # payments 관련 레포 상태 확인
mars sync --tag shared # shared 레포만 최신 상태로 동기화
레포당 여러 태그를 지정하면 교차 작업이 가능해집니다. [backend, payments]와 같이 태그된 레포는 --tag backend와 --tag payments 쿼리 모두에 나타납니다. 기능, 팀, 배포 그룹 등 팀이 코드베이스를 생각하는 방식에 맞게 태그를 지정하세요.
다른 멀티‑레포 도구와의 비교
| Tool | Language | Config | Approach |
|---|---|---|---|
| git submodules | git‑native | .gitmodules | 레포를 git 수준에서 연결하고, 특정 커밋을 추적합니다 |
| gita | Python | CLI‑based | 레포를 그룹화하고 관리하며, Python이 필요합니다 |
| myrepos | Perl | .mrconfig | 구성 파일 기반이며, 강력하지만 복잡합니다 |
| meta | Node | meta.json | JSON 구성, 플러그인 시스템 |
| Mars | Bash | mars.yaml | 태그 기반 필터링, 의존성 제로, 워크스페이스를 에이전트‑구성으로 설계 |
Mars는 확장성과 플러그인 시스템을 무의존성과 단순성으로 교환합니다. 주요 차별점은 설계 의도이며, 워크스페이스 구조가 에이전트‑구성 공유를 자연스럽게 발생시키는 특성을 갖습니다. 다른 도구들은 레포를 관리하지만, Mars는 에이전트가 거주할 수 있는 워크스페이스를 생성합니다.
설치
npm install -g @dean0x/mars
# or:
brew install dean0x/tap/mars
# or:
curl -fsSL https://raw.githubusercontent.com/dean0x/mars/main/install.sh | bash
빠른 시작
# Create a workspace
mars init
# Add repositories (tags are optional but recommended)
mars add https://github.com/org/frontend.git --tags frontend
mars add https://github.com/org/backend.git --tags backend
# Clone everything and see the status
mars clone
mars status
Full docs on GitHub:
Website:
언제 화성을 향해 나아가야 할까
- Multiple repos를 함께 작업해야 할 때.
- Coding agents는 워크플로우의 일부입니다.
- 스택 전체에 걸쳐 shared context와 coordinated operations가 필요합니다.
Mars를 사용하면 안 되는 경우
- 여러분의 코드베이스가 이미 단일 모노레포인 경우 (Mars가 해결하려는 문제가 존재하지 않음).
- Mars가 단순성을 위해 의도적으로 피하는 무거운 커스텀 플러그인 생태계가 필요한 경우.
- git‑history coupling이나 릴리즈 사이클 제약이 엄격하여 모노레포가 이미 충족하는 경우.
프로젝트 개요
-
리포지토리 구조
- 긴밀히 결합된 리포 – Git 서브모듈을 사용하세요.
- 단일 리포 – 일반 Git을 사용하세요.
-
플랫폼 지원
- Windows 호환성이 필요합니다.
-
라이선스
- 오픈 소스, MIT 라이선스.
-
커뮤니티 피드백
- 피드백을 환영합니다—특히 다중 리포에서 코딩 에이전트를 다루는 분들의 의견을 듣고 싶습니다.
- 여러분의 작업 공간은 어떻게 구성되어 있나요?