Azure Cosmos DB NoSQL API를 사용하여 데이터 액세스

이 문서에서는 Azure Cosmos DB용 Spring Data용 Spring Cloud Azure Starter를 사용자 지정 애플리케이션에 추가하는 방법을 보여 줍니다. 이 스타터를 사용하면 Spring Data 및 Azure Cosmos DB for NoSQL을 사용하여 Azure Cosmos DB 데이터베이스에 데이터를 저장하고 검색할 수 있습니다. 이 문서에서는 Azure Portal을 통해 Azure Cosmos DB를 만드는 방법을 보여 줍니다. 그런 다음 이 문서에서는 Spring Initializr를 사용하여 Spring Boot Starter와 함께 사용할 수 있는 사용자 지정 Spring Boot 애플리케이션을 만드는 방법을 보여줍니다.

Azure Cosmos DB는 개발자가 SQL, MongoDB, Graph 및 Table API와 같은 다양한 표준 API를 사용하여 데이터를 사용할 수 있도록 하는 전역 분산 데이터베이스 서비스입니다. Microsoft의 Spring Boot Starter를 사용하면 개발자가 NoSQL용 Azure Cosmos DB와 쉽게 통합되는 Spring Boot 애플리케이션을 사용할 수 있습니다.

필수 조건

Azure Portal을 사용하여 Azure Cosmos DB 만들기

다음 단계를 사용하여 Azure Cosmos DB 인스턴스를 만듭니다.

  1. Azure Portal로 이동하여 리소스 만들기를 선택합니다.

  2. 데이터베이스를 선택한 다음, Azure Cosmos DB를 선택합니다.

  3. Azure Cosmos DB 계정 만들기 화면에서 NoSQL용 Azure Cosmos DB를 선택합니다.

    Azure Cosmos DB for NoSQL 옵션이 강조 표시된 Azure Cosmos DB 계정 만들기 페이지를 보여 주는 Azure Portal의 스크린샷

  4. Azure Cosmos DB 페이지에서 다음 정보를 입력합니다.

    • 데이터베이스에 사용할 구독 을 선택합니다.
    • 데이터베이스에 대한 새 리소스 그룹을 만들거나 기존 리소스 그룹을 선택할지 여부를 지정합니다.
    • 데이터베이스의 URI로 사용하는 고유한 계정 이름을 입력합니다. 예: contosoaccounttest.
    • 데이터베이스의 위치를 지정합니다.
    • 데모 목적으로만 계정을 만들려면 무료 계층 할인 적용을 선택합니다.
    • 나머지 기본 옵션 및 설정은 그대로 둡니다.
  5. 검토 + 만들기를 선택하고, 사양을 검토하고, 만들기를 선택합니다.

    Azure Cosmos DB for NoSQL 설정이 있는 Azure Cosmos DB 계정 만들기 페이지를 보여 주는 Azure Portal의 스크린샷

  6. 데이터베이스가 만들어지면 Azure 대시보드 및 모든 리소스 및 Azure Cosmos DB 페이지에 나열됩니다. 새로 만든 Azure Cosmos DB에 대한 데이터베이스 및 컨테이너를 만들려면 Azure Portal에서 Azure Cosmos DB 계정, 데이터베이스 , 컨테이너 및 항목 만들기 빠른 시작의 데이터베이스 및 컨테이너 추가 섹션을 참조하세요. 해당 위치에 대한 데이터베이스를 선택하여 캐시의 속성 페이지를 열 수 있습니다.

  7. 데이터베이스의 속성 페이지가 표시되면 키를 선택하고 데이터베이스에 대한 URI 및 액세스 키를 복사합니다. Spring Boot 애플리케이션에서 이러한 값을 사용합니다.

    키 페이지가 표시된 Azure Cosmos DB 계정을 보여 주는 Azure Portal의 스크린샷

Important

새로 만든 Azure Cosmos DB에서 현재 사용 중인 Azure 계정에 역할을 할당 Owner 합니다. 자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당을 참조하십시오.

Spring Initializr를 사용하여 Spring Boot 애플리케이션 만들기

다음 단계를 사용하여 Azure 지원 사용하여 새 Spring Boot 애플리케이션 프로젝트를 만듭니다. 또는 azure-spring-boot-samples 리포지토리에서 spring-cloud-azure-data-cosmos-sample 샘플을 사용할 수 있습니다. 그런 다음, 앱을 빌드하고 테스트하기 위해 직접 건너뛸 수 있습니다.

  1. https://start.spring.io/으로 이동합니다.

  2. 다음 옵션을 지정합니다.

    • Java를 사용하는 Maven 프로젝트를 생성합니다.
    • Spring Boot 버전을 2.7.11지정합니다.
    • 애플리케이션에 대한 그룹아티팩트 이름을 지정합니다.
    • Java 버전에 대해 17을 선택합니다.
    • 종속성에 Azure 지원을 추가합니다.

    참고 항목

    Spring Initializr는 그룹아티팩트 이름을 사용하여 패키지 이름을 만듭니다(예: com.example.wingtiptoysdata).

    Spring Boot 버전은 Azure 지원에서 지원하는 버전보다 높을 수 있습니다. 프로젝트가 자동으로 생성되면 Spring Boot 버전을 Azure에서 지원하는 가장 높은 버전으로 수동으로 변경할 수 있습니다. 이 버전은 Spring-Version-Mapping에서 찾을 수 있습니다.

  3. 이전에 나열된 옵션을 지정한 경우 GENERATE를 선택합니다.

  4. 메시지가 표시되면 로컬 컴퓨터의 경로에 프로젝트를 다운로드하고 파일을 추출합니다.

이제 간단한 Spring Boot 애플리케이션을 편집할 준비가 되었습니다.

Azure Spring Boot Starter를 사용하도록 Spring Boot 애플리케이션 구성

  1. 앱 디렉터 리에서 pom.xml 파일을 찾습니다. 예를 들면 다음과 같습니다.

    C:\SpringBoot\wingtiptoysdata\pom.xml

    또는

    /users/example/home/wingtiptoysdata/pom.xml

  2. 텍스트 편집기에서 pom.xml 파일을 열고, 다음을 <dependencies> 요소에 추가합니다.

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
    </dependency>
    

    참고 항목

    BOM(청구서)을 사용하여 Spring Cloud Azure 라이브러리 버전을 관리하는 방법에 대한 자세한 내용은 Spring Cloud Azure 개발자 가이드시작 섹션을 참조하세요.

  3. pom.xml 파일을 저장하고 닫습니다.

Azure Cosmos DB를 사용하도록 Spring Boot 애플리케이션 구성

  1. 앱의 리소스 디렉터리에서 application.properties 파일을 찾습니다. 예를 들면 다음과 같습니다.

    C:\SpringBoot\wingtiptoysdata\src\기본\resources\application.properties

    또는

    /users/example/home/wingtiptoysdata/src/기본/resources/application.properties

  2. 텍스트 편집기 에서 application.properties 파일을 열고 다음 줄을 파일에 추가하고 샘플 값을 데이터베이스에 대한 적절한 속성으로 바꿉다.

    # Specify the DNS URI of your Azure Cosmos DB.
    spring.cloud.azure.cosmos.endpoint=https://contosoaccounttest.documents.azure.com:443/
    
    # Specify the name of your database.
    spring.cloud.azure.cosmos.database=contosoaccounttest
    spring.cloud.azure.cosmos.populate-query-metrics=true
    
  3. application.properties 파일을 저장하고 닫습니다.

기본 데이터베이스 기능을 구현하는 샘플 코드 추가

이 섹션에서는 사용자 데이터를 저장하기 위한 두 개의 Java 클래스를 만듭니다. 그런 다음 기본 애플리케이션 클래스를 수정하여 클래스의 인스턴스를 User 만들고 데이터베이스에 저장합니다.

사용자 데이터를 저장하기 위한 기본 클래스 정의

  1. 기본 애플리케이션 Java 파일과 동일한 디렉터리에 User.java파일을 만듭니다.

  2. 텍스트 편집기 에서 User.java 파일을 열고 파일에 다음 줄을 추가하여 데이터베이스에 값을 저장하고 검색하는 일반 사용자 클래스를 정의합니다.

    package com.example.wingtiptoysdata;
    
    import com.azure.spring.data.cosmos.core.mapping.Container;
    import com.azure.spring.data.cosmos.core.mapping.PartitionKey;
    import org.springframework.data.annotation.Id;
    
    @Container(containerName = "mycollection")
    public class User {
        @Id
        private String id;
        private String firstName;
        @PartitionKey
        private String lastName;
        private String address;
    
        public User() {
    
        }
    
        public User(String id, String firstName, String lastName, String address) {
            this.id = id;
            this.firstName = firstName;
            this.lastName = lastName;
            this.address = address;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return String.format("%s %s, %s", firstName, lastName, address);
        }
    }
    
  3. User.java 파일을 저장하고 닫습니다.

데이터 리포지토리 인터페이스 정의

  1. 기본 애플리케이션 Java 파일과 동일한 디렉터리에 UserRepository.java파일을 만듭니다.

  2. 텍스트 편집기 에서 UserRepository.java 파일을 열고 파일에 다음 줄을 추가하여 기본 ReactiveCosmosRepository 인터페이스를 확장하는 사용자 리포지토리 인터페이스를 정의합니다.

    package com.example.wingtiptoysdata;
    
    import com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository;
    import org.springframework.stereotype.Repository;
    import reactor.core.publisher.Flux;
    
    @Repository
    public interface UserRepository extends ReactiveCosmosRepository<User, String> {
        Flux<User> findByFirstName(String firstName);
    }
    

    인터페이스는 ReactiveCosmosRepository 이전 버전의 시작에서 인터페이스를 대체합니다 DocumentDbRepository . 새 인터페이스는 기본 저장, 삭제 및 찾기 작업을 위한 동기 및 사후 API를 제공합니다.

  3. UserRepository.java 파일을 저장하고 닫습니다.

기본 애플리케이션 클래스 수정

  1. 애플리케이션의 패키지 디렉터리에서 기본 애플리케이션 Java 파일을 찾습니다. 예를 들면 다음과 같습니다.

    C:\SpringBoot\wingtiptoysdata\src\main\java\com\example\wingtiptoysdata\WingtiptoysdataApplication.java

    또는

    /users/example/home/wingtiptoysdata/src/main/java/com/example/wingtiptoysdata/WingtiptoysdataApplication.java

  2. 텍스트 편집기에서 애플리케이션 Java 파일을 열고 다음 줄을 파일에 추가합니다.

    package com.example.wingtiptoysdata;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.util.Assert;
    import reactor.core.publisher.Flux;
    import reactor.core.publisher.Mono;
    
    import java.util.Optional;
    
    @SpringBootApplication
    public class WingtiptoysdataApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(WingtiptoysdataApplication.class);
    
        @Autowired
        private UserRepository repository;
    
        public static void main(String[] args) {
            SpringApplication.run(WingtiptoysdataApplication.class, args);
        }
    
        public void run(String... var1) {
            this.repository.deleteAll().block();
            LOGGER.info("Deleted all data in container.");
    
            final User testUser = new User("testId", "testFirstName", "testLastName", "test address line one");
    
            // Save the User class to Azure Cosmos DB database.
            final Mono<User> saveUserMono = repository.save(testUser);
    
            final Flux<User> firstNameUserFlux = repository.findByFirstName("testFirstName");
    
            //  Nothing happens until we subscribe to these Monos.
            //  findById won't return the user as user isn't present.
            final Mono<User> findByIdMono = repository.findById(testUser.getId());
            final User findByIdUser = findByIdMono.block();
            Assert.isNull(findByIdUser, "User must be null");
    
            final User savedUser = saveUserMono.block();
            Assert.state(savedUser != null, "Saved user must not be null");
            Assert.state(savedUser.getFirstName().equals(testUser.getFirstName()), "Saved user first name doesn't match");
    
            firstNameUserFlux.collectList().block();
    
            final Optional<User> optionalUserResult = repository.findById(testUser.getId()).blockOptional();
            Assert.isTrue(optionalUserResult.isPresent(), "Cannot find user.");
    
            final User result = optionalUserResult.get();
            Assert.state(result.getFirstName().equals(testUser.getFirstName()), "query result firstName doesn't match!");
            Assert.state(result.getLastName().equals(testUser.getLastName()), "query result lastName doesn't match!");
    
            LOGGER.info("findOne in User collection get result: {}", result.toString());
        }
    }
    
  3. 기본 애플리케이션 Java 파일을 저장하고 닫습니다.

앱 빌드 및 테스트

  1. 명령 프롬프트를 열고 pom.xml 파일이 있는 폴더로 이동합니다. 예를 들면 다음과 같습니다.

    cd C:\SpringBoot\wingtiptoysdata

    또는

    cd /users/example/home/wingtiptoysdata

  2. 다음 명령을 사용하여 애플리케이션을 빌드하고 실행합니다.

    ./mvnw clean
    

    이 명령은 테스트 단계의 일부로 애플리케이션을 자동으로 실행합니다. 다음을 사용할 수도 있습니다.

    ./mvnw spring-boot:run
    

    일부 빌드 및 테스트 출력 후에 콘솔 창에 다음 예제와 유사한 메시지가 표시됩니다.

    INFO 1365 --- [           main] c.e.w.WingtiptoysdataApplication         : Deleted all data in container.
    
    ... (omitting connection and diagnostics output) ...
    
    INFO 1365 --- [           main] c.e.w.WingtiptoysdataApplication         : findOne in User collection get result: testFirstName testLastName, test address line one
    

    이러한 출력 메시지는 데이터가 Azure Cosmos DB에 성공적으로 저장된 다음 다시 검색되었음을 나타냅니다.

리소스 정리

이 애플리케이션을 계속 사용하지 않려면 이전에 만든 Azure Cosmos DB가 포함된 리소스 그룹을 삭제해야 합니다. Azure Portal에서 리소스 그룹을 삭제할 수 있습니다.

다음 단계

Spring과 Azure에 대한 자세한 사항은 Azure의 Spring 설명서 센터를 참조합니다.

추가 리소스

Azure Cosmos DB 및 Java 사용에 대한 자세한 내용은 다음 문서를 참조하세요.

Azure에서 Spring Boot 애플리케이션을 사용하는 방법에 대한 자세한 내용은 다음 문서를 참조하세요.

Java와 함께 Azure를 사용하는 방법에 관한 자세한 정보는 Java 개발자를 위한 AzureAzure DevOps 및 Java 사용하기를 참조하세요.

Spring Framework는 Java 개발자가 엔터프라이즈 수준 애플리케이션을 만드는 데 도움이 되는 오픈 소스 솔루션입니다. 해당 플랫폼을 기반으로 빌드되는 인기 있는 프로젝트 중 하나는 독립 실행형 Java 애플리케이션을 만들기 위한 간소화된 접근 방식을 제공하는 Spring Boot입니다. Spring Boot을 시작하는 개발자를 도우려면 https://github.com/spring-guides/에서 몇 가지 샘플 Spring Boot 패키지를 사용할 있습니다. Spring Initializr는 기본 Spring Boot 프로젝트 목록에서 선택하는 것 외에도 개발자가 사용자 지정 Spring Boot 애플리케이션 만들기를 시작하는 데 도움이 됩니다.