Life with Spring Boot inside a Monorepo by Fabio Mangione / Peter Laird @ Spring I/O 2025
- Salesforce Scone 팀은 개발팀이 핵심 가치에 집중할 수 있도록 공통 도구와 서비스를 제공하여 반복적인 작업을 줄이는 것을 목표로 합니다. 🛠️
- 기존 대규모 모놀리식 '코어' 외부에서 마이크로서비스를 개발하면서 로깅, 메트릭 등 공통 문제에 직면했고, 이는 Scone 팀의 필요성을 촉발했습니다. 🏗️
- JVM/Spring Boot 전문가들로 구성된 Scone 팀은 공통 솔루션을 제공하기 위해 자체 Spring Boot 스타터(Scone)를 개발했으며, 이는 빠르게 인기를 얻었습니다. ✨
- Scone 스타터의 성공은 버전 업그레이드 및 취약점 관리의 복잡성을 야기했고, 이를 해결하기 위해 모노레포(Monorepo) 전략을 채택했습니다. 🔄
- 모노레포는 코드 재사용, 간소화된 리팩토링, 개발 초기 단계 문제 발견, 일관된 툴링 및 최신 상태 유지 등 다양한 이점을 제공합니다. 🚀
- 대규모 모노레포에 적합하지 않은 Maven/Gradle 대신, 증분 빌드, 확장성, 무결성(Hermetic), 다중 언어 지원, 원격 캐싱/실행 기능을 갖춘 Bazel을 도입했습니다. ⚡
- Bazel의 초기 Spring Boot 지원 부족 문제를 해결하기 위해 Peter Laird가 직접 Spring Boot용 Bazel 플러그인을 개발했으며, 이는 현재 표준으로 자리 잡았습니다. 👨💻
- 엄격한 모노레포 정책으로 단일 종속성 버전 강제(예외 허용), 공통 Docker 베이스 이미지 사용, 자동화된 업그레이드 및 배포를 통해 일관성과 보안을 유지합니다. 🔒
- 고도화된 CI/CD 파이프라인은 사용자 PR 빌드와 별개로, 전체 리포지토리 상태를 분석하고 아티팩트를 릴리스하며, 10시간이 소요되는 전체 빌드, 유효성 검사, 취약점 스캔 등을 수행합니다. 🏭
- Java 모노레포의 성공을 바탕으로 Golang 및 Python 모노레포로 확장하여 다양한 기술 스택을 지원합니다. 🌐
- 1,400개 이상의 종속성을 90% 자동화된 방식으로 업그레이드하며, 전이적 종속성까지 선제적으로 관리합니다. 관리되지 않는 종속성으로 인한 기술 부채는 명확한 책임 분담을 통해 해결합니다. 🐑
- 모노레포 도입 시 개발자들의 통제력 상실 우려를 해소하고, Maven 프로젝트를 Bazel로 마이그레이션하는 과정이 예상보다 간단했음을 공유합니다. 🤝
- 오픈소스 라이브러리의 취약점 패치가 늦어질 경우, 규제 준수를 위해 자체적으로 수정하여 사용하는 '벤더링' 방식을 활용합니다. 🛡️
데브허브 | DEVHUB | Life with Spring Boot inside a Monorepo by Fabio Mangione / Peter Laird @ Spring I/O 2025