새소식

반응형
Development

[Maven] Bom이란(type, scope)

  • -
반응형

Maven은 Dependency를 관리해주는 툴로 POM이라는 XML을 통해서 설정한다.

얼마 전에 다른 사람이 작성한 pom.xml을 보게 되었는데 주석으로 bom이라고 쓰여있는 것을 봐서 오타가 났다보다 생각했는데 후에 찾아보니 BOM이라는 기능이 따로 존재하는 것이었다.

 

 

BOM ( Bill Of Materials) 자제 명세서

BOM은 특별한 POM의 종류라고 생각하면 될 거 같다. Dependency를 관리하는 것은 유사하지만

한 곳에서 중앙 집중형으로 의존성과 버전을 관리할 수 있게 도와줍니다.

 

BOM을 사용하는 대표적인 장점이 버전 관리입니다.

Maven을 사용하다 보면 버전 충돌의 문제를 많이 겪게 됩니다.

이러한 문제를 해결하기 위해서 BOM을 사용합니다.

 

루트 pom.xml 

<project ...>
	
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test</groupId>
    <artifactId>Test-BOM</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>Test-BOM</name>
    <description>parent pom</description>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.test</groupId>
                <artifactId>a</artifactId>
                <version>1.2</version>
            </dependency>
            <dependency>
                <groupId>com.test</groupId>
                <artifactId>b</artifactId>
                <version>1.0</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>com.test</groupId>
                <artifactId>c</artifactId>
                <version>1.0</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

위의 예시에 <dependencyManagement> 태그에 해당하는 부분이 BOM이라고 할 수 있다.

 

실 사용 예시

 

dependency의 상속관계 이용 ( parent )

<project ...>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test</groupId>
    <artifactId>TestUsing</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>TestUsing</name>
    <parent>
        <groupId>com.test</groupId>
        <artifactId>Testg-BOM</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
</project>

 

import dependency

<project ...>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test</groupId>
    <artifactId>TestUsing2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>TestUsing2</name>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.test</groupId>
                <artifactId>Test-BOM</artifactId>
                <version>0.0.1-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

import 형식으로 이용하기 위해서는 <dependencyManagement> 태그를 이용한 선언과

<type>, <scope> 태그를 추가하여 추가 정보를 주어야 합니다. 

 

실제로 Spring에서는 BOM을 정의하여, 개발자들이 편리하게 해당 dependency를 추가하고 버전에 대한 걱정 없이 Spring 라이브러리를 사용하고 있습니다. 

 

Spring BOM 사용 예시

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-framework-bom</artifactId>
            <version>4.3.8.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

...

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
<dependencies>
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.