AWS의 클라우드 네이티브 최신 애플리케이션 개발 및 디자인 패턴
본 문서는 총 4부로 구성되어 있으며 이 글은 3부입니다.
1부 링크 : AWS에서의 현대적 애플리케이션 개발 1/4
2부 링크 : AWS에서의 현대적 애플리케이션 개발 2/4
4부 링크 : AWS에서의 현대적 애플리케이션 개발 4/4
이벤트 소싱
이벤트 소싱 패턴을 사용하면 데이터 저장소를 직접 업데이트하는 대신 주문, 신용 조회, 주문 처리 또는 배송과 같은 비즈니스 로직에 중요한 모든 이벤트가 내구성 있는 이벤트 로그에 추가됩니다. 각 이벤트 레코드는 개별적으로 저장되므로 모든 업데이트는 원자 적입니다 (보이지 않으며 돌이킬 수 없음).
이 패턴의 주요 특징은 저장된 이벤트를 단순히 재 처리하여 특정 시점의 애플리케이션 상태를 재구성 할 수 있다는 것입니다. 데이터는 데이터 저장소에 대한 직접 업데이트를 통하지 않고 일련의 이벤트로 저장되므로 다양한 서비스가 이벤트 저장소에서 이벤트를 재생하여 각 데이터 저장소의 적절한 상태를 계산할 수 있습니다. 이는 명령 및 쿼리 데이터 저장소의 스키마가 다른지 여부에 관계없이 이벤트에 대한 데이터를 재생할 수 있기 때문에 앞에서 설명한 CQRS 패턴과 잘 작동합니다.
이벤트 소싱 패턴에는 이벤트 메시지를 저장 한 후 나중에 재생하는 것이 포함되므로 메시지를 저장하고 검색하기위한 메커니즘이 필요합니다. AWS 클라우드에서이 패턴을 사용하려는 경우 사용 사례에 따라 Amazon Kinesis Data Streams, Amazon Simple Queue Service (SQS), Amazon MQ 또는 Amazon Managed Streaming for Kafka (Amazon MSK)를 사용할 수 있습니다. 이벤트 소싱 패턴에서 시스템을 변경하는 각 이벤트는 먼저 메시지 큐에 저장되고 해당 이벤트를 기반으로 응용 프로그램 상태로 업데이트됩니다. 예를 들어, 이벤트를 Amazon Kinesis 스트림에 레코드로 쓴 다음 AWS Lambda를 기반으로 하는 서비스가 레코드를 검색하고 자체 데이터 저장소에서 업데이트를 수행 할 수 있습니다).
때로는 하나의 이벤트 소스에서 여러 대상으로 확장하는 것이 유용합니다. 여러 소비자가 스트림에서 데이터를 검색 할 수 있도록 Amazon Kinesis Data Streams를 사용하여 이 작업을 직접 수행 할 수 있습니다. Amazon Simple Notification Service (Amazon SNS)를 사용하여 여러 Lambda 함수로 확장 할 수 있습니다. 이 함수는 모두 동일한 주제를 수신하고 Kinesis에서 다른 Stateful 구성 요소로 이벤트 데이터를 전파 할 수 있습니다. 이 구성을 사용하면 Amazon SNS와 지정된 Lambda 함수 사이에 Amazon SQS (Amazon Simple Queue Service) 대기열을 추가하여 Lambda 함수의 실행 원인을 지정할 수 있습니다.
Choreography
새 고객이 웹 사이트에서 계정을 만들 때 프로필 정보를 저장하고 환영 이메일을 받고 사이트에서 사용할 초기 포인트를 적립해야 할 수 있습니다. 이러한 모든 활동은 다른 서비스로 구현됩니다.
마이크로 서비스간에 이러한 작업을 실행하기 위해 고려할 수 있는 구현 방법에는 오케스트레이션 패턴과 Choreography 패턴이 있습니다. 오케스트레이션 패턴을 사용하면 도체와 오케스트라 간의 교향곡 관계와 유사하게 다른 서비스에 명령을 내리고 전체 프로세스가 완료되도록하는 중앙 서비스가 있습니다. Choreography 패턴을 사용하여 무용수들이 춤의 안무를 배운 후 독립적으로 움직인 것처럼 각 서비스는 특정 이벤트에 대한 응답으로 독립적으로 실행될 수 있습니다.
안무 패턴을 사용하면 모든 필수 정보가 포함 된 초기 이벤트를 단일 메시지에 저장하고 초기 트랜잭션을 마칠 수 있습니다.
그런 다음 다른 서비스는 해당 메시지를 비동기 적으로 검색하고 해당 작업을 완료 할 수 있습니다. 이 아키텍처를 사용하면 서비스가 느슨하게 연결되며 서로에게 직접적인 영향을 미치지 않습니다. 메시지 저장과 검색 간의 비동기 관계는 확장성과 안정성 이점도 제공합니다.
AWS 클라우드에서 Choreography 패턴을 구현하려면 Amazon Kinesis 및 AWS Lambda를 사용하거나 요구 사항에 따라 Amazon Simple Notification Service (Amazon SNS), Amazon Simple Queue Service (Amazon SQS) 및 AWS Lambda의 조합을 사용할 수 있습니다.
로그 집계
시스템이 복잡할수록 좋은 로그를 가져 오는 것이 더 중요합니다. 문제는 로그가 여러 서비스에 분산되어 있으면 전체 시스템을 통일하기가 어렵다는 것입니다. 로그를 균일하게 관리하고 검색 할 수 있는 중앙 집중식 장소가 있어야합니다. 메트릭 수집도 중요합니다. 마이크로 서비스 아키텍처에서는 특정 요청을 처리하기 위해 다양한 서비스에 대한 호출이 필요할 수 있으므로 모놀리스와 비교하여 성능 저하 또는 오류의 원인을 찾기가 더 어려울 수 있습니다. 그렇기 때문에 중앙에서 집계 된 로그 및 런타임 메트릭을 가져야합니다.
AWS 클라우드에서 집계 된 로깅의 경우 Amazon CloudWatch Logs를 사용할 수 있습니다. AWS Lambda를 사용하여 마이크로 서비스를 구현하면 stdout에 쓰는 모든 내용이 CloudWatch Logs로 전송됩니다. Amazon Elastic Container Service (Amazon ECS) 및 AWS Fargate는 awslogs 로그 드라이버를 사용하여 stdout에 작성된 모든 내용을 Amazon CloudWatch Logs로 보낼 수도 있습니다. Amazon Elastic Kubernetes Service (Amazon EKS)를 사용하는 경우 Fluentd 또는 Fluent Bit와 함께 사이드카 패턴을 사용하여 로그를 Amazon CloudWatch Logs로 보낼 수 있습니다. CloudWatch Container Insights를 사용하여 Amazon ECS 및 AWS Fargate 또는 Amazon EKS에서 실행되는 컨테이너화 된 애플리케이션에 대한 로그 및 지표를 CloudWatch로 보낼 수도 있습니다.
서비스 간 호출의 실행 시간 또는 오류를 추적하기 위해 AWS X-Ray를 사용할 수 있습니다. AWS X-Ray를 사용하면 애플리케이션 및 기본 서비스의 성능을 파악할 수 있으므로 성능 문제 및 오류의 근본 원인을 식별하고 해결할 수 있습니다. X-Ray는 요청이 애플리케이션을 통과 할 때 요청에 대한 엔드 투 엔드 보기를 제공하고 애플리케이션의 기본 구성 요소 맵을 보여줍니다.
Polyglot 지속성
마이크로 서비스 아키텍처에서 각 서비스는 공용 API를 공개하고 다른 서비스에서 구현 세부 사항을 숨겨야 합니다. 이 아키텍처를 사용하면 지정된 서비스를 구축하는 팀이 API 계약을 유지 관리하는 한 다른 서비스가 수정 된 코드에 의존하는지 걱정하지 않고 서비스 내부를 자유롭게 수정할 수 있습니다.
또한 팀은 필요할 때 자체 서비스에 배포 할 수 있으며 원하는 프로그래밍 언어 및 데이터베이스를 사용하여 서비스를 구현하도록 선택할 수 있습니다. Polyglot 지속성을 사용하면 지정된 서비스의 데이터 액세스 패턴 및 기타 요구 사항에 따라 올바른 데이터 저장 기술을 선택합니다.
모든 서비스 팀이 동일한 데이터 스토리지 기술을 사용해야하는 경우 해당 데이터 저장소가 특정 상황에 적합하지 않은 경우 구현 문제가 발생하거나 성능이 저하 될 수 있습니다. 팀이 요구 사항에 가장 적합한 데이터 저장소를 선택할 수 있으면 서비스를 보다 쉽게 구현하고 더 나은 성능과 확장성을 달성 할 수 있습니다.
AWS는 다음 표에 요약 된대로 Polyglot 지속성을 활성화하는 여러 데이터 스토리지 서비스를 제공합니다.
빌드업웍스에서 AWS 무료 컨설팅을 진행합니다.
AWS에 대하여 궁금하신 내용이 있으시거나, 도입을 검토 중이시라면 편하게 신청해주세요.
[ 고지 사항 (Disclaimer) ]
본 컨텐츠는 고객의 편의를 위하여 AWS 서비스 설명을 위해 제작, 제공된 것입니다. 만약 AWS 사이트와 컨텐츠 상에서 차이나 불일치가 있을 경우 AWS 사이트 (AWS.amazon.com)가 우선합니다. 또한 AWS 사이트 상에서 한글 번역문과 영어 원문에 차이나 불일치가 있을 경우(번역의 지체로 인한 경우 등 포함), 영어 원문이 우선합니다.
본 문서는 Modern Application Development on AWS (2019년, 영문) 내용에 기반하여 작성 되었습니다.
이 문서는 정보 제공의 목적으로만 제공됩니다. 본 문서의 발행일 당시 AWS의 현재 제품 오퍼링 및 실행방법 등을 설명하며, 예고 없이 변경될 수 있습니다. 고객은 본 문서에 포함된 정보나 AWS 제품 또는 서비스의 사용을 독립적으로 평가할 책임이 있으며, 각 정보 및 제품은 명시적이든 묵시적이든 어떠한 종류의 보증 없이 “있는 그대로” 제공됩니다. 본 문서는 AWS, 그 자회사, 공급업체 또는 라이선스 제공자로부터 어떠한 보증, 표현, 계약 약속, 조건 또는 보장을 구성하지 않습니다. 고객에 대한 AWS의 책임 및 의무는 AWS 계약에 의해 관리되며 본 문서는 AWS와 고객 사이의 어떠한 계약에도 속하지 않으며 계약을 변경하지도 않습니다.
© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.