스프링 부트 의존성 버전문제로 인한 오류 해결
스프링 부트에서 프로젝트를 실행하는데 잘되던 의존성 주입이 갑자기 안 되는 문제가 발생했다.
1. 기존 코드
- 기존에 Elasticsearch와 통신하기 위해 추가한 의존성이다.
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.9'
}
dependencies {
...
implementation 'org.springframework.data:spring-data-elasticsearch:4.4.0.RELEASE'
}
2. 에러 메시지
3. 문제 해결
Spring Boot는 의존성 버전 관리를 자동으로 해주기 때문에 아래처럼 코드를 수정하면 자동으로 버전을 관리한다.
//elasticsearch
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
4. 문제 분석
org.springframework.data:spring-data-elasticsearch:4.4.0.RELEASE 의존성과 org.springframework.boot:spring-boot-starter-data-elasticsearch 의존성 사이에는 중요한 차이가 있다.
기존 org.springframework.data:spring-data-elasticsearch 는 Spring Data Elasticsearch 프로젝트의 핵심 라이브러리로, Elasticsearch를 사용한 검색과 데이터 액세스 기능을 직접 제공한다. 이 라이브러리는 Spring Data의 일부이며, Elasticsearch 데이터스토어와의 통합을 위한 기본적인 추상화와 공통 기능을 포함한다.
수정한 org.springframework.boot:spring-boot-starter-data-elasticsearch 는 Spring Boot 스타터 의존성으로, Spring Boot 애플리케이션에서 Elasticsearch를 빠르게 사용할 수 있도록 필요한 모든 의존성을 함께 묶어 제공한다. 이 스타터 패키지는 spring-data-elasticsearch를 포함하며, 더불어 Spring Boot 애플리케이션에 통합하기 위한 추가적인 자동 구성(auto-configuration)과 기본값 설정을 제공한다.
기존에 org.springframework.data:spring-data-elasticsearch를 사용했을 때 작동하다가 갑자기 에러가 발생한 경우, 여러 이유가 있을 수 있다. 그중에서 나는 의존성 충돌 때문이지 않을까 싶다.
새로운 기능을 개발하면서 아래 코드를 추가시키고 실행시키니 에러가 발생했엇다.
implementation 'org.springframework.boot:spring-boot-starter-webflux'
Spring Boot 스타터 의존성들은 일반적으로 버전 관리된 라이브러리 세트를 제공하기 때문에, 개별적으로 버전을 관리할 때 발생할 수 있는 호환성 문제를 예방하는 데 도움이 된다.
spring-boot-starter-webflux 의존성을 추가하면서 의존성 트리에 변화가 생겼을 가능성이 크며, 이로 인해 기존에 사용하던 spring-data-elasticsearch 라이브러리와 충돌이 발생했을 수 있다. 예를 들어, spring-boot-starter-webflux가 내부적으로 사용하는 라이브러리의 버전이 spring-data-elasticsearch가 의존하는 버전과 다를 수 있으며, 이러한 차이가 런타임에 에러를 발생시킬 수 있다고 한다.
5. 마무리
의존성 관리의 중요성에 대한 인사이트를 얻었다.
앞으로는 프로젝트에 새로운 의존성을 추가할 때, 먼저 기존의 의존성들과의 호환성을 확인하는 절차를 거쳐야겠다. 그리고 스프링 부트 스타터를 사용하면 대부분의 호환성 문제를 예방할 수 있으므로, 가능하면 스타터를 사용하는 방향으로 갈야겠다.
이런 경험이 앞으로 더욱 견고하고 안정적인 애플리케이션을 구축하는 데 도움이 되리라 생각한다.
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] 스프링 부트 프로젝트 실행하자마자 batch job이 실행되는 이슈 (0) | 2023.11.08 |
---|---|
[Spring Boot] Spring Batch 코드 작성 후 실행 시 Table doesn't exist 에러 해결 (0) | 2023.11.07 |
[Spring Boot] RequestDTO로 요청받을때 @RequestBody를 작성하는 경우와 작성하지 않는 경우 (1) | 2023.11.07 |
이해하기 쉬운 CORS 및 API 개발 안내서 (Access-Control-Allow-Headers) (1) | 2023.11.05 |
[Spring Boot] Custom Annotation 만들기 - AOP(Aspect-Oriented Programming) (1) | 2023.10.24 |