다음을 통해 공유


Azure DocumentDB를 사용하여 Java 콘솔 앱 빌드

이 가이드에서는 Azure DocumentDB 클러스터에 연결하는 Java 콘솔 애플리케이션을 개발합니다. 이 가이드에는 개발 환경을 설정하고, Java용 Azure SDK의 패키지를 사용하여 azure-identity 인증하고, 데이터베이스 및 컬렉션과 상호 작용하여 문서를 관리하는 단계가 포함되어 있습니다.

필수 조건

  • Azure 구독

  • 기존 Azure DocumentDB 클러스터

콘솔 애플리케이션 구성

다음으로, 새 콘솔 애플리케이션 프로젝트를 만들고 클러스터에 인증하는 데 필요한 라이브러리를 가져옵니다.

  1. Maven 명령줄 도구를 사용하여 새 Maven 프로젝트를 만듭니다.

    mvn archetype:generate -DgroupId=com.cosmicworks -DartifactId=mongodb-console-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    
  2. 프로젝트 디렉터리로 이동합니다.

    cd mongodb-console-app
    
  3. 적절한 패키지 디렉터리에 클래스를 사용하여 Main 파일을 만듭니다.

    mkdir -p src/main/java/com/cosmicworks
    touch src/main/java/com/cosmicworks/App.java
    
  4. azure-identity pom.xml 파일에 종속성을 추가합니다.

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.15.4</version>
    </dependency>
    
  5. mongodb-driver-sync pom.xml 파일에 종속성을 추가합니다.

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

클러스터에 연결

이제 Azure.Identity 라이브러리를 사용하여 클러스터에 연결하는 데 사용할 TokenCredential을 얻으십시오. 공식 MongoDB 드라이버에는 클러스터에 연결할 때 사용할 토큰을 Microsoft Entra에서 가져오기 위해 구현해야 하는 특수 인터페이스가 있습니다.

  1. 먼저 Java 클래스 파일의 맨 위에 필요한 클래스를 가져옵니다.

    import java.util.concurrent.TimeUnit;
    
    import org.bson.Document;
    import org.bson.conversions.Bson;
    
    import com.azure.core.credential.TokenCredential;
    import com.azure.core.credential.TokenRequestContext;
    import com.azure.identity.DefaultAzureCredentialBuilder;
    import com.mongodb.MongoClientSettings;
    import com.mongodb.MongoCredential;
    import com.mongodb.MongoCredential.OidcCallbackContext;
    import com.mongodb.MongoCredential.OidcCallbackResult;
    import com.mongodb.client.MongoClient;
    import com.mongodb.client.MongoClients;
    import com.mongodb.client.MongoCollection;
    import com.mongodb.client.MongoDatabase;
    import com.mongodb.client.model.Filters;
    import com.mongodb.client.model.ReplaceOptions;
    import com.mongodb.client.result.UpdateResult;
    
  2. 기본 메서드에서 DefaultAzureCredential 인스턴스를 생성하고 OIDC(OpenID Connect) 콜백을 설정하여 토큰을 가져옵니다.

    TokenCredential credential = new DefaultAzureCredentialBuilder().build();
    
    MongoCredential.OidcCallback oidcCallback = new MongoCredential.OidcCallback() {
        @Override
        public OidcCallbackResult onRequest(OidcCallbackContext context) {
            TokenRequestContext tokenRequestContext = new TokenRequestContext()
                    .addScopes("https://ossrdbms-aad.database.windows.net/.default");
            String token = credential.getTokenSync(tokenRequestContext).getToken();
            return new OidcCallbackResult(token);
        }
    };
    
  3. 이전에 정의된 콜백을 사용하여 MongoCredential의 새 인스턴스를 만듭니다.

    MongoCredential mongoCredential = MongoCredential.createOidcCredential(null)
            .withMechanismProperty("OIDC_CALLBACK", oidcCallback);
    
  4. 클러스터 이름 및 전체 호스트 엔드포인트에 대한 변수를 만듭니다.

    String clusterName = "<azure-documentdb-cluster-name>";
    String host = clusterName + ".global.mongocluster.cosmos.azure.com";
    
  5. MongoClientSettings 호스트, 연결 모범 사례 및 자격 증명을 사용하여 인스턴스를 생성합니다.

    MongoClientSettings settings = MongoClientSettings.builder()
            .applyToClusterSettings(builder -> builder
                    .srvHost(host))
            .applyToSocketSettings(builder -> builder
                    .connectTimeout(2, TimeUnit.MINUTES))
            .applyToSslSettings(builder -> builder
                    .enabled(true))
            .retryWrites(true)
            .credential(mongoCredential)
            .build();
    
  6. 생성된 설정을 사용하여 새 MongoClient 설정을 만듭니다.

    MongoClient client = MongoClients.create(settings);
    
    System.out.println("Client created");
    

일반 작업 수행

마지막으로, 공식 라이브러리를 사용하여 데이터베이스, 컬렉션 및 문서와 함께 일반적인 작업을 수행합니다. 여기서는 MongoDB 또는 DocumentDB와 상호 작용하는 데 사용하는 것과 동일한 클래스와 메서드를 사용하여 컬렉션과 항목을 관리합니다.

  1. databasecollection에 대한 참조를 가져옵니다.

    MongoDatabase database = client.getDatabase("<database-name>");
    
    System.out.println("Database pointer created");
    
    MongoCollection<Document> collection = database.getCollection("<collection-name>");
    
    System.out.println("Collection pointer created");
    
  2. Product 클래스를 사용하여 문서를 나타냅니다.

    public class Product {
        private String _id;
        private String category;
        private String name;
        private int quantity;
        private double price;
        private boolean clearance;
    
        // Getters and setters ommitted for brevity
    }
    
  3. collection.replaceOne을 사용하여 upsert를 활성화한 새 문서를 만듭니다.

    Document document = new Document()
            .append("_id", "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb")
            .append("category", "gear-surf-surfboards")
            .append("name", "Yamba Surfboard")
            .append("quantity", 12)
            .append("price", 850.00)
            .append("clearance", false);
    
    Bson match = Filters.eq("_id", "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb");
    
    ReplaceOptions options = new ReplaceOptions().upsert(true);
    UpdateResult result = collection.replaceOne(match, document, options);
    
    System.out.println("Document upserted with _id:\\t" + result.getUpsertedId().asString().getValue());
    
  4. 단일 문서와 고유 식별자를 사용하여 collection.find 조회를 수행합니다.

    Bson filter = Filters.eq("_id", "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb");
    
    collection.find(filter).forEach(doc -> {
        System.out.println("Read document _id:\\t" + doc.toJson());
    });
    
  5. BSON(이진 JSON) 필터를 사용하여 일반 쿼리를 수행합니다.

    Bson query = Filters.eq("category", "gear-surf-surfboards");
    
    collection.find(query).forEach(doc -> {
        System.out.println("Found document:\\t" + doc.toJson());
    });
    
  6. 필터와 collection.deleteMany를 사용하여 문서 삭제하기.

    Bson filter = Filters.eq("clearance", true);
    collection.deleteMany(filter);