이 가이드에서는 Azure DocumentDB 클러스터에 연결하는 Java 콘솔 애플리케이션을 개발합니다. 이 가이드에는 개발 환경을 설정하고, Java용 Azure SDK의 패키지를 사용하여 azure-identity 인증하고, 데이터베이스 및 컬렉션과 상호 작용하여 문서를 관리하는 단계가 포함되어 있습니다.
필수 조건
Azure 구독
- Azure 구독이 없는 경우 체험 계정 만들기
기존 Azure DocumentDB 클러스터
- 클러스터가 없는 경우 새 클러스터를 만듭니다.
Bash 환경을 Azure Cloud Shell에서 사용합니다. 자세한 내용은 Azure Cloud Shell 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치하십시오. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 인증을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI로 확장 사용 및 관리를 참조하세요.
az version을 실행하여 설치된 버전과 관련 종속 라이브러리를 확인합니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
클러스터에 대해 Microsoft Entra 인증이 구성되었으며 ID에
root역할이 부여되었습니다.- Microsoft Entra 인증을 사용하도록 설정하려면 구성 가이드를 검토합니다.
콘솔 애플리케이션 구성
다음으로, 새 콘솔 애플리케이션 프로젝트를 만들고 클러스터에 인증하는 데 필요한 라이브러리를 가져옵니다.
Maven 명령줄 도구를 사용하여 새 Maven 프로젝트를 만듭니다.
mvn archetype:generate -DgroupId=com.cosmicworks -DartifactId=mongodb-console-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false프로젝트 디렉터리로 이동합니다.
cd mongodb-console-app적절한 패키지 디렉터리에 클래스를 사용하여 새
Main파일을 만듭니다.mkdir -p src/main/java/com/cosmicworks touch src/main/java/com/cosmicworks/App.javaazure-identitypom.xml 파일에 종속성을 추가합니다.<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.15.4</version> </dependency>mongodb-driver-syncpom.xml 파일에 종속성을 추가합니다.<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>5.4.0</version> </dependency>
클러스터에 연결
이제 Azure.Identity 라이브러리를 사용하여 클러스터에 연결하는 데 사용할 TokenCredential을 얻으십시오. 공식 MongoDB 드라이버에는 클러스터에 연결할 때 사용할 토큰을 Microsoft Entra에서 가져오기 위해 구현해야 하는 특수 인터페이스가 있습니다.
먼저 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;기본 메서드에서
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); } };이전에 정의된 콜백을 사용하여
MongoCredential의 새 인스턴스를 만듭니다.MongoCredential mongoCredential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", oidcCallback);클러스터 이름 및 전체 호스트 엔드포인트에 대한 변수를 만듭니다.
String clusterName = "<azure-documentdb-cluster-name>"; String host = clusterName + ".global.mongocluster.cosmos.azure.com";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();생성된 설정을 사용하여 새
MongoClient설정을 만듭니다.MongoClient client = MongoClients.create(settings); System.out.println("Client created");
일반 작업 수행
마지막으로, 공식 라이브러리를 사용하여 데이터베이스, 컬렉션 및 문서와 함께 일반적인 작업을 수행합니다. 여기서는 MongoDB 또는 DocumentDB와 상호 작용하는 데 사용하는 것과 동일한 클래스와 메서드를 사용하여 컬렉션과 항목을 관리합니다.
database및collection에 대한 참조를 가져옵니다.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");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 }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());단일 문서와 고유 식별자를 사용하여
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()); });BSON(이진 JSON) 필터를 사용하여 일반 쿼리를 수행합니다.
Bson query = Filters.eq("category", "gear-surf-surfboards"); collection.find(query).forEach(doc -> { System.out.println("Found document:\\t" + doc.toJson()); });필터와
collection.deleteMany를 사용하여 문서 삭제하기.Bson filter = Filters.eq("clearance", true); collection.deleteMany(filter);