Life with Spring Boot inside a Monorepo by Fabio Mangione / Peter Laird @ Spring I/O 2025
- Salesforce 내 인프라 팀은 전 세계 개발자들을 지원하기 위해 글로벌 팀으로 운영되며, 10년 이상 같은 팀에 근무하는 것은 드문 일이다. 🌍
- 팀의 목표는 개발 팀이 불필요한 작업에서 벗어나 서비스의 가치에 집중할 수 있도록 도구를 제공하는 것이다. 🛠️
- Salesforce의 핵심 컴포넌트는 대규모 모놀리스이며, 마이크로서비스로 전환하면서 새로운 문제들이 발생했다. 🧱➡️🧩
- 여러 팀이 동일한 문제를 해결하는 데 시간을 낭비하는 것을 막기 위해 글로벌 솔루션을 제공하는 팀이 구성되었다. 🤝
- 이 팀은 Spring Boot 전문가로 구성되어 자체 starter를 개발했고, 이를 'scone'이라고 명명했다. ☕
- scone의 인기가 높아지면서 버전 관리 및 취약점 해결에 어려움을 겪게 되었다. 🐛
- 모놀리식 리포지토리(monorepo)를 사용하여 라이브러리를 재사용하고, 문제를 조기에 발견하며, 툴링 및 정렬을 개선하고자 했다. 💡
- Maven 및 Gradle은 monorepo에 적합하지 않아, Google의 Bazel을 선택했다. 🏗️
- Bazel은 증분 빌드, hermetic 실행, 다국어 지원, 원격 캐싱 및 실행 등의 장점을 제공한다. 🚀
- Peter는 Bazel용 Spring Boot 플러그인을 개발하여 오픈 소스 커뮤니티에 공개했다. 👨💻
- monorepo 내에서 모든 사용자는 각 종속성의 단일 버전만 사용해야 한다. ☝️
- Docker 이미지도 동일한 기본 이미지에서 시작하여 일관성을 유지한다. 🐳
- 지속적인 통합(CI)을 통해 코드 변경 사항을 분석하고, 필요한 경우 자동으로 릴리스한다. 🔄
- Java monorepo의 성공에 힘입어 Golang 및 Python monorepo도 구축했다. 🐍
- monorepo로의 마이그레이션은 예상보다 간단했으며, Maven 프로젝트를 Bazel 파일로 변환하는 방식으로 진행되었다. ➡️