IT 및 AI

Google, 내부 코드 이동 도구 Copybara를 오픈소스로 공개

푸른강아지 2026. 7. 3. 08:43
반응형

Google, 내부 코드 이동 도구 Copybara를 오픈소스로 공개하다

저장소 간 코드 변환 및 동기화 — Google의 대규모 모노레포 운영 노하우가 공개됩니다

2026년 6월, Google이 내부적으로 수년간 사용해온 코드 이동(copybara) 도구를 오픈소스로 공개했습니다. GitHub 저장소는 공개 직후 Hacker News에서 237포인트를 기록하며 개발자들의 뜨거운 관심을 받았습니다.

이번 공개는 Google이 내부 인프라를 외부에 공유하는 드문 사례 중 하나로, 대규모 모노레포(monorepo) 환경에서 코드를 관리하는 모범 사례를 전 세계 개발자와 공유하겠다는 의지로 읽힙니다.

 

🔍 Copybara란 무엇인가?

Copybara는 코드를 변환(transform)하고 저장소 간 이동(move)하는 도구입니다. 한 저장소의 코드를 다른 저장소로 복사할 때, 단순한 파일 복사가 아니라 경로 변경, 설정 파일 변환, 불필요한 내부 참조 제거 등의 변환 작업을 자동으로 수행합니다.

가장 대표적인 사용 사례는 다음과 같습니다:

  • 내부 저장소 → 공개 저장소 동기화: 기업 내부 코드에서 민감한 정보(API 키, 내부 URL, 설정)를 제거하고 공개 저장소에 안전하게 반영
  • 공개 저장소 → 내부 저장소: 오픈소스 커뮤니티의 기여(PR)를 내부 모노레포로 자동 병합
  • 1회성 마이그레이션: 레거시 저장소에서 새로운 저장소로 일회성 코드 이동
  • 지속적 동기화: 두 저장소 간의 양방향/단방향 지속 동기화 워크플로우 구축

주요 특징

특징 설명
무상태(Stateless) 자체 상태를 저장하지 않으며, 모든 상태는 대상 저장소의 커밋 메시지 레이블에 기록됩니다. 여러 사용자가 동일한 설정으로 동일한 결과를 얻을 수 있습니다.
선언적 설정 copy.bara.sky 파일에 출발지, 목적지, 변환 규칙을 Starlark 문법으로 선언합니다.
코드 변환 이동 중 코드 변환(경로 재작성, 내부 설정 제거, 라이선스 헤더 추가 등)을 지원합니다.
Git 저장소 지원 Git을 기본으로 지원하며, Mercurial 저장소 읽기는 실험적 기능으로 제공됩니다.
PR 생성 변경사항을 대상 저장소에 직접 커밋하는 대신 Pull Request를 생성할 수 있습니다.
 

🛠️ 기술 스택

Copybara는 Java 기반으로 작성되었으며, Google의 Bazel 빌드 시스템을 사용합니다. 3,600건이 넘는 커밋과 수많은 내부 테스트를 거친 성숙한 도구입니다.

설치 및 실행 방법은 다양하게 제공됩니다:

방법 명령어
소스 빌드 bazel build //java/com/google/copybara
Docker docker run -v $(pwd):/code ghcr.io/google/copybara
Arch Linux yay -S copybara-git (AUR)
Pre-built JAR GitHub Releases 페이지에서 주간 스냅샷 JAR 다운로드
 

📋 실제 사용 예시

Copybara를 실제로 어떻게 사용하는지 간단한 예시를 살펴보겠습니다. 설정 파일은 copy.bara.sky라는 파일에 Starlark 문법으로 작성합니다.

내부 모노레포 → 공개 저장소 동기화 예시

core.workflow( name = "sync-to-public", origin = core.git.origin("git@internal:monorepo.git"), destination = core.git.destination( url = "github.com/myorg/public-repo.git", push = "main" ), authoring = core.authoring.overwrite("Copybara Bot <bot@myorg.com>"), transformations = [ core.transform.strip_prefix("projects/lib/"), core.transform.replace( before = "//internal/config", after = "//lib/config" ), ], )

이 설정은 내부 모노레포의 projects/lib/ 디렉터리를 공개 GitHub 저장소로 동기화하면서, 내부 경로 참조를 공개용 경로로 자동 변환합니다.

실행 명령어

copybara migrate copy.bara.sky --workflow sync-to-public
 

🌟 오픈소스 공개의 의미

Copybara가 오픈소스로 공개된 것은 단순히 "또 하나의 Google 도구가 공개되었다" 이상의 의미를 갖습니다.

  • 대규모 모노레포 운영의 내부 노하우 공유: Google은 세계에서 가장 큰 모노레포를 운영하는 기업 중 하나입니다. Copybara의 설계 철학(무상태, 선언적 설정, 커밋 레이블 기반 상태 관리)은 Google이 수년간 축적한 코드 관리 노하우의 결정체입니다.
  • 모든 규모의 팀에 적용 가능: 스타트업의 단순한 private/public 저장소 동기화부터 대기업의 복잡한 마이그레이션 프로젝트까지, Copybara는 다양한 규모에서 활용할 수 있습니다. GitHub Actions를 통한 CI/CD 통합도 이미 커뮤니티에서 활발히 개발되고 있습니다.
  • 오픈소스 생태계 기여: Google은 내부 도구를 공개함으로써 오픈소스 생태계에 실질적인 기여를 하고 있습니다. Copybara는 Apache 2.0 라이선스로 공개되어 상업적 사용에도 제약이 없습니다.
  • 내부 저장소 보안과 투명성의 균형: 기업이 내부 코드를 안전하게 유지하면서도 오픈소스 커뮤니티와 협력할 수 있는 방법을 제시합니다. Copybara는 코드 이동 과정에서 내부 참조, API 키, 민감한 설정을 자동으로 필터링할 수 있습니다.
 

🚀 빠르게 시작하기

Copybara를 지금 바로 사용해보고 싶다면, 다음 단계를 따라주세요.

1. GitHub 저장소 클론

git clone https://github.com/google/copybara.git cd copybara

2. Bazel로 빌드

bazel build //java/com/google/copybara:copybara_deploy.jar

3. 문서 확인

더 자세한 사용법은 GitHub 저장소 내 docs/ 디렉터리와 Google의 공식 GitHub 저장소를 참고해주세요. 커뮤니티 질문은 Copybara Discuss 메일링 리스트에서 할 수 있습니다.

 

📊 Hacker News 반응

Copybara 오픈소스 공개 소식은 Hacker News에서 237포인트를 기록하며 큰 주목을 받았습니다. 개발자들의 주요 반응은 다음과 같습니다.

  • 내부 도구의 외부 공개 환영: Google이 실제로 사용하는 도구를 오픈소스로 공개한 점에 대한 긍정적인 평가가 많았습니다.
  • 모노레포 vs 멀티레포 논쟁 재점화: Copybara의 등장으로 모노레포와 멀티레포 접근법 간의 장단점에 대한 논의가 다시 활발해졌습니다.
  • Bazel 생태계 확장: Bazel 빌드 시스템과의 긴밀한 통합이 Bazel 사용자 커뮤니티의 관심을 끌었습니다.
  • 대안 도구와의 비교: 기존의 유사 도구(git-subtree, git-filter-repo, reposync 등)와의 비교 분석이 이어졌습니다.
 

💡 마치며

Google Copybara의 오픈소스 공개는 단순한 도구 공개를 넘어, 대규모 코드베이스를 효율적으로 관리하는 방법론을 전 세계 개발자들과 공유한다는 점에서 의미가 깊습니다.

내부 저장소와 공개 저장소를 동기화해야 하는 조직, 레거시 시스템에서 새로운 플랫폼으로 코드를 마이그레이션해야 하는 팀, 또는 단순히 Google의 엔지니어링 문화를 엿보고 싶은 개발자라면 Copybara를 주목해보시기 바랍니다.

🔗 관련 링크
• GitHub 저장소: github.com/google/copybara
• Hacker News 토론: news.ycombinator.com/item?id=48740698
• 릴리스 페이지: github.com/google/copybara/releases
• 커뮤니티 메일링 리스트: groups.google.com/forum/#!forum/copybara-discuss

반응형