구조화되지 않은 데이터를 저장, 관리 및 쿼리하기 위해 Java용 Apache Cassandra용 Azure Cosmos DB 클라이언트 라이브러리를 시작합니다. 이 가이드의 단계에 따라 새 계정을 만들고, Java 클라이언트 라이브러리를 설치하고, 계정에 연결하고, 일반적인 작업을 수행하고, 최종 샘플 데이터를 쿼리합니다.
API 참조 설명서 | 라이브러리 소스 코드 | 패키지(Maven)
필수 조건
Azure 구독
- Azure 구독이 없는 경우, 시작하기 전에 무료 계정을 만드십시오.
Azure Cloud Shell에서 최신 버전의 Azure CLI입니다.
- CLI 참조 명령을 로컬로 실행하려면 명령을 사용하여 Azure CLI에 로그인합니다
az login.
- CLI 참조 명령을 로컬로 실행하려면 명령을 사용하여 Azure CLI에 로그인합니다
- Java 21 이상
설치
먼저 이 가이드에 대한 계정 및 개발 환경을 설정합니다. 이 섹션에서는 계정을 만들고 자격 증명을 얻은 다음 개발 환경을 준비하는 프로세스를 안내합니다.
계정 만들기
먼저 Apache Cassandra 계정에 대한 API를 만듭니다. 계정이 만들어지면 키스페이스 및 테이블 리소스를 만듭니다.
대상 리소스 그룹이 아직 없는 경우 이 명령을 사용하여
az group create구독에 새 리소스 그룹을 만듭니다.az group create \ --name "<resource-group-name>" \ --___location "<___location>"이
az cosmosdb create명령을 사용하여 기본 설정으로 Apache Cassandra용 새 Azure Cosmos DB 계정을 만듭니다.az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<___location>" \ --capabilities "EnableCassandra"az cosmosdb cassandra keyspace create을 사용하여cosmicworks라는 새 키스페이스를 생성합니다.az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"여러 줄 Bash 명령을 사용하여 스키마를 나타내는 새 JSON 개체를 만듭니다. 그런 다음,
az cosmosdb cassandra table create명령을 사용하여products이라는 새 테이블을 만듭니다.schemaJson=$(cat <<EOF { "columns": [ { "name": "id", "type": "text" }, { "name": "name", "type": "text" }, { "name": "category", "type": "text" }, { "name": "quantity", "type": "int" }, { "name": "price", "type": "decimal" }, { "name": "clearance", "type": "boolean" } ], "partitionKeys": [ { "name": "id" } ] } EOF )az cosmosdb cassandra table create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --keyspace-name "cosmicworks" \ --name "product" \ --schema "$schemaJson"
자격 증명 가져오기
이제 최근에 만든 계정에 대한 연결을 만드는 데 사용할 클라이언트 라이브러리의 암호를 가져옵니다.
계정의 연락처 지점 및 사용자 이름을 가져오는 데 사용합니다
az cosmosdb show.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"이전 명령 출력의
contactPoint값 및username속성을 기록합니다. 이러한 속성의 값은 이 가이드를 진행할 때 라이브러리를 사용하여 계정에 연결하는 데 사용하는 연락처 와 사용자 이름입니다.계정의
az cosmosdb keys list가져오는 데 사용합니다.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"이전 명령의
primaryMasterKey출력에서 속성 값을 기록합니다. 이 속성의 값은 이 가이드의 뒷부분에서 라이브러리를 사용하여 계정에 연결하는 데 사용하는 암호 입니다.
개발 환경 준비
그런 다음 새 프로젝트 및 클라이언트 라이브러리를 사용하여 개발 환경을 구성합니다. 이 단계는 이 가이드의 나머지 단계로 넘어가기 전에 마지막으로 필요한 필수 구성 요소입니다.
빈 디렉터리에서 시작합니다.
Maven을 사용하여 새 Java 콘솔 프로젝트를 생성합니다.
mvn archetype:generate -DgroupId=quickstart -DartifactId=console -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=falsejava-driver-coreMaven에서 패키지를 가져옵니다. 이 섹션을 pom.xml 파일에 추가합니다.<dependency> <groupId>org.apache.cassandra</groupId> <artifactId>java-driver-core</artifactId> <version>[4.,)</version> </dependency>/console/src/main/java/quickstart/App.java 파일을 엽니다.
기존 Java 애플리케이션 보일러플레이트 코드를 살펴보십시오.
package quickstart; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } }상용구에서 메모와 콘솔 출력을 제거합니다. 이 코드 블록은 이 가이드의 나머지 부분에 대한 시작점입니다.
package quickstart; public class App { public static void main(String[] args) { } }네임스페이스를
java.security.NoSuchAlgorithmException가져옵니다.import java.security.NoSuchAlgorithmException;메서드
main서명을 업데이트하여NoSuchAlgorithmException예외를 throw할 수 있음을 나타내세요.public static void main(String[] args) throws NoSuchAlgorithmException { }중요합니다
이 가이드의 나머지 단계에서는
main메서드 내에서 코드를 추가한다고 가정합니다.프로젝트를 빌드합니다.
mvn compile
개체 모델
| 설명 | |
|---|---|
CqlSession |
클러스터에 대한 특정 연결을 나타냅니다. |
PreparedStatement |
여러 번 효율적으로 실행할 수 있는 미리 컴파일된 CQL 문을 나타냅니다. |
BoundStatement |
매개변수가 바인드된 준비된 문을 나타냅니다. |
Row |
쿼리 결과의 단일 행을 나타냅니다. |
코드 예제
클라이언트 인증
먼저 이 가이드의 앞부분에서 수집한 자격 증명을 사용하여 클라이언트를 인증합니다.
IDE(통합 개발 환경)에서 /console/src/main/java/quickstart/App.java 파일을 엽니다.
다음 형식을 가져옵니다.
java.net.InetSocketAddressjavax.net.ssl.SSLContextcom.datastax.oss.driver.api.core.CqlIdentifiercom.datastax.oss.driver.api.core.CqlSessioncom.datastax.oss.driver.api.core.cql.BoundStatementcom.datastax.oss.driver.api.core.cql.PreparedStatementcom.datastax.oss.driver.api.core.cql.ResultSetcom.datastax.oss.driver.api.core.cql.Row
import java.net.InetSocketAddress; import javax.net.ssl.SSLContext; import com.datastax.oss.driver.api.core.CqlIdentifier; import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.cql.BoundStatement; import com.datastax.oss.driver.api.core.cql.PreparedStatement; import com.datastax.oss.driver.api.core.cql.ResultSet; import com.datastax.oss.driver.api.core.cql.Row;이 가이드의 앞부분에서 수집된 자격 증명에 대한 문자열 변수를 만듭니다. 변수
username,password, 및contactPoint의 이름을 지정하세요. 또한 로컬 데이터 센터의 이름이 지정된region문자열 변수를 만듭니다.String username = "<username>"; String password = "<password>"; String contactPoint = "<contact-point>";Azure Cosmos DB for Apache Cassandra 계정을 만든 지역에 대한 또 다른 문자열 변수를 만듭니다. 이 변수의 이름을 지정합니다
region.String region = "<region>";SSLContextTLS(전송 계층 보안) 프로토콜을 사용하는지 확인하는 개체를 만듭니다.SSLContext sslContext = SSLContext.getDefault();이전 단계에서 만든 자격 증명 및 구성 변수를 사용하여 새
CqlSession개체를 만듭니다. 연락처 지점, 로컬 데이터 센터, 인증 자격 증명, 키스페이스 및 TLS(전송 계층 보안) 컨텍스트를 설정합니다.CqlSession session = CqlSession.builder() .addContactPoint(new InetSocketAddress(contactPoint, 10350)) .withLocalDatacenter(region) .withAuthCredentials(username, password) .withKeyspace(CqlIdentifier.fromCql("cosmicworks")) .withSslContext(sslContext) .build();
경고
인증을 간소화하기 위해 이 가이드에서는 TLS(전체 전송 계층 보안) 유효성 검사를 사용할 수 없습니다. 프로덕션 배포의 경우 유효성 검사를 완전히 사용하도록 설정합니다.
데이터 Upsert
다음으로 새 데이터를 테이블에 업서트합니다. Upserting은 동일한 데이터가 테이블에 이미 있는지 여부에 따라 데이터를 적절하게 만들거나 바꿉니다.
이 가이드의 앞부분에서 만든 테이블에 해당하는 필드로 명명
Product된 새 클래스를 정의합니다.class Product { public String id; public String name; public String category; public int quantity; public boolean clearance; public Product(String id, String name, String category, int quantity, boolean clearance) { this.id = id; this.name = name; this.category = category; this.quantity = quantity; this.clearance = clearance; } @Override public String toString() { return String.format("Product{id='%s', name='%s', category='%s', quantity=%d, clearance=%b}", id, name, category, quantity, clearance); } }팁 (조언)
Java에서는 이 형식을 다른 파일에 만들거나 기존 파일의 끝에 만들 수 있습니다.
형식의 새 개체를 만듭니다
Product. 개체를 변수product에 저장합니다.Product product = new Product( "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "Yamba Surfboard", "gear-surf-surfboards", 12, false );새 행을 삽입하기 위해 CQL(Cassandra Query Language) 쿼리로 명명된
insertQuery새 문자열 변수를 만듭니다.String insertQuery = "INSERT INTO product (id, name, category, quantity, clearance) VALUES (?, ?, ?, ?, ?)";insert 문을 준비하고 제품 속성을 매개 변수로 바인딩합니다.
PreparedStatement insertStmt = session.prepare(insertQuery); BoundStatement boundInsert = insertStmt.bind( product.id, product.name, product.category, product.quantity, product.clearance );바인딩된 문을 실행하여 제품을 Upsert합니다.
session.execute(boundInsert);
데이터 읽기
그런 다음, 이전에 테이블에 업서트된 데이터를 읽습니다.
동일한
readQuery필드가 있는 항목과 일치하는 CQL 쿼리를 사용하여 명명된id새 문자열 변수를 만듭니다.String readQuery = "SELECT * FROM product WHERE id = ? LIMIT 1";이 가이드의 앞부분에서 만든 제품과 동일한 값으로 명명된
id문자열 변수를 만듭니다.String id = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb";문을 준비하고 제품의
id필드를 매개 변수로 바인딩합니다.PreparedStatement readStmt = session.prepare(readQuery); BoundStatement boundRead = readStmt.bind(id);바인딩된 문을 실행하고 결과를 변수
readResult에 저장합니다.ResultSet readResult = session.execute(boundRead);결과 집합에서 첫 번째 행을 찾아 발견되면
Product개체에 매핑합니다.Row row = readResult.one(); Product matchedProduct = new Product( row.getString("id"), row.getString("name"), row.getString("category"), row.getInt("quantity"), row.getBoolean("clearance") );
쿼리 데이터
이제 쿼리를 사용하여 테이블의 특정 필터와 일치하는 모든 데이터를 찾습니다.
동일한
findQuery필드가 있는 항목과 일치하는 CQL 쿼리를 사용하여 명명된category새 문자열 변수를 만듭니다.String findQuery = "SELECT * FROM product WHERE category = ? ALLOW FILTERING";이 가이드의 앞부분에서 만든 제품과 동일한 값으로 명명된
id문자열 변수를 만듭니다.String category = "gear-surf-surfboards";명령문을 준비하고 제품 범주를 매개 변수로 결합시킵니다.
PreparedStatement findStmt = session.prepare(findQuery); BoundStatement boundFind = findStmt.bind(category);바인딩된 문을 실행하고 결과를 변수
findResults에 저장합니다.ResultSet results = session.execute(boundFind);쿼리 결과를 반복하고 각 행을 개체에
Product매핑합니다.for (Row result : results) { Product queriedProduct = new Product( result.getString("id"), result.getString("name"), result.getString("category"), result.getInt("quantity"), result.getBoolean("clearance") ); // Do something here with each result }
세션 닫기(&S)
Java에서는 쿼리 및 작업을 완료한 후 세션을 닫아야 합니다.
session.close();
코드 실행
애플리케이션 디렉터리의 터미널을 사용하여 새로 만든 애플리케이션을 실행합니다.
mvn compile
mvn exec:java -Dexec.mainClass="quickstart.App"
팁 (조언)
이 가이드 내에서 만든 /console 경로 내에서 이 명령을 실행하고 있는지 확인합니다.
자원을 정리하세요
이제 최근에 만든 계정에 대한 연결을 만드는 데 사용할 클라이언트 라이브러리의 암호를 가져옵니다.
계정의 연락처 지점 및 사용자 이름을 가져오는 데 사용합니다
az cosmosdb show.az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"이전 명령 출력의
contactPoint값 및username속성을 기록합니다. 이러한 속성의 값은 이 가이드를 진행할 때 라이브러리를 사용하여 계정에 연결하는 데 사용하는 연락처 와 사용자 이름입니다.계정의
az cosmosdb keys list가져오는 데 사용합니다.az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"이전 명령의
primaryMasterKey출력에서 속성 값을 기록합니다. 이 속성의 값은 이 가이드의 뒷부분에서 라이브러리를 사용하여 계정에 연결하는 데 사용하는 암호 입니다.