티스토리 뷰
반응형
참고로 org.mongodb:mongodb-driver-sync:jar:3.8.2 버전을 사용했고, 예제에 있는 코드를 참고하여 연결정보를 만들려고 하는데 희안하게 MongoClientSettings 사용하려고 했는데, 해당 라이브러리를 찾지 못하는 이상한 상황이 생겼다.
특이한점은 SpringBoot 를 이용해서 웹서비스를 제공하고 있는데, 해당 의존성을 올리면 import 못하는 문제가 해결되었다.
하지만, 호환성 문제가 검증안되서 찜찜해서 다른 해결방법을 찾기위해 두 차이가 뭔지 확인해 보았다.
- 2.0.9.RELEASE -> 2.1.4.RELEASE
import com.mongodb.MongoClientSettings; // <- import 에러
....
final String host = "127.0.0.1";
final int port = 10004;
final MongoCredential credential = MongoCredential.createCredential(
user, defaultDatabaseName, password.toCharArray());
final MongoClientSettings setting = MongoClientSettings.builder()
.applyToClusterSettings(builder -> builder.hosts(Collections.singletonList(new ServerAddress(host, port))))
.credential(credential)
.build();
client = MongoClients.create(setting);
...
원인확인
maven 에서 dependency:tree 를 이용해서 비교해보니... 다음과 같이 다른 버전으로 import 되는 현상을 발견했다.
[INFO] +- org.mongodb:mongodb-driver-sync:jar:3.8.2:compile
[INFO] | +- org.mongodb:bson:jar:3.6.4:compile
[INFO] | \- org.mongodb:mongodb-driver-core:jar:3.6.4:compile
해결방법
결국 하위 의존성의 버전을 직접 맞춰주는걸로 해결을 했다. maven 기준으로는 pom.xml 을 다음과 같이 수정하면 된다.
그러면 mongodb bson 과 driver-core 버전이 3.8.2 로 동일하게 맞춰지고 import 에러나는 문제도 해결되었다.
...
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>3.8.2</version>
<exclusions>
<exclusion>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
</exclusion>
<exclusion>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>3.8.2</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
<version>3.8.2</version>
</dependency>
...
의존성이 복잡하게 꼬이기 시작하면 꼭 maven 에서 의존성 트리를 꼭 확인해보는 습관을 갖도록 하자.
반응형
댓글