일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- 의존성관리
- pom.xml
- pair
- C++
- Spring Boot
- HashMap
- maven
- springboot
- Dependency
- mybatis
- 스프링 스케줄러
- GOF
- Spring
- 스프링
- 프로젝트 구조
- 스프링부트
- codility
- list
- 스프링 부트
- thymeleaf
- 코딩테스트
- vuejs #vue #js #프론트엔드 #nodejs #클라이언트사이드 #템플릿엔진
- spring scheduler
- 프로그래머스
- Spring Mail
- @Scheduled
- Arrays
- 스프링 메일
- Collections
- Today
- Total
Rooted In Develop
Spring Boot 원리 : 의존성(Dependency) 관리 본문
이 글은 인프런의 백기선님의 강좌를 수강하며 정리한 글입니다.
1. 서론
예전 Spring Legacy Project의 경우 스프링 프레임워크의 버전업이든지, 써드파티의 버전업이든지 서로간의 의존성 충돌이 일어나기 시작하면 해결하는데 시간이 꽤 걸린다.
어떻게 해서 Spring Boot(이하 스프링 부트)는 어떻게 버전 명시 없이 의존성이 주입되는 것일까?
우선 스프링 부트 프로젝트의 pom.xml을 살펴봅시다.
2. Parent : Dependency Management + Resource Filtering + Plugin Configuration
pom.xml(Maven)
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
간단하게도, 이 parent에 의해서 스프링 부트의 의존성이 주입되게 된다.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
dependency에 버전을 명시하지 않았는데도 아래와 같이 의존성이 주입된다.
3. DependencyManagement : Dependency ManageMent
Maven에서는 parent 대신 dependencymanagement도 사용할 수 있다.
이 방법은 Parent와 같이 의존성 관리는 가능하지만, 리소스 필터링이나 플러그인 설정은 불가하다.
따라서 Parent를 사용하는 방법으로 스프링 부트 프로젝트를 진행하면 되겠다.
4. 특정 버전 명시
위 프로젝트에 Spring Boot Starter Data Redis 의존성을 버전을 명시하여 추가해보았다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
해당 버전은 프로젝트의 Spring Boot 버전과 맞지 않는 버전이므로
"Duplicating managed version 2.1.7.RELEASE for spring-boot-starter-data-redis" 라는 경고가 뜨게 된다.
꼭 해당 버전을 사용하고자 하면 경고를 무시하고 진행하면 되겠지만 컴파일이 안되는 경우는 해당 버전이 문제이므로 버전을 명시하지 않고 스프링 부트가 주입해주는 의존성으로 프로젝트를 진행하면 되겠다.
'Back End > Spring Boot' 카테고리의 다른 글
스프링 부트 스케줄러 @Scheduled 어노테이션 사용법(@Scheduled Annotation) (0) | 2020.04.22 |
---|---|
Spring Boot 프로젝트 구조 (0) | 2019.12.27 |
Spring Boot 원리 : 자동 설정(Auto Configuration) (1) | 2019.09.02 |
간단한 스프링 스케줄러(Spring Scheduler) 사용하기 : @Scheduled Annotation (0) | 2019.08.19 |
Spring Boot 메일 전송 : Spring Boot 2, Mail, Thymeleaf (2) | 2019.08.19 |