[springboot] 의존성 관리의 이해 및 응용

2022. 8. 11. 22:48JAVA/Spring

1. 스프링 부트의 핵심적인 기능 : 의존성 관리(Dependencies Management)

의존성 관리란 무엇인가?

자바 스프링에서는 대표적으로 메이븐(Maven), 그레이들(Gradle)이라는 빌트 도구가 존재합니다. 이 빌드 도구들은 빌드 도구들을 이용해서 애플리케이션에 필요한 라이브러리들을 다운로드할 수 있게 도와주는 도구입니다. 여기서 다운로드 받은 어떤 한 라이브러리는 다른 라이브러리가 필요한 경우가 있습니다. 이러한 경우처럼 한 라이브러리가 다른 라이브러리를 필요한 경우를 의존성이 있다고 할 수 있습니다. 스프링부트는 어떤 한 라이브러리를 다운로드받을 때 해당 라이브러리가 의존하는 다른 라이브러리들도 같이 다운로드할 수 있도록 의존성 관리를 수행합니다.

 

스프링부트가 의존성을 관리하는 원리는 빌드 도구인 메이븐(Maven)의 경우 pom.xml 파일에 정의된 "spring-boot-starter-parent"의 부모인 "spring-boot-dependencies"의 폼을 보면 알 수 있습니다. "spring-boot-dependencies"의 폼의 dependencyManagement 영역에 의존성들의 버전이 정의된 것을 볼 수 있습니다.

 

dependencyManagement 영역에 정의된 의존성들중 하나라도 사용하게 된다면 버전을 명시하지 않아도 spring-boot-dependencies가 관리하는 버전을 사용할 수 있는 원리입니다.

 

의존성 관리를 스프링부트 프레임워크가 해주는것이 왜 좋은가?

스프링부트가 의존성 관리를 해준다면 우리가 직접 관리해야할 의존성의 수가 줄어들기 때문입니다. 그만큼 의존성들간의 버전을 신경쓰지 않아도 된다는 점입니다. 만약 스프링부트가 의존성 관리를 안한다면 스프링의 버전을 올리거나 서드파티 라이브러리를 도입하는 경우에 기존 스프링 버전과 호환이 되지 않아 충돌이 발생할 수 있습니다. 

 

그래서 스프링부트는 의존성 관리를 지원해주기 때문에 starter 라는 이름이 붙은 의존성 위주로 관리해주면 됩니다. 스프링부트가 관리하는 의존성들은 버전을 붙이지 않아도 되지만 만약 특정 버전을 원하는 경우에는 명시하면 됩니다. 명시하면 그에 맞게 의존성 관리를 수행할 것입니다.

 

특정한 의존성의 버전을 사용하고 싶은 경우

메이븐의 의존성 버전 변경

1. pom.xml 파일에 다음과 같이 정의합니다.

<properties>
    <slf4j.version>1.7.5</slf4j.version>
</properties>

2. 프로젝트의 pom.xml 파일에 새로운 버전을 명시하면 스프링부트는 해당버전을 참조하여 의존성을 관리할 것입니다.

 

그레이들 의존성 버전 변경

1. dependencies에 다음과 같이 정의합니다.

dependencies {
	implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.18.0'
}

2. 다시 프로젝트를 빌드한 다음 의존성 버전을 확인합니다. 저같은 경우 2.17.0에서 2.18.0으로 변경된 것을 확인할 수 있었습니다.

 

2. 추가하고 싶은 의존성 검색 및 정의 방법

1. mvnrepository 저장소로 이동합니다.

 

2. 필요한 의존성을 검색합니다. 예를 들어 ModelMapper 의존성을 추가한다고 가정합니다.

 

3. 의존성 라이브러리중 하나를 선택하여 적절한 버전을 선택합니다.

 

4. 메이븐 또는 그레이들에 따른 의존성 정의를 복사하여 pom.xml 또는 build.gradle에 복사 및 붙여넣기 합니다.

 

References

github : https://github.com/yonghwankim-dev/springboot_study
[인프런] 스프링 부트 개념과 활용