MongoDB Java 드라이버를 사용하여 Amazon DocumentDB에 연결 - Amazon DocumentDB

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

MongoDB Java 드라이버를 사용하여 Amazon DocumentDB에 연결

이 섹션에서는 Java 드라이버를 사용하여 Amazon DocumentDB에 연결하기 위한 step-by-step 가이드를 제공합니다. 그러면 DocumentDB를 Java 애플리케이션에 통합하는 작업을 시작할 수 있습니다.

1단계: 프로젝트 설정

  1. Maven을 사용하여 java 프로젝트를 생성합니다.

    mvn archetype:generate -DgroupId=com.docdb.guide -DartifactId=my-docdb-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
  2. MongoDB Java 드라이버를 'pom.xml' 파일의 프로젝트에 대한 종속성으로 추가합니다.

    <dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>5.3.0</version> </dependency>

2단계: 연결 문자열 생성

Amazon DocumentDB 연결 문자열은 애플리케이션과 DocumentDB 클러스터 간에 연결을 설정하는 데 필수적입니다. 이 문자열은 클러스터 엔드포인트, 포트, 인증 세부 정보 및 다양한 연결 옵션과 같은 중요한 정보를 캡슐화합니다. DocumentDB 연결 문자열을 빌드하려면 일반적으로 기본 형식으로 시작합니다.

"mongodb://username:password@cluster-endpoint:port/?[connection options]"

"사용자 이름" 및 "암호"를 실제 자격 증명으로 바꿔야 합니다. AWS Management Console 뿐만 아니라 에서도 클러스터의 엔드포인트와 포트 번호를 찾을 수 있습니다 AWS CLI. 클러스터의 클러스터 엔드포인트를 찾으클러스터 엔드포인트 찾기려면 섹션을 참조하세요. DocumentDB의 기본 포트는 27017입니다.

연결 문자열 예제

  • 전송 중 암호화를 사용하여 DocumentDB에 연결하고 읽기 요청이 읽기 전용 복제본으로 이동하고 프라이머리에 쓰기를 수행하도록 합니다.

    "mongodb://username:password@cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false"
  • IAM 인증을 사용하여 DocumentDB에 연결:

    "mongodb://cluster-endpoint:27017/?tls=true& tlsCAFile=global-bundle.pem& readPreference=secondaryPreferred& retryWrites=false& authSource=%24external& authMechanism=MONGODB-AWS"

연결 문자열에 사용할 수 있는 다양한 옵션은 다음과 같습니다.

TLS 인증서

tls=true|false -이 옵션은 전송 계층 보안(TLS)을 활성화하거나 비활성화합니다. 기본적으로 Amazon DocumentDB 클러스터에서 전송 중 암호화가 활성화되므로 클러스터 수준에서 TLS가 비활성화되지 않는 한이 옵션의 값은 여야 합니다true.

TLS를 사용하는 경우 코드는 DocumentDB 클러스터에 대한 연결을 생성할 때 SSL 인증서를 제공해야 합니다. 클러스터에 안전하게 연결하는 데 필요한 인증서를 다운로드합니다global-bundle.pem. global-bundle.pem 파일을 사용하는 방법에는 두 가지가 있습니다.

  • 옵션 1 - global-bundle.pem 파일에서 모든 인증서를 추출하고 Java의 keytool을 사용하여 나중에 코드에서 사용할 수 있는 .jks 파일에 저장합니다. 이 작업을 수행하는 방법을 보여주는 스크립트는 TLS가 활성화된 상태에서 연결의 Java 탭을 참조하세요.

  • 옵션 2 - 코드에 global-bundle.pem 파일을 동적으로 추가하고, 인 메모리 키 스토어를 빌드하고, SSLContext를 사용하여 연결의 일부로 인증서를 제공합니다.

읽기 전용 복제본에서 읽기

replicaSet=rs0&readPreference=secondaryPreferred -이 두 옵션을 지정하면 모든 읽기 요청이 읽기 전용 복제본으로 라우팅되고 쓰기 요청이 기본 인스턴스로 라우팅됩니다. 연결 문자열replicaSet=rs0에서를 사용하면 MongoDB 드라이버가 클러스터 토폴로지의 자동 업데이트된 보기를 유지하여 인스턴스가 추가되거나 제거될 때 애플리케이션이 현재 노드 구성의 가시성을 유지할 수 있습니다. 이러한 옵션을 제공하지 않거나를 지정하지 않으면 모든 읽기 및 쓰기가 기본 인스턴스로 readPreference=primary 전송됩니다. 에 대한 추가 옵션은 섹션을 readPreference참조하세요읽기 기본 설정 옵션.

문제 작성 및 저널링

쓰기 문제에 따라 쓰기 작업을 위해 데이터베이스에서 요청된 승인 수준이 결정됩니다. MongoDB 드라이버는 쓰기 문제 및 저널 파일을 조정할 수 있는 옵션을 제공합니다. Amazon DocumentDB는 쓰기 문제 및 저널을 설정할 것으로 예상하지 않으며 및 w j (writeConcern 및 )에 대해 전송된 값을 무시합니다journal. DocumentDB는 항상 writeConcern: majorityjournal:를 사용하여 데이터를 기록true하므로 클라이언트에 승인을 보내기 전에 대부분의 노드에 쓰기가 내구성 있게 기록됩니다.

RetryWrites

retryWrites=false - DocumentDB는 재시도 가능한 쓰기를 지원하지 않으므로이 속성은 항상 로 설정해야 합니다false.

IAM 인증.

authSource=%24externalauthMechanism=MONGODB-AWS -이 두 파라미터는를 사용하여 인증하는 데 사용됩니다 AWS Identity and Access Management. IAM 인증은 현재 인스턴스 기반 클러스터 버전 5.0에서만 사용할 수 있습니다. 자세한 내용은 IAM 자격 증명을 사용한 인증 단원을 참조하십시오.

연결 풀

연결 풀링에 사용할 수 있는 옵션은 다음과 같습니다.

  • maxPoolSize - 풀에서 생성할 수 있는 최대 연결 수를 설정합니다. 모든 연결이 사용 중이고 새 요청이 들어오면 연결을 사용할 수 있을 때까지 기다립니다. MongoDB Java 드라이버의 기본값은 100입니다.

  • minPoolSize - 풀에서 항상 유지해야 하는 최소 연결 수를 나타냅니다. MongoDB Java 드라이버의 기본값은 0입니다.

  • maxIdleTimeMS - 연결을 닫고 제거하기 전에 풀에서 연결을 유휴 상태로 유지할 수 있는 기간을 결정합니다. MongoDB Java 드라이버의 기본값은 100밀리초입니다.

  • waitQueueTimeoutMS - 풀이 최대 크기일 때 스레드가 연결을 사용할 수 있을 때까지 기다려야 하는 시간을 구성합니다. 이 시간 내에 연결을 사용할 수 없는 경우 예외가 발생합니다. MongoDB Java 드라이버의 기본값은 120,000밀리초(2분)입니다.

연결 제한 시간 파라미터

제한 시간은 작업 또는 연결 시도가 실패로 간주되기까지 걸릴 수 있는 시간을 제한하는 메커니즘입니다. 무기한 대기를 방지하고 리소스 할당을 관리하는 데 사용할 수 있는 제한 시간 파라미터는 다음과 같습니다.

  • connectTimeoutMS - 드라이버가 클러스터에 대한 연결을 설정하기 위해 대기하는 시간을 구성합니다. 기본값은 10,000밀리초(10초)입니다.

  • socketTimeoutMS - 드라이버가 비쓰기 작업을 위해 서버의 응답을 기다리는 시간을 지정합니다. 기본값은 0입니다(제한 시간 없음 또는 무한).

  • serverSelectionTimeoutMS - 드라이버가 클러스터에서 사용 가능한 서버를 찾기 위해 대기하는 시간을 지정합니다. 이 설정의 기본값은 30초이며 장애 조치 중에 새 기본 인스턴스를 선택하기에 충분합니다.

3단계: 연결 코드 작성

다음 코드 예제에서는 Amazon DocumentDB에 TLS를 연결하는 방법을 보여줍니다.

public static MongoClient makeDbConnection(String dbName, String DbUserName, String DbPassword, String DbClusterEndPoint, String keyStorePass) throws Exception { MongoClient connectedClient; String connectionOptions = "?replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false"; String connectionUrl = "mongodb://" + DbUserName + ":" + DbPassword + "@" + DbClusterEndPoint + ":27017/" + dbName + connectionOptions; try { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); try (FileInputStream fis = new FileInputStream("src/main/resources/certs/truststore.jks")) { trustStore.load(fis, keyStorePass.toCharArray()); TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(trustStore); SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); sslContext.init(null, tmf.getTrustManagers(), new SecureRandom()); ConnectionString connectionString = new ConnectionString(connectionUrl); MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(connectionString) .applyToSslSettings(builder - > { builder.enabled(true); builder.context(sslContext); }) .build(); connectedClient = MongoClients.create(settings); } return connectedClient; } catch (MongoException e5) { throw new RuntimeException(e5); } catch (Exception e) { throw new RuntimeException(e); } }

4단계: 연결 예외 처리

Java 애플리케이션에서 DocumentDB로 작업할 때 강력하고 안정적인 데이터베이스 작업을 유지하려면 연결 예외를 처리하는 것이 중요합니다. 이러한 예외를 적절하게 관리하면 문제를 신속하게 진단하는 데 도움이 될 뿐만 아니라 애플리케이션이 임시 네트워크 중단 또는 서버 가용성을 정상적으로 처리할 수 있으므로 안정성과 사용자 경험이 향상됩니다. 연결 설정과 관련된 몇 가지 중요한 예외는 다음과 같습니다.

  • MongoException - 일반적인 예외 및는 보다 구체적인 예외가 적용되지 않는 다양한 시나리오에서 발행될 수 있습니다. 이 예외는 모든 MongoDB 예외를 일반적으로 포착하기 때문에 다른 모든 특정 예외 이후에 처리되어야 합니다.

  • MongoTimeoutException - 작업 시간이 초과될 때 발생합니다. 존재하지 않는 클러스터 엔드포인트를 쿼리하는 경우를 예로 들 수 있습니다.

  • MongoSocketException - 네트워크 관련 문제에 대해 발급됩니다. 예를 들어 작업 중 갑작스러운 네트워크 연결 해제가 있습니다.

  • MongoSecurityException - 인증이 실패할 때 발생합니다. 예를 들어 잘못된 자격 증명으로 연결합니다.

  • MongoConfigurationException - 클라이언트 구성에 오류가 있을 때 발생합니다. 예를 들어 잘못된 연결 문자열을 사용합니다.

5단계: 코드 실행

다음 코드 샘플은 Amazon DocumentDB 연결을 생성하고 모든 데이터베이스를 인쇄합니다.

public static void TestConnection() { try (MongoClient mongoClient = makeDbConnection(DATABASE_NAME, DB_USER_NAME, DB_PASSWORD, DB_CLUSTER_ENDPOINT, KEYSTORE_PASSWORD)) { List < String > databases = mongoClient.listDatabaseNames().into(new ArrayList < > ()); System.out.println("Databases: " + databases); } catch (MongoException e) { System.err.println("MongoDB error: " + e.getMessage()); throw new RuntimeException(e); } }

연결 모범 사례

다음은 MongoDB Java 드라이버를 사용하여 Amazon DocumentDB에 연결할 때 고려해야 할 모범 사례입니다.

  • 클라이언트가 더 이상 리소스를 릴리스할 필요가 없는 MongoClient 경우 항상를 닫습니다.

  • 예외를 적절하게 처리하고 적절한 오류 로깅을 구현합니다.

  • 환경 변수 또는 AWS Secrets Manager 를 사용하여 사용자 이름 및 암호와 같은 민감한 정보를 저장합니다.