빠른 시작: Azure Cosmos DB for Apache Cassandra 데이터를 관리하는 Java 앱 빌드(v4 드라이버)

적용 대상: Cassandra

이 빠른 시작에서는 Azure Cosmos DB for Apache Cassandra 계정을 만들고 GitHub에서 복제된 Cassandra Java 앱을 만들고 Java용 v4.x Apache Cassandra 드라이버를 사용하여 Cassandra 데이터베이스 및 컨테이너를 만듭니다. Azure Cosmos DB는 글로벌 배포 및 수평적 크기 조정 기능을 사용하여 문서, 테이블, 키 값 및 그래프 데이터베이스를 빠르게 만들고 쿼리할 수 있는 다중 모델 데이터베이스 서비스입니다.

필수 조건

참고 항목

Java용 오픈 소스 Apache Cassandra 드라이버 버전 4를 사용하는 간단한 빠른 시작입니다. 대부분의 경우 기존 코드를 변경하지 않고도 기존 Apache Cassandra 종속 Java 애플리케이션을 Azure Cosmos DB for Apache Cassandra에 연결할 수 있습니다. 그러나 더 나은 전체 환경을 위해 권장되는 연결 설정뿐만 아니라 사용자 지정 다시 시도 및 부하 분산 정책도 포함된 사용자 지정 Java 확장을 추가하는 것이 좋습니다. 이는 필요한 경우 Azure Cosmos DB에서 속도 제한 및 애플리케이션 수준 장애 조치(failover)를 처리하기 위한 것입니다. 확장을 구현하는 포괄적인 샘플은 여기서 찾을 수 있습니다.

데이터베이스 계정 만들기

문서 데이터베이스를 만들려면 Azure Cosmos DB로 Cassandra 계정을 만들어야 합니다.

  1. Azure Portal 메뉴 또는 페이지에서 리소스 만들기를 선택합니다.

  2. 새로 만들기 페이지에서 Azure Cosmos DB를 검색하여 선택합니다.

  3. Azure Cosmos DB 페이지에서 생성를 선택합니다.

  4. API 페이지에서 Cassandra 섹션 아래의 만들기를 선택합니다.

    API는 만들 계정의 형식을 결정합니다. Azure Cosmos DB는 문서 데이터베이스용 NoSQL, 그래프 데이터베이스용 Gremlin, 문서 데이터베이스용 MongoDB, Azure Table 및 Cassandra 등 5개의 API를 제공합니다. 각 API에 대한 별도의 계정을 만들어야 합니다.

    이 빠른 시작에서는 API for Cassandra와 함께 작동하는 테이블을 만들고 있으므로 Cassandra를 선택합니다.

    API for Cassandra에 대해 자세히 알아봅니다.

  5. Azure Cosmos DB 계정 만들기 페이지에서 새 Azure Cosmos DB 계정에 대한 기본 설정을 입력합니다.

    설정 Description
    구독 구독 이 Azure Cosmos DB 계정에 사용할 Azure 구독을 선택합니다.
    리소스 그룹 새로 만들기

    그런 다음, 계정 이름과 같은 이름 입력
    새로 만들기를 선택합니다. 그런 다음, 계정의 새 리소스 그룹 이름을 입력합니다. 간단히 하기 위해 Azure Cosmos DB 계정 이름과 동일한 이름을 사용합니다.
    계정 이름 고유한 이름 입력 내 Azure Cosmos DB 계정을 식별하는 고유한 이름을 입력합니다. 계정 URI는 고유한 계정 이름에 cassandra.cosmos.azure.com이 추가됩니다.

    계정 이름은 소문자, 숫자 및 하이픈(-) 문자만 포함할 수 있으며, 3-31자여야 합니다.
    위치 사용자와 가장 가까운 지역 Azure Cosmos DB 계정을 호스트할 지리적 위치를 선택합니다. 데이터에 가장 빨리 액세스할 수 있도록 사용자와 가장 가까운 위치를 사용합니다.
    용량 모드 프로비저닝된 처리량 또는 서버리스 프로비저닝된 처리량을 선택하여 프로비저닝된 처리량 모드에서 계정을 만듭니다. 서버리스를 선택하여 서버리스 모드에서 계정을 만듭니다.
    Azure Cosmos DB 체험 계층 할인 적용 적용 또는 적용 안 함 Azure Cosmos DB 무료 계층을 사용하면 계정 하나에 처음 1000RU/초 및 25GB의 스토리지가 별도의 비용 없이 제공됩니다. 체험 계층에 대해 자세히 알아보세요.
    총 계정 처리량 제한 계정의 처리량을 제한하려면 선택합니다. 이는 계정의 총 처리량을 특정 값으로 제한하려는 경우에 유용합니다.

    참고 항목

    Azure 구독당 최대 1개의 체험 계층 Azure Cosmos DB 계정을 사용할 수 있으며 계정을 만들 때 옵트인해야 합니다. 체험 계층 할인을 적용하는 옵션이 표시되지 않으면 구독의 다른 계정에서 이미 체험 계층을 사용하도록 설정되었음을 의미합니다.

    The new account page for Azure Cosmos DB for Apache Cassandra

  6. 전역 배포 탭에서 다음 세부 정보를 구성합니다. 이 빠른 시작의 목적을 위해 기본값을 그대로 둘 수 있습니다.

    설정 Description
    지리적 중복 사용 안 함 지역에 쌍 영역을 페어링하여 계정에서 글로벌 배포를 사용하거나 사용하지 않도록 설정합니다. 나중에 계정에 더 많은 지역을 추가할 수 있습니다.
    다중 지역 쓰기 사용 안 함 다중 영역 쓰기 기능을 사용하면 전 세계의 데이터베이스 및 컨테이너에 대해 프로비저닝된 처리량을 활용할 수 있습니다.
    가용성 영역 사용 안 함 가용성 영역은 Azure 지역 내의 격리된 위치입니다. 각 영역은 독립된 전원, 냉각 및 네트워킹을 갖춘 하나 이상의 데이터 센터로 구성됩니다.

    참고 항목

    용량 모드서버리스를 선택한 경우 다음 옵션을 사용할 수 없습니다.

    • 무료 계층 할인 적용
    • 지리적 중복
    • 다중 지역 쓰기
  7. 필요에 따라 다음 탭에서 추가 세부 정보를 구성할 수 있습니다.

    • 네트워킹 - 가상 네트워크에서 액세스를 구성합니다.
    • 백업 정책 - 주기적 또는 지속적인 백업 정책을 구성합니다.
    • 암호화 - 서비스 관리형 키 또는 고객 관리형 키를 사용합니다.
    • 태그 - 태그는 동일한 태그를 여러 개의 리소스 및 리소스 그룹에 적용하여 리소스를 범주화하고 통합된 청구를 볼 수 있는 이름/값 쌍입니다.
  8. 검토 + 만들기를 선택합니다.

  9. 계정 설정을 검토한 다음, 만들기를 선택합니다. 계정을 만드는 데 몇 분이 걸립니다. 포털 페이지에 배포가 완료됨이 표시되기를 기다립니다.

    The Azure portal Notifications pane

  10. 리소스로 이동을 선택하여 Azure Cosmos DB 계정 페이지로 이동합니다.

샘플 애플리케이션 복제

이제 코드 사용으로 전환해 보겠습니다. GitHub에서 Cassandra 앱을 복제하고 연결 문자열을 설정한 다음 실행해 보겠습니다. 프로그래밍 방식으로 데이터를 사용하여 얼마나 쉽게 작업할 수 있는지 알게 될 것입니다.

  1. 명령 프롬프트가 엽니다. 이름이 git-samples인 새 폴더를 만듭니다. 그런 다음, 명령 프롬프트를 닫습니다.

    md "C:\git-samples"
    
  2. Git Bash와 같은 Git 터미널 창을 열고, cd 명령을 사용하여 샘플 앱을 설치할 새 폴더로 변경합니다.

    cd "C:\git-samples"
    
  3. 다음 명령을 실행하여 샘플 리포지토리를 복제합니다. 이 명령은 컴퓨터에서 샘플 앱의 복사본을 만듭니다.

    git clone https://github.com/Azure-Samples/azure-cosmos-db-cassandra-java-getting-started-v4.git
    

코드 검토

이 단계는 선택 사항입니다. 코드로 데이터베이스 리소스를 만드는 방법을 알아보려는 경우 다음 코드 조각을 검토할 수 있습니다. 그렇지 않으면 연결 문자열 업데이트로 건너뛸 수 있습니다. 이 코드 조각은 모두 src/main/java/com/azure/cosmosdb/cassandra/util/CassandraUtils.java 파일에서 가져옵니다.

  • CqlSession이 Azure Cosmos DB for Apache Cassandra에 연결되고 액세스할 세션을 반환합니다(v3 드라이버의 Cluster 개체는 이제 사용되지 않음). Cassandra 호스트, 포트, 사용자 이름 및 암호는 Azure Portal에서 연결 문자열 페이지를 통해 설정됩니다.

        this.session = CqlSession.builder().withSslContext(sc)
                .addContactPoint(new InetSocketAddress(cassandraHost, cassandraPort)).withLocalDatacenter(region)
                .withAuthCredentials(cassandraUsername, cassandraPassword).build();
    

다음 코드 조각은 src/main/java/com/azure/cosmosdb/cassandra/repository/UserRepository.java 파일에서 가져온 것입니다.

  • 이전 실행에서 이미 존재하는 경우 키스페이스를 삭제합니다.

    public void dropKeyspace() {
        String query = "DROP KEYSPACE IF EXISTS "+keyspace+"";
        session.execute(query);
        LOGGER.info("dropped keyspace '"+keyspace+"'");
    } 
    
  • 새 keyspace가 생성됩니다.

    public void createKeyspace() {
        String query = "CREATE KEYSPACE "+keyspace+" WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 }";
        session.execute(query);
        LOGGER.info("Created keyspace '"+keyspace+"'");
    }
    
  • 새 테이블이 생성됩니다.

      public void createTable() {
          String query = "CREATE TABLE "+keyspace+"."+table+" (user_id int PRIMARY KEY, user_name text, user_bcity text)";
          session.execute(query);
          LOGGER.info("Created table '"+table+"'");
      }
    
  • 준비된 명령문 개체를 사용하여 사용자 엔터티가 삽입됩니다.

    public String prepareInsertStatement() {
        final String insertStatement = "INSERT INTO  "+keyspace+"."+table+" (user_id, user_name , user_bcity) VALUES (?,?,?)";
        return insertStatement;
    }
    
    public void insertUser(String preparedStatement, int id, String name, String city) {
        PreparedStatement prepared = session.prepare(preparedStatement);
        BoundStatement bound = prepared.bind(id, city, name).setIdempotent(true);
        session.execute(bound);
    }
    
  • 모든 사용자 정보를 얻기 위한 쿼리입니다.

    public void selectAllUsers() {
        final String query = "SELECT * FROM "+keyspace+"."+table+"";
        List<Row> rows = session.execute(query).all();
    
        for (Row row : rows) {
            LOGGER.info("Obtained row: {} | {} | {} ", row.getInt("user_id"), row.getString("user_name"), row.getString("user_bcity"));
        }
    }
    
  • 단일 사용자 정보를 가져오기 위한 쿼리입니다.

    public void selectUser(int id) {
        final String query = "SELECT * FROM "+keyspace+"."+table+" where user_id = 3";
        Row row = session.execute(query).one();
    
        LOGGER.info("Obtained row: {} | {} | {} ", row.getInt("user_id"), row.getString("user_name"), row.getString("user_bcity"));
    }
    

연결 문자열 업데이트

이제 Azure Portal로 다시 이동하여 연결 문자열 정보를 가져와서 앱에 복사합니다. 연결 문자열 세부 정보를 통해 앱이 호스트된 데이터베이스와 통신할 수 있습니다.

  1. Azure Portal의 Azure Cosmos DB 계정에서 연결 문자열을 선택합니다.

    View and copy a username from the Azure portal, Connection String page

  2. 화면 오른쪽에 있는 단추를 사용하여 CONTACT POINT 값을 복사합니다.

  3. C:\git-samples\azure-cosmosdb-cassandra-java-getting-started\java-examples\src\main\resources 폴더에서 config.properties 파일을 엽니다.

  4. 포털의 CONTACT POINT 값을 줄 2의 <Cassandra endpoint host>에 붙여넣습니다.

    config.properties의 줄 2는 이제 다음과 유사하게 나타납니다.

    cassandra_host=cosmos-db-quickstart.cassandra.cosmosdb.azure.com

  5. 포털로 돌아가서 USERNAME 값을 복사합니다. 포털의 USERNAME 값을 줄 4의 <cassandra endpoint username>에 붙여넣습니다.

    config.properties의 줄 4는 이제 다음과 유사하게 나타납니다.

    cassandra_username=cosmos-db-quickstart

  6. 포털로 돌아가서 PASSWORD 값을 복사합니다. 포털의 PASSWORD 값을 줄 5의 <cassandra endpoint password>에 붙여넣습니다.

    config.properties의 줄 5는 이제 다음과 유사하게 나타납니다.

    cassandra_password=2Ggkr662ifxz2Mg...==

  7. 줄 6에서 특정 TLS/SSL 인증서를 사용하려면 <SSL key store file location>을 TLS/SSL 인증서의 위치로 바꿉니다. 값을 제공하지 않으면 <JAVA_HOME>/jre/lib/security/cacerts에 설치된 JDK 인증서가 사용됩니다.

  8. 특정 TLS/SSL 인증서를 사용하기 위해 줄 6을 변경한 경우 줄 7을 업데이트하여 해당 인증서의 암호를 사용합니다.

  9. 접점의 기본 지역(예: West US)을 추가해야 합니다.

    region=West US

    이는 v.4x 드라이버에서 단 하나의 로컬 DC와 접점의 페어링을 허용하기 때문입니다. 기본값(Azure Cosmos DB 계정이 처음 생성되었을 때 지정된 지역)이 아닌 지역을 추가하려는 경우 접점을 추가할 때 지역 접미사(예: host-westus.cassandra.cosmos.azure.com)를 사용해야 합니다.

  10. config.properties 파일을 저장합니다.

Java 앱 실행

  1. Git 터미널 창에서 azure-cosmosdb-cassandra-java-getting-started-v4 폴더로 cd합니다.

    cd "C:\git-samples\azure-cosmosdb-cassandra-java-getting-started-v4"
    
  2. Git 터미널 창에서 다음 명령을 사용하여 cosmosdb-cassandra-examples.jar 파일을 생성합니다.

    mvn clean install
    
  3. git 터미널 창에서 다음 명령을 실행하여 Java 애플리케이션을 시작합니다.

    java -cp target/cosmosdb-cassandra-examples.jar com.azure.cosmosdb.cassandra.examples.UserProfile
    

    터미널 창에 키스페이스와 테이블이 작성되었다는 알림이 표시됩니다. 그런 다음, 테이블의 모든 사용자를 선택하여 반환하고 출력을 표시한 후 ID로 행을 선택하고 값을 표시합니다.

    프로그램 실행을 중지하고 콘솔 창을 닫으려면 Ctrl+C를 누릅니다.

  4. Azure Portal에서 데이터 탐색기를 열어 이 새 데이터를 쿼리/수정/사용합니다.

    View the data in Data Explorer - Azure Cosmos DB

Azure Portal에서 SLA 검토

Azure Portal에서는 Azure Cosmos DB 계정 처리량, 스토리지, 가용성, 대기 시간 및 일관성을 모니터링합니다. Azure Cosmos DB SLA(서비스 수준 계약)와 관련된 메트릭 차트에는 실제 성능 대비 SLA 값이 표시됩니다. 이 메트릭 모음을 통해 SLA를 투명하게 모니터링할 수 있습니다.

메트릭 및 SLA를 검토하려면 다음을 수행합니다.

  1. Azure Cosmos DB 계정의 탐색 메뉴에서 메트릭을 선택합니다.

  2. 대기 시간과 같은 탭을 선택하고, 오른쪽에서 시간 프레임을 선택합니다. 차트의 실제SLA 줄을 비교합니다.

    Azure Cosmos DB metrics suite

  3. 다른 탭의 메트릭을 검토합니다.

리소스 정리

앱과 Azure Cosmos DB 계정을 모두 사용했으면 추가로 비용을 지불하지 않도록 만든 Azure 리소스를 삭제할 수 있습니다. 리소스를 삭제하려면:

  1. Azure Portal 검색 창에서 리소스 그룹을 검색하고 선택합니다.

  2. 목록에서 이 빠른 시작에서 만든 리소스 그룹을 선택합니다.

    Select the resource group to delete

  3. 리소스 그룹 개요 페이지에서 리소스 그룹 삭제를 선택합니다.

    Delete the resource group

  4. 새 창에서 삭제할 리소스 그룹의 이름을 입력한 다음, 삭제를 선택합니다.

다음 단계

이 빠른 시작에서는 API for Cassandra를 사용하여 Azure Cosmos DB 계정을 만들고 Cassandra 데이터베이스 및 컨테이너를 만드는 Cassandra Java 앱을 실행하는 방법을 알아보았습니다. 이제 Azure Cosmos DB 계정으로 추가 데이터를 가져올 수 있습니다.