CQRS 패턴 - AWS 규범적 지침

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

CQRS 패턴

CQRS(명령 쿼리 책임 분리) 패턴은 데이터 변형 또는 시스템의 명령 부분을 쿼리 부분과 분리합니다. 처리량, 지연 시간 또는 일관성에 대한 요구 사항이 서로 다른 경우 CQRS 패턴을 사용하여 업데이트와 쿼리를 분리할 수 있습니다. CQRS 패턴은 다음 다이어그램과 같이 애플리케이션을 명령측과 쿼리측 두 부분으로 나눕니다. 명령측은 create, update, delete 요청을 처리합니다. 쿼리 측에서는 읽기 전용 복제본을 사용하여 query 부분을 실행합니다.

CQRS 패턴의 상위 수준 보기

이 다이어그램은 다음 프로세스를 보여줍니다.

  1. 기업은 API를 통해 명령을 전송하여 애플리케이션과 상호 작용합니다. 명령은 데이터 생성, 업데이트 또는 삭제와 같은 작업입니다.

  2. 응용 프로그램은 들어오는 명령을 명령측에서 처리합니다. 여기에는 작업의 검증, 권한 부여 및 실행이 포함됩니다.

  3. 응용 프로그램은 명령 데이터를 쓰기 (명령) 데이터베이스에 유지합니다.

  4. 명령이 쓰기 데이터베이스에 저장되면 읽기 (쿼리) 데이터베이스의 데이터를 업데이트하는 이벤트가 트리거됩니다.

  5. 읽기 (쿼리) 데이터베이스는 데이터를 처리하고 유지합니다. 읽기 데이터베이스는 특정 쿼리 요구 사항에 맞게 최적화되도록 설계되었습니다.

  6. 비즈니스는 읽기 API와 상호 작용하여 애플리케이션의 쿼리 측으로 쿼리를 보냅니다.

  7. 애플리케이션은 들어오는 쿼리를 쿼리 측에서 처리하고 읽은 데이터베이스에서 데이터를 검색합니다.

다음과 같은 다양한 데이터베이스 조합을 사용하여 CQRS 패턴을 구현할 수 있습니다.

다음 그림에서는 DynamoDB와 같은 NoSQL 데이터 스토어를 사용하여 쓰기 처리량을 최적화하고 유연한 쿼리 기능을 제공합니다. 따라서 데이터를 추가할 때 액세스 패턴이 잘 정의된 워크로드에서 쓰기 확장성이 향상됩니다. Amazon Aurora와 같은 관계형 데이터베이스는 복잡한 쿼리 기능을 제공합니다. DynamoDB 스트림은 Aurora 테이블을 업데이트하는 Lambda 함수로 데이터를 전송합니다.

서비스와 함께 구현된 CQRS 패턴 AWS

DynamoDB 및 Aurora를 사용하여 CQRS 패턴을 구현하면 다음과 같은 주요 이점이 있습니다.

  • DynamoDB는 대용량 쓰기 작업을 처리할 수 있는 완전 관리형 NoSQL 데이터베이스이며, Aurora는 쿼리 측의 복잡한 쿼리를 위한 높은 읽기 확장성을 제공합니다.

  • DynamoDB는 지연 시간이 짧고 처리량이 높은 데이터 액세스를 제공하므로 명령 및 업데이트 작업을 처리하는 데 이상적이며, 복잡한 쿼리에 맞게 Aurora 성능을 미세 조정하고 최적화할 수 있습니다.

  • DynamoDB와 Aurora는 모두 서버리스 옵션을 제공하므로 기업은 사용량에 따라 리소스 비용을 지불할 수 있습니다.

  • DynamoDB 및 Aurora는 데이터베이스, 백업 및 확장성을 관리하는 운영 부담을 줄여주는 완전 관리형 서비스입니다.

다음과 같은 경우 CQRS 패턴 사용을 고려해야 합니다.

  • database-per-service 패턴을 구현했고 여러 마이크로서비스의 데이터를 조인하고 싶습니다.

  • 읽기 및 쓰기 워크로드에는 규모 조정, 지연 시간 및 일관성에 대한 별도의 요구 사항이 있습니다.

  • 최종 일관성은 읽기 쿼리에 사용할 수 있습니다.

중요

CQRS 패턴은 일반적으로 데이터 스토어 간의 최종 일관성을 초래합니다.