다음을 통해 공유


빠른 시작: Java용 Apache Cassandra용 Azure Cosmos DB 클라이언트 라이브러리

구조화되지 않은 데이터를 저장, 관리 및 쿼리하기 위해 Java용 Apache Cassandra용 Azure Cosmos DB 클라이언트 라이브러리를 시작합니다. 이 가이드의 단계에 따라 새 계정을 만들고, Java 클라이언트 라이브러리를 설치하고, 계정에 연결하고, 일반적인 작업을 수행하고, 최종 샘플 데이터를 쿼리합니다.

API 참조 설명서 | 라이브러리 소스 코드 | 패키지(Maven)

필수 조건

  • Azure 구독

    • Azure 구독이 없는 경우, 시작하기 전에 무료 계정을 만드십시오.
  • Azure Cloud Shell에서 최신 버전의 Azure CLI입니다.

    • CLI 참조 명령을 로컬로 실행하려면 명령을 사용하여 Azure CLI에 로그인합니다 az login .
  • Java 21 이상

설치

먼저 이 가이드에 대한 계정 및 개발 환경을 설정합니다. 이 섹션에서는 계정을 만들고 자격 증명을 얻은 다음 개발 환경을 준비하는 프로세스를 안내합니다.

계정 만들기

먼저 Apache Cassandra 계정에 대한 API를 만듭니다. 계정이 만들어지면 키스페이스 및 테이블 리소스를 만듭니다.

  1. 대상 리소스 그룹이 아직 없는 경우 이 명령을 사용하여 az group create 구독에 새 리소스 그룹을 만듭니다.

    az group create \
        --name "<resource-group-name>" \
        --___location "<___location>"
    
  2. az cosmosdb create 명령을 사용하여 기본 설정으로 Apache Cassandra용 새 Azure Cosmos DB 계정을 만듭니다.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --locations "regionName=<___location>" \
        --capabilities "EnableCassandra"
    
  3. az cosmosdb cassandra keyspace create을 사용하여 cosmicworks라는 새 키스페이스를 생성합니다.

    az cosmosdb cassandra keyspace create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --name "cosmicworks"
    
  4. 여러 줄 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"
    

자격 증명 가져오기

이제 최근에 만든 계정에 대한 연결을 만드는 데 사용할 클라이언트 라이브러리의 암호를 가져옵니다.

  1. 계정의 연락처 지점 및 사용자 이름을 가져오는 데 사용합니다 az cosmosdb show .

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{username:name,contactPoint:documentEndpoint}"
    
  2. 이전 명령 출력의 contactPoint 값 및 username 속성을 기록합니다. 이러한 속성의 값은 이 가이드를 진행할 때 라이브러리를 사용하여 계정에 연결하는 데 사용하는 연락처사용자 이름입니다.

  3. 계정의 az cosmosdb keys list 가져오는 데 사용합니다.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. 이전 명령의 primaryMasterKey 출력에서 속성 값을 기록합니다. 이 속성의 값은 이 가이드의 뒷부분에서 라이브러리를 사용하여 계정에 연결하는 데 사용하는 암호 입니다.

개발 환경 준비

그런 다음 새 프로젝트 및 클라이언트 라이브러리를 사용하여 개발 환경을 구성합니다. 이 단계는 이 가이드의 나머지 단계로 넘어가기 전에 마지막으로 필요한 필수 구성 요소입니다.

  1. 빈 디렉터리에서 시작합니다.

  2. Maven을 사용하여 새 Java 콘솔 프로젝트를 생성합니다.

    mvn archetype:generate -DgroupId=quickstart -DartifactId=console -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    
  3. java-driver-core Maven에서 패키지를 가져옵니다. 이 섹션을 pom.xml 파일에 추가합니다.

    <dependency>
      <groupId>org.apache.cassandra</groupId>
      <artifactId>java-driver-core</artifactId>
      <version>[4.,)</version>
    </dependency>
    
  4. /console/src/main/java/quickstart/App.java 파일을 엽니다.

  5. 기존 Java 애플리케이션 보일러플레이트 코드를 살펴보십시오.

    package quickstart;
    
    /**
     * Hello world!
     *
     */
    public class App 
    {
        public static void main( String[] args )
        {
            System.out.println( "Hello World!" );
        }
    }
    
  6. 상용구에서 메모와 콘솔 출력을 제거합니다. 이 코드 블록은 이 가이드의 나머지 부분에 대한 시작점입니다.

    package quickstart;
    
    public class App 
    {
        public static void main(String[] args)
        {
        }
    }
    
  7. 네임스페이스를 java.security.NoSuchAlgorithmException 가져옵니다.

    import java.security.NoSuchAlgorithmException;
    
  8. 메서드 main 서명을 업데이트하여 NoSuchAlgorithmException 예외를 throw할 수 있음을 나타내세요.

    public static void main(String[] args) throws NoSuchAlgorithmException
    {    
    }
    

    중요합니다

    이 가이드의 나머지 단계에서는 main 메서드 내에서 코드를 추가한다고 가정합니다.

  9. 프로젝트를 빌드합니다.

    mvn compile
    

개체 모델

설명
CqlSession 클러스터에 대한 특정 연결을 나타냅니다.
PreparedStatement 여러 번 효율적으로 실행할 수 있는 미리 컴파일된 CQL 문을 나타냅니다.
BoundStatement 매개변수가 바인드된 준비된 문을 나타냅니다.
Row 쿼리 결과의 단일 행을 나타냅니다.

코드 예제

클라이언트 인증

먼저 이 가이드의 앞부분에서 수집한 자격 증명을 사용하여 클라이언트를 인증합니다.

  1. IDE(통합 개발 환경)에서 /console/src/main/java/quickstart/App.java 파일을 엽니다.

  2. 다음 형식을 가져옵니다.

    • java.net.InetSocketAddress
    • javax.net.ssl.SSLContext
    • com.datastax.oss.driver.api.core.CqlIdentifier
    • com.datastax.oss.driver.api.core.CqlSession
    • com.datastax.oss.driver.api.core.cql.BoundStatement
    • com.datastax.oss.driver.api.core.cql.PreparedStatement
    • com.datastax.oss.driver.api.core.cql.ResultSet
    • com.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;
    
  3. 이 가이드의 앞부분에서 수집된 자격 증명에 대한 문자열 변수를 만듭니다. 변수 username, password, 및 contactPoint의 이름을 지정하세요. 또한 로컬 데이터 센터의 이름이 지정된 region 문자열 변수를 만듭니다.

    String username = "<username>";
    String password = "<password>";
    String contactPoint = "<contact-point>";
    
  4. Azure Cosmos DB for Apache Cassandra 계정을 만든 지역에 대한 또 다른 문자열 변수를 만듭니다. 이 변수의 이름을 지정합니다 region.

    String region = "<region>";
    
  5. SSLContext TLS(전송 계층 보안) 프로토콜을 사용하는지 확인하는 개체를 만듭니다.

    SSLContext sslContext = SSLContext.getDefault();
    
  6. 이전 단계에서 만든 자격 증명 및 구성 변수를 사용하여 새 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은 동일한 데이터가 테이블에 이미 있는지 여부에 따라 데이터를 적절하게 만들거나 바꿉니다.

  1. 이 가이드의 앞부분에서 만든 테이블에 해당하는 필드로 명명 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에서는 이 형식을 다른 파일에 만들거나 기존 파일의 끝에 만들 수 있습니다.

  2. 형식의 새 개체를 만듭니다 Product. 개체를 변수 product에 저장합니다.

    Product product = new Product(
        "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "Yamba Surfboard",
        "gear-surf-surfboards",
        12,
        false
    );
    
  3. 새 행을 삽입하기 위해 CQL(Cassandra Query Language) 쿼리로 명명된 insertQuery 새 문자열 변수를 만듭니다.

    String insertQuery = "INSERT INTO product (id, name, category, quantity, clearance) VALUES (?, ?, ?, ?, ?)";
    
  4. insert 문을 준비하고 제품 속성을 매개 변수로 바인딩합니다.

    PreparedStatement insertStmt = session.prepare(insertQuery);
    BoundStatement boundInsert = insertStmt.bind(
        product.id,
        product.name,
        product.category,
        product.quantity,
        product.clearance
    );
    
  5. 바인딩된 문을 실행하여 제품을 Upsert합니다.

    session.execute(boundInsert);
    

데이터 읽기

그런 다음, 이전에 테이블에 업서트된 데이터를 읽습니다.

  1. 동일한 readQuery 필드가 있는 항목과 일치하는 CQL 쿼리를 사용하여 명명된 id 새 문자열 변수를 만듭니다.

    String readQuery = "SELECT * FROM product WHERE id = ? LIMIT 1";
    
  2. 이 가이드의 앞부분에서 만든 제품과 동일한 값으로 명명된 id 문자열 변수를 만듭니다.

    String id = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb";
    
  3. 문을 준비하고 제품의 id 필드를 매개 변수로 바인딩합니다.

    PreparedStatement readStmt = session.prepare(readQuery);
    BoundStatement boundRead = readStmt.bind(id);
    
  4. 바인딩된 문을 실행하고 결과를 변수 readResult에 저장합니다.

    ResultSet readResult = session.execute(boundRead);
    
  5. 결과 집합에서 첫 번째 행을 찾아 발견되면 Product 개체에 매핑합니다.

    Row row = readResult.one();
    Product matchedProduct = new Product(
        row.getString("id"),
        row.getString("name"),
        row.getString("category"),
        row.getInt("quantity"),
        row.getBoolean("clearance")
    );
    

쿼리 데이터

이제 쿼리를 사용하여 테이블의 특정 필터와 일치하는 모든 데이터를 찾습니다.

  1. 동일한 findQuery 필드가 있는 항목과 일치하는 CQL 쿼리를 사용하여 명명된 category 새 문자열 변수를 만듭니다.

    String findQuery = "SELECT * FROM product WHERE category = ? ALLOW FILTERING";
    
  2. 이 가이드의 앞부분에서 만든 제품과 동일한 값으로 명명된 id 문자열 변수를 만듭니다.

    String category = "gear-surf-surfboards";
    
  3. 명령문을 준비하고 제품 범주를 매개 변수로 결합시킵니다.

    PreparedStatement findStmt = session.prepare(findQuery);
    BoundStatement boundFind = findStmt.bind(category);
    
  4. 바인딩된 문을 실행하고 결과를 변수 findResults에 저장합니다.

    ResultSet results = session.execute(boundFind);
    
  5. 쿼리 결과를 반복하고 각 행을 개체에 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 경로 내에서 이 명령을 실행하고 있는지 확인합니다.

자원을 정리하세요

이제 최근에 만든 계정에 대한 연결을 만드는 데 사용할 클라이언트 라이브러리의 암호를 가져옵니다.

  1. 계정의 연락처 지점 및 사용자 이름을 가져오는 데 사용합니다 az cosmosdb show .

    az cosmosdb show \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --query "{username:name,contactPoint:documentEndpoint}"
    
  2. 이전 명령 출력의 contactPoint 값 및 username 속성을 기록합니다. 이러한 속성의 값은 이 가이드를 진행할 때 라이브러리를 사용하여 계정에 연결하는 데 사용하는 연락처사용자 이름입니다.

  3. 계정의 az cosmosdb keys list 가져오는 데 사용합니다.

    az cosmosdb keys list \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --type "keys"
    
  4. 이전 명령의 primaryMasterKey 출력에서 속성 값을 기록합니다. 이 속성의 값은 이 가이드의 뒷부분에서 라이브러리를 사용하여 계정에 연결하는 데 사용하는 암호 입니다.

다음 단계