☑️ BOM (Bill Of Materials)
Each release of Spring Boot provides a curated list of dependencies that it supports. In practice, you do not need to provide a version for any of these dependencies in your build configuration, as Spring Boot manages that for you. When you upgrade Spring Boot itself, these dependencies are upgraded as well in a consistent way.
The curated list contains all the Spring modules that you can use with Spring Boot as well as a refined list of third party libraries. The list is available as a standard Bills of Materials (spring-boot-dependencies) that can be used with both Maven and Gradle.
출처 (https://docs.spring.io/spring-boot/reference/)
BOM이란 직역하면 재료들의 명세표라는 뜻으로, Spring에서는 특정 라이브러리들의 버전 집합을 관리하는 메타 정보를 의미한다. BOM을 사용하면 개별 dependency에 버전을 직접 명시하지 않고 BOM에서 관리하는 버전을 자동으로 적용할 수 있어 라이브러리 간 버전 충돌 및 호환성 이슈를 방지할 수 있다.
Spring 공식 문서에서도 BOM을 사용한 의존성 관리 방안을 제공하고 있으며, BOM을 사용하더라도 개발자는 필요한 경우 라이브러리의 버전을 개별적으로 오버라이드해 사용할 수도 있다.
[EX. Maven]
<project>
<!-- BOM Import -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.5.6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- Dependencies Import (버전을 직접 쓰지 않음) -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
</dependencies>
</project>
[EX. Gradle]
dependencies {
// BOM Import
implementation platform('org.springframework.boot:spring-boot-dependencies:3.5.6')
// Dependencies Import (버전을 직접 쓰지 않음)
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'org.postgresql:postgresql'
}
💡 Gradle Spring Boot Plugin
Gradle의 경우 Spring Dependency Management 플러그인이 있어 편리하게 사용할 수 있다.
참고 (https://docs.spring.io/spring-boot/gradle-plugin/)
plugins {
id 'java'
id 'org.springframework.boot' version '3.5.6'
id 'io.spring.dependency-management' version '1.1.7'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'org.postgresql:postgresql'
}
✔️ 사용 이유
1️⃣ 버전 정합성
- Spring Boot 프로젝트에서는 엄청나게 많은 라이브러리들이 서로 얽혀있음
- 특히 Spring Boot Starter의 경우 하나의 스타터 안에는 수많은 또 다른 스타터와 라이브러리들이 포함되어 딸려옴 (transitive dependencies)
- 의존성 전이 등으로 중복되는 라이브러리 간의 버전 충돌, 호환성 이슈 등을 방지하기 위해 검증된 의존성 버전과 조합을 중앙에서 관리
[EX. spring-boot-starter-web 의존성의 내부 구조 (매우 많은 의존성을 갖고 있음)]

[EX. spring-boot-starter-web 안의 spring-boot-starter 의존성의 내부 구조]

2️⃣ 멀티 모듈
- BOM은 멀티 모듈 아키텍처에서는 거의 필수적인 요소
- 각 모듈이 서로를 참조하거나, 동일한 라이브러리를 참조하는 일이 빈번하기 때문에 전체 빌드 혹은 어플리케이션 실행 시점에 의존성이 얽히는 문제를 방지하기 위해 멀티 모듈 전체의 버전 기준표로서의 역할
💡 멀티 모듈
하나의 root 프로젝트 하위에 다수의 독립적인 모듈로 구성된 프로젝트 구조
MSA와 비교하자면, MSA는 아키텍처 설계의 관점에서 서비스를 분리하는 개념이고,
멀티 모듈의 경우 하나의 프로젝트를 구성하는 코드 구조 설계 방안
[EX. 멀티 모듈 구조 예시]

✔️ BOM + Starter 구조
위에서 BOM+멀티 모듈의 조합에 대해 언급했는데, 멀티 모듈 구조의 Starter + BOM 구조의 의미는 독립된 모듈의 집합과 중앙 관리/통제 플랫폼이라고 정리하면 될 것 같다. 플랫폼이라는 용어가 모호하긴 한데 우선은 개발을 위한 표준화된 기반 정도로 이해하고 사용중이다.
BOM: 의존성의 버전과 호환성을 관리하는 기준 (Build/Dependency)Starter: 실제 기능 구성을 제공하는 모듈 (Runtime)
'Develop > Java, Spring' 카테고리의 다른 글
| [Spring] Multi Datasource란? (0) | 2026.04.03 |
|---|---|
| Gradle 개념 간단 정리 (0) | 2026.04.02 |
| Spring Boot Starter에 대해 알아보기 (0) | 2026.03.25 |
| Spring Security를 사용한 사용자 인증(Authentication) 이해하기 (0) | 2026.03.22 |
| JWT 이해하기 (0) | 2026.03.18 |