MongoDB 3.6 API 에서 MongoClientURI와 MongoClientOptions.Builder의 자료를 참고하여 어찌저찌 커넥션 풀을 만들었다.
일단 이렇게 하면 될 것이라는 가정하에 실험을 해봤다. 안타깝게도 아직 이것이 커넥션 풀이 생긴건지 아닌지 모르겠다.
일단 소스부터
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions.Builder;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoDatabase;
public class MongoDBUtil {
// 객체 생성시 필요한 정보
// 기본 로컬 접속 시
// 커넥션 풀을 만들기 위한 기본 설정값을 저장하는 객체
static Builder options = new Builder();
// 옵션 설정을 위한 메서드 설정
static Builder options() {
options.connectionsPerHost(30); // 시작 시 30개의 풀을 만들고 시작
options.minConnectionsPerHost(10); // 최소 10개를 유지
return options;
}
// maxPoolSize를 통해 최대 유지 가능한 커넥션 객체 갯수를 설정
static MongoClientURI uri = new MongoClientURI("mongodb://(아이피 혹은 localhost):(포트번호)/(데이터베이스 이름)?maxPoolSize=500",options());
// 로컬 접속 시 사용할 MongoClient 객체
static MongoClient mongoClient = new MongoClient(uri);
// 접속 시 필요한 자료
// 접속 시 databaseName을 파라메터로 넘겨서 접속한다.
public static MongoDatabase getConnection(String databaseName) throws Exception {
return mongoClient.getDatabase(databaseName);
}// end of getConnection()
}
먼저 MongoClientOptions.Builder 객체를 불러와서 사용할 옵션을 저장한다.
이 자료에서 시작시 30개의 풀, 최소 10개 유지라는 옵션을 저장해놨다.
이후 MongoClientURI에 옵션을 저장하고 maxPoolSize를 이용해 풀의 최대 크기, 즉 최대 몇 명의 사용자에게 제공할 것인지 지정한다.
뒤는 그냥 커넥션이다.
근데 이게 메인으로 불러오면

에러내용
"Default constructor cannot handle exception type Exception thrown by implicit super constructor. Must define an explicit constructor."
그래서 MongoDBUtil 안에 생성자를 만들어보려고 했더니

이클립스가 너무 맞는 소리를 해서 뭐라고 할 말이 없었다.
public MongoDBUtil(){}
로 강제 생성을 해봤는데 역시나 똑같은 오류가 발생했다.
일단 내용을 유추해 본다면 메인에서 getConnection()의 throws Exception을 처리하지 못한다는 말인 것 같아서 throws Exception을 뺐다.

편안해졌다.
최종 Java 코드
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions.Builder;
import com.mongodb.MongoClientURI;
import com.mongodb.client.MongoDatabase;
public class MongoDBUtil {
// 객체 생성시 필요한 정보
// 기본 로컬 접속 시
// 커넥션 풀을 만들기 위한 기본 설정값을 저장하는 객체
static Builder options = new Builder();
// 옵션 설정을 위한 메서드 설정
static Builder options() {
options.connectionsPerHost(30); // 시작 시 30개의 풀을 만들고 시작
options.minConnectionsPerHost(10); // 최소 10개를 유지
return options;
}
// maxPoolSize를 통해 최대 유지 가능한 커넥션 객체 갯수를 설정
static MongoClientURI uri = new MongoClientURI("mongodb://(아이피 혹은 localhost):(포트번호)/(데이터베이스 이름)?maxPoolSize=500",options());
// 로컬 접속 시 사용할 MongoClient 객체
static MongoClient mongoClient = new MongoClient(uri);
// 접속 시 필요한 자료
// 접속 시 databaseName을 파라메터로 넘겨서 접속한다.
public static MongoDatabase getConnection(String databaseName) {
return mongoClient.getDatabase(databaseName);
}// end of getConnection()
}
이거 처리하는데 시간을 많이 소비했으니 진짜로 커넥션 풀이 생긴건가 아닌가는 다음에 확인해야겠다.
강제로 긴 시간 동안 처리해야 하는 것을 이클립스로 실행시키고 Robo3T로 확인을 해볼까 생각하고 있다.
더 좋은 방법이 있으려나...