외부 애플리케이션 연결
애플리케이션 및 드라이버는 연결 문자열을 사용하여 IBM Cloud® Databases for MongoDB에 연결합니다. 각 배치에는 드라이버 및 애플리케이션용의 연결 문자열이 있습니다. 연결 문자열은 배포 개요의 엔드포인트 패널에 표시되며 Cloud Databases CLI 플러그인 및 Cloud Databases API에서도 검색할 수 있습니다.
연결 문자열은 배포에서 생성한 모든 사용자가 사용할 수 있습니다. 모든 연결 및 애플리케이션에 admin 사용자를 사용할 수 있지만 애플리케이션을 연결하기 위해 특별히 사용자를 작성하는 것이 좋습니다. 자세한 내용은 연결 문자열 가져오기 를 참조하세요.
외부 응용 프로그램을 연결할 때 지원되는 드라이버만 사용하십시오.MongoDB 또는 MongoDB's 주요 커뮤니티 지원 라이브러리. Cloud Databases 에서 지원하지 않는 드라이버는 지원하지 않습니다. MongoDB.
연결 정보 사용
드라이버가 배포에 연결하는 데 필요한 모든 정보는 서비스 자격 증명 페이지에서 생성한 자격 증명의 "MongoDB" 섹션에 있습니다. 이 표에는 참조에 대한 분석이 포함되어 있습니다.
필드 이름 | 색인 | 설명 |
---|---|---|
Type |
연결의 유형이며, MongoDB의 경우 이는 "URI"입니다. | |
Scheme |
URI의 스킴이며, MongoDB의 이는 "mongodb"입니다. | |
Path |
URI의 경로이며, MongoDB의 경우 이는 데이터베이스 이름입니다. MongoDB 인스턴스를 처음 프로비저닝할 때 사용자가 연결할 기본 데이터베이스는 admin 입니다. |
|
Authentication |
Username |
연결하는 데 사용하는 사용자 이름입니다. |
Authentication |
Password |
사용자에 대한 비밀번호로 $PASSWORD 로 표시될 수 있습니다. |
Authentication |
Method |
인증이 수행되는 방법이며 "직접" 인증은 드라이버에 의해 처리됩니다. Mongo 3.6은 SCRAM SHA 1을 사용하는 한편, Mongo 4.2는 SHA 256을 사용합니다. |
Hosts |
0... |
연결할 호스트 이름 및 포트입니다. |
Composed |
0... |
스킴, 인증, 호스트, 경로 및 복제본 세트 이름을 결합하는 URI입니다. |
Certificate |
Name |
데이터베이스 배포를 위한 서비스 전용 인증서의 할당된 이름입니다 |
Certificate |
Base64 | base64 인코딩된 인증서 버전입니다. |
0...
배열에 이러한 항목이 하나 이상 있을 수 있음을 표시합니다.
연결 정보의 "구성된" 필드에 있는 URI 형식의 연결 문자열이 주어지면 많은 MongoDB 드라이버가 배포에 연결할 수 있습니다. { Cloud Databases 고가용성 MongoDB, 인스턴스를 제공하므로 연결 문자열에 모든 멤버를 포함해야 합니다. 예를 들어, 다음과 같습니다.
mongodb://admin:$PASSWORD@d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-0.databases.appdomain.cloud:30484,d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-1.databases.appdomain.cloud:30484,d5eeee66-5bc4-498a-b73b-1307848f1eac.8f7bfd8f3faa4218aec56e069eb46187-2.databases.appdomain.cloud:30484/<database name>?authSource=admin&replicaSet=replset
replicaSet
조회 매개변수에는 배치의 복제본 세트 이름이 포함되어 있습니다. 이는 replset
일 수 있습니다. 일부 드라이버 및 애플리케이션은 이를 별도로 전달해야 합니다.
다음 예에서는 연결 문자열 및 MongoDB Java 드라이버의 정보를 사용하여 데이터베이스에 연결합니다.
public class MongodbConnect {
private static Logger log = LoggerFactory.getLogger(LoggerFactory.class);
public static void main(String[] args) {
System.setProperty("javax.net.ssl.trustStore", "path/to/keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "store_password");
// make sure you append ssl=true to the connection URI
final String mongoURI = "mongodb://user:password@host:port,host:port/?authSource=admin&replicaSet=replset&ssl=true";
MongoClient mongoClient = MongoClients.create(mongoURI);
boolean testDB = false;
// this loop will continue attempting to connect to the database until the admin database is found
while (!testDB) {
try {
// check if you can connect to the database by checking for
// the presence of the admin database. If the admin databases isn't found
// then you're not connected.
MongoIterable<String> databases = mongoClient.listDatabaseNames();
for (String name: databases) {
if (name.contains("admin")) {
System.out.println("admin found...");
testDB = true;
}
}
} catch (Exception e) {
log.info(e.getMessage());
}
}
// close connection
mongoClient.close();
}
}
다음 예에서는 연결 문자열 및 Python 드라이버 pymongo의 정보를 사용하여 데이터베이스에 연결합니다. 이 예제는 오류 처리 또는 재시도 논리가 없는 단순 연결 예제일 뿐이며 프로덕션에는 적합하지 않을 수 있습니다.
import pymongo
from pymongo import MongoClient
from pymongo.errors import ConnectionFailure
client = MongoClient(
"mongodb://admin:$PASSWORD@host.databases.appdomain.cloud:30484/<database name>?authSource=adminreplicaSet=replset",
ssl=True,
ssl_ca_certs="/path/to/cert/ca-certificate.crt"
)
try:
db_list = client.list_database_names()
print("List of databases:")
print(db_list)
except ConnectionFailure as err:
print("Unable to connect to database")
이 마지막 예에서는 MongoDB Node.js 드라이버를 사용합니다.
const MongoClient = require("mongodb").MongoClient;
let connectionString = "mongodb://<username>:<password>@<host>:<port>,<host>:<port>/<database>?authSource=admin&replicaSet=replset";
let options = {
tls: true,
tlsCAFile: `/path/to/cert`,
useUnifiedTopology: true
};
// connects to a MongoDB database
MongoClient.connect(connectionString, options, function (err, db) {
if (err) {
console.log(err);
} else {
// lists the databases that exist in the deployment
db.db('example').admin().listDatabases(function(err, dbs) {
console.log(dbs.databases);
db.close();
});
}
});
드라이버 TLS 및 서비스 전용 인증서 지원
Databases for MongoDB에 대한 모든 연결에서 TLS 1.2 사용이 가능하므로, 연결에 사용하는 드라이버는 암호화를 지원할 수 있어야 합니다.
다음 암호 스위트 는 Databases for MongoDB Enterprise Edition에서 지원됩니다.
- ECDHE-ECDSA-AES128-GCM-SHA256
- ECDHE-RSA-AES128-GCM-SHA256
- ECDHE-ECDSA-AES256-GCM-SHA384
- ECDHE-RSA-AES256-GCM-SHA384
- ECDHE-ECDSA-CHACHA20-POLY1305
- ECDHE-RSA-CHACHA20-POLY1305
- DHE-RSA-AES128-GCM-SHA256
- DHE-RSA-AES256-GCM-SHA384
또한 배포에는 서비스 전용 인증서가 함께 제공되므로 드라이버가 연결 시 서버를 확인할 수 있습니다.
자세한 정보는 Cloud Databases 인증서 FAQ를 참조하십시오.
서비스 전용 인증서 사용
- 엔드포인트 패널 또는 연결 정보의 Base64 필드에서 인증서 정보를 복사하십시오.
- 필요하면, Base64 문자열을 텍스트로 디코딩하십시오.
- 파일에 인증서를 저장하십시오. (제공된 이름 또는 자체 파일 이름을 사용할 수 있습니다). *
- 드라이버 또는 클라이언트에 인증서의 경로를 제공하십시오.
*MacOS의 경우에는 신뢰 저장소로 가져온 인증서가 있는지 확인하고 인증서를 trust always
로 표시하십시오.
서비스 전용 인증서를 위한 CLI 플러그인 지원
ibmcloud cdb deployment-cacert "your-service-name"
명령으로 CLI 플러그인을 사용하여 배치에 대해 디코딩된 인증서를 표시할 수 있습니다. base64를 텍스트로 디코딩합니다. 명령의 출력을 복사하여 파일에 저장하고 드라이버에 대한 파일 경로를 제공하십시오.
기타 언어 드라이버
MongoDB에는 엄청나게 많은 언어 드라이버가 있습니다. 다음 표에서는 몇 가지 가장 일반적인 언어 드라이버를 다룹니다. 더 많은 언어를 찾고 있다면 MongoDB.org 드라이버 목록에서 확인하세요.