IBM Cloud Docs
외부 애플리케이션 연결

외부 애플리케이션 연결

애플리케이션 및 드라이버는 연결 문자열을 사용하여 IBM Cloud® Databases for MongoDB에 연결합니다. 각 배치에는 드라이버 및 애플리케이션용의 연결 문자열이 있습니다. 연결 문자열은 배포 개요의 엔드포인트 패널에 표시되며 Cloud Databases CLI 플러그인Cloud Databases API에서도 검색할 수 있습니다.

연결 문자열은 배포에서 생성한 모든 사용자가 사용할 수 있습니다. 모든 연결 및 애플리케이션에 admin 사용자를 사용할 수 있지만 애플리케이션을 연결하기 위해 특별히 사용자를 작성하는 것이 좋습니다. 자세한 내용은 연결 문자열 가져오기 를 참조하세요.

외부 응용 프로그램을 연결할 때 지원되는 드라이버만 사용하십시오.MongoDB 또는 MongoDB's 주요 커뮤니티 지원 라이브러리. Cloud Databases 에서 지원하지 않는 드라이버는 지원하지 않습니다. MongoDB.

연결 정보 사용

드라이버가 배포에 연결하는 데 필요한 모든 정보는 서비스 자격 증명 페이지에서 생성한 자격 증명의 "MongoDB" 섹션에 있습니다. 이 표에는 참조에 대한 분석이 포함되어 있습니다.

몽고DB/URI 연결 정보
필드 이름 색인 설명
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를 참조하십시오.

서비스 전용 인증서 사용

  1. 엔드포인트 패널 또는 연결 정보의 Base64 필드에서 인증서 정보를 복사하십시오.
  2. 필요하면, Base64 문자열을 텍스트로 디코딩하십시오.
  3. 파일에 인증서를 저장하십시오. (제공된 이름 또는 자체 파일 이름을 사용할 수 있습니다). *
  4. 드라이버 또는 클라이언트에 인증서의 경로를 제공하십시오.

*MacOS의 경우에는 신뢰 저장소로 가져온 인증서가 있는지 확인하고 인증서를 trust always로 표시하십시오.

서비스 전용 인증서를 위한 CLI 플러그인 지원

ibmcloud cdb deployment-cacert "your-service-name" 명령으로 CLI 플러그인을 사용하여 배치에 대해 디코딩된 인증서를 표시할 수 있습니다. base64를 텍스트로 디코딩합니다. 명령의 출력을 복사하여 파일에 저장하고 드라이버에 대한 파일 경로를 제공하십시오.

기타 언어 드라이버

MongoDB에는 엄청나게 많은 언어 드라이버가 있습니다. 다음 표에서는 몇 가지 가장 일반적인 언어 드라이버를 다룹니다. 더 많은 언어를 찾고 있다면 MongoDB.org 드라이버 목록에서 확인하세요.