피드로 돌아가기
Polyglot Monorepo Magic: TypeScript, Python, and Go in One Repo
Dev.toDev.to
DevOps

Protobuf 기반 계약 공유를 통한 Polyglot Monorepo 구조 설계

Polyglot Monorepo Magic: TypeScript, Python, and Go in One Repo

M Hossein2026년 6월 6일30advanced

Context

서비스별 Polyrepo 운영 시 발생하는 팀 간 계약 동기화 및 좌표 설정 문제 해결 필요. TypeScript, Python, Go 등 서로 다른 언어 스택을 단일 저장소에서 통합 관리하여 개발 생산성을 높이고 인터페이스 일관성을 확보하려는 목적.

Technical Solution

  • Protobuf를 Single Source of Truth로 정의하고 각 언어별 Stub을 자동 생성하여 Type-safe한 통신 계약 강제
  • pnpm, uv, go.work 등 각 언어 전용 Workspace Manager를 독립적으로 병렬 운용하여 의존성 충돌 방지
  • TypeScript의 workspace:* 심볼릭 링크 적용을 통한 Stub 코드 재생성 즉시 반영 구조 설계
  • CI 환경의 독립성 확보를 위해 go.work 대신 go.mod 내 replace 지시어를 사용하여 모듈 간 경로 매핑
  • Taskfile.yml을 통한 언어 중립적인 통합 태스크 오케스트레이션 구현으로 개발자 경험(DX) 단일화
  • Generated code의 Git 커밋 전략을 채택하여 CI 파이프라인 단순화 및 변경 사항의 명시적 리뷰 체계 구축

- 서로 다른 언어의 Monorepo 구성 시 언어별 Workspace Manager의 설정 파일 확장자 차이를 이용한 독립 영역 확보 - CI 파이프라인에서는 로컬 개발 편의 도구(go.work 등)를 배제하고 명시적인 의존성 매핑(replace) 사용 - 다국어 환경의 인터페이스 동기화를 위해 Protobuf 기반의 코드 생성 자동화 파이프라인 구축 - 단일 .env 파일을 통한 전역 설정 관리 및 각 언어별 환경 변수 로더(dotenv, pydantic-settings 등) 연동 - Proto 변경 시 영향도 분석을 위해 CODEOWNERS 파일을 통한 다수 언어 리드 엔지니어의 교차 리뷰 강제

원문 읽기