클라우드 디자인 패턴Cloud Design Patterns

이러한 디자인 패턴은 클라우드에서 안정적이고 확장성 있는 안전한 애플리케이션을 빌드하는 데 유용합니다.These design patterns are useful for building reliable, scalable, secure applications in the cloud.

각 패턴은 패턴이 해결하는 문제, 패턴을 적용하기 위한 고려 사항 및 Microsoft Azure 기반의 예제에 대해 설명합니다.Each pattern describes the problem that the pattern addresses, considerations for applying the pattern, and an example based on Microsoft Azure. 대부분의 패턴은 Azure에서 패턴을 구현하는 방법을 보여주는 코드 샘플 또는 코드 조각을 포함하고 있습니다.Most of the patterns include code samples or snippets that show how to implement the pattern on Azure. 그러나 대부분의 패턴은 Azure에 호스팅되든 다른 클라우드 플랫폼에 호스팅되든, 분산 시스템과 관련되어 있습니다.However, most of the patterns are relevant to any distributed system, whether hosted on Azure or on other cloud platforms.

클라우드 개발의 과제Challenges in cloud development

Data management

데이터 관리Data Management

데이터 관리는 클라우드 애플리케이션의 핵심 요소이며 대부분의 품질 특성에 영향을 줍니다.Data management is the key element of cloud applications, and influences most of the quality attributes. 일반적으로 데이터는 성능, 확장성, 가용성 등의 이유로 여러 위치의 여러 서버에 호스팅되며, 이로 인해 다양한 문제가 발생할 수 있습니다.Data is typically hosted in different locations and across multiple servers for reasons such as performance, scalability or availability, and this can present a range of challenges. 예를 들어 데이터 일관성을 유지해야 하며, 일반적으로 여러 위치 간에 데이터를 동기화해야 합니다.For example, data consistency must be maintained, and data will typically need to be synchronized across different locations.

Design and implementation

디자인 및 구현Design and Implementation

좋은 디자인이 되려면 구성 요소 디자인 및 배포의 일관성, 관리 및 배포 방법이 간단한 유지 관리 용이성, 구성 요소 및 하위 시스템을 다른 애플리케이션 및 다른 시나리오에 사용할 수 있는 재사용 가능성 등의 요소를 고려해야 합니다.Good design encompasses factors such as consistency and coherence in component design and deployment, maintainability to simplify administration and development, and reusability to allow components and subsystems to be used in other applications and in other scenarios. 디자인 및 구현 단계에서 결정된 사항은 클라우드에 호스팅되는 애플리케이션과 서비스의 품질 및 총 소유 비용에 엄청난 영향을 미칩니다.Decisions made during the design and implementation phase have a huge impact on the quality and the total cost of ownership of cloud hosted applications and services.

Messaging icon

메시징Messaging

클라우드 애플리케이션은 기본적으로 분산되기 때문에 구성 요소와 서비스를 연결하는 메시지 인프라가 필요하며, 가용성을 최대화할 수 있도록 느슨하게 결합된 인프라가 가장 이상적입니다.The distributed nature of cloud applications requires a messaging infrastructure that connects the components and services, ideally in a loosely coupled manner in order to maximize scalability. 널리 사용되는 비동기 메시지는 여러 가지 이점이 있지만 메시지 순서 지정, 포이즌 메시지 관리, 멱등성 같은 문제도 있습니다.Asynchronous messaging is widely used, and provides many benefits, but also brings challenges such as the ordering of messages, poison message management, idempotency, and more.

패턴 카탈로그Catalog of patterns

패턴Pattern 요약Summary CategoryCategory
특사Ambassador 소비자 서비스 또는 애플리케이션을 대신하여 네트워크 요청을 전송하는 도우미 서비스를 만듭니다.Create helper services that send network requests on behalf of a consumer service or application. 디자인 및 구현,Design and Implementation,
운영 효율성Operational Excellence
손상 방지 레이어Anti-Corruption Layer 현대식 애플리케이션과 레거시 시스템 사이에 외관 또는 어댑터 레이어를 구현합니다.Implement a façade or adapter layer between a modern application and a legacy system. 디자인 및 구현,Design and Implementation,
운영 효율성Operational Excellence
비동기 요청-회신Asynchronous Request-Reply 백 엔드 처리는 비동기적이어야 하지만 프런트 엔드에는 여전히 명확한 응답이 필요한 프런트 엔드 호스트에서 백 엔드 처리를 분리합니다.Decouple backend processing from a frontend host, where backend processing needs to be asynchronous, but the frontend still needs a clear response. 메시징Messaging
프런트 엔드에 대한 백 엔드Backends for Frontends 특정 프런트 엔드 애플리케이션 또는 인터페이스에서 사용할 별도의 백 엔드 서비스를 만듭니다.Create separate backend services to be consumed by specific frontend applications or interfaces. 디자인 및 구현Design and Implementation
격벽Bulkhead 하나가 고장 나더라도 나머지는 정상적으로 작동하도록 애플리케이션의 요소를 여러 풀에 격리합니다.Isolate elements of an application into pools so that if one fails, the others will continue to function. 신뢰성Reliability
Cache-AsideCache-Aside 필요할 때 데이터를 데이터 저장소에서 캐시로 로드Load data on demand into a cache from a data store 데이터 관리,Data Management,
성능 효율성Performance Efficiency
연출Choreography 중앙 오케스트레이터에 의존하는 대신 각 서비스에서 비즈니스 작업이 처리되는 시기와 방법을 결정하도록 합니다.Let each service decide when and how a business operation is processed, instead of depending on a central orchestrator. 메시징,Messaging,
성능 효율성Performance Efficiency
회로 차단기Circuit Breaker 원격 서비스 또는 리소스에 연결할 때 해결하는 데 걸리는 시간이 유동적인 오류를 처리합니다.Handle faults that might take a variable amount of time to fix when connecting to a remote service or resource. 신뢰성Reliability
클레임 검사Claim Check 큰 메시지를 클레임 검사 및 페이로드로 분할하면 메시지 버스의 과부하를 피할 수 있습니다.Split a large message into a claim check and a payload to avoid overwhelming a message bus. 메시징Messaging
보정 트랜잭션Compensating Transaction 여러 단계로 나뉘어 있지만 결국에는 일관적인 작업을 정의하는 일련의 단계에서 수행한 작업을 실행 취소합니다.Undo the work performed by a series of steps, which together define an eventually consistent operation. 신뢰성Reliability
경쟁 소비자Competing Consumers 여러 동시 소비자가 동일한 메시징 채널에 수신된 메시지를 처리할 수 있게 해 줍니다.Enable multiple concurrent consumers to process messages received on the same messaging channel. 메시징Messaging
컴퓨팅 리소스 통합Compute Resource Consolidation 여러 작업을 단일 계산 단위로 통합합니다.Consolidate multiple tasks or operations into a single computational unit 디자인 및 구현Design and Implementation
CQRSCQRS 별도의 인터페이스를 사용하여 데이터를 업데이트하는 작업과 데이터를 읽는 작업을 분리합니다.Segregate operations that read data from operations that update data by using separate interfaces. 데이터 관리,Data Management,
디자인 및 구현,Design and Implementation,
성능 효율성Performance Efficiency
배포 스탬프Deployment Stamps 데이터 저장소를 포함하여 애플리케이션 구성 요소의 여러 독립 복사본을 배치합니다.Deploy multiple independent copies of application components, including data stores. 안정성,Reliability,
성능 효율성Performance Efficiency
이벤트 소싱Event Sourcing 추가 전용 저장소를 사용하여 도메인의 데이터에 대해 수행된 작업을 설명하는 일련의 이벤트 전체를 기록합니다.Use an append-only store to record the full series of events that describe actions taken on data in a domain. 데이터 관리,Data Management,
성능 효율성Performance Efficiency
외부 구성 저장소External Configuration Store 구성 정보를 애플리케이션 배포 패키지에서 중앙 위치로 이동합니다.Move configuration information out of the application deployment package to a centralized location. 디자인 및 구현,Design and Implementation,
운영 효율성Operational Excellence
페더레이션 IDFederated Identity 외부 ID 공급자에게 인증을 위임합니다.Delegate authentication to an external identity provider. 보안Security
게이트 키퍼Gatekeeper 클라이언트와 애플리케이션 또는 서비스 간 브로커 역할을 하며, 요청을 검사 및 정리하고, 요청 및 데이터를 전달하는 전용 호스트 인스턴스를 사용하여 애플리케이션 및 서비스를 보호합니다.Protect applications and services by using a dedicated host instance that acts as a broker between clients and the application or service, validates and sanitizes requests, and passes requests and data between them. 보안Security
게이트웨이 집계Gateway Aggregation 게이트웨이를 사용하여 여러 개별 요청을 단일 요청으로 집계합니다.Use a gateway to aggregate multiple individual requests into a single request. 디자인 및 구현,Design and Implementation,
운영 효율성Operational Excellence
게이트웨이 오프로딩Gateway Offloading 공유 또는 특수 서비스 기능을 게이트웨이 프록시에 오프로드합니다.Offload shared or specialized service functionality to a gateway proxy. 디자인 및 구현,Design and Implementation,
운영 효율성Operational Excellence
게이트웨이 라우팅Gateway Routing 단일 엔드포인트를 사용하여 요청을 여러 서비스에 라우팅합니다.Route requests to multiple services using a single endpoint. 디자인 및 구현,Design and Implementation,
운영 효율성Operational Excellence
GeodesGeodes 백 엔드 서비스를 지리적 노드 세트에 배포합니다. 각 노드는 모든 지역의 클라이언트 요청을 처리할 수 있습니다.Deploy backend services into a set of geographical nodes, each of which can service any client request in any region. 안정성,Reliability,
운영 효율성Operational Excellence
상태 엔드포인트 모니터링Health Endpoint Monitoring 외부 도구가 노출된 엔드포인트를 통해 주기적으로 액세스할 수 있는 기능 검사를 애플리케이션 내부에 구현합니다.Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals. 안정성,Reliability,
운영 효율성Operational Excellence
인덱스 테이블Index Table 쿼리에서 자주 참조하는 데이터 저장소의 필드에 대한 인덱스를 만듭니다.Create indexes over the fields in data stores that are frequently referenced by queries. 데이터 관리,Data Management,
성능 효율성Performance Efficiency
리더 선택Leader Election 인스턴스 중 하나를 다른 인스턴스를 관리하는 리더로 선택하여 분산된 애플리케이션의 공동 작업 인스턴스 컬렉션이 수행하는 작업을 조정합니다.Coordinate the actions performed by a collection of collaborating task instances in a distributed application by electing one instance as the leader that assumes responsibility for managing the other instances. 디자인 및 구현,Design and Implementation,
신뢰성Reliability
구체화된 뷰Materialized View 데이터가 필요한 쿼리 작업에 대해 이상적으로 포맷되지 않은 경우 하나 이상의 데이터 저장소에 있는 데이터에 대한 미리 채워진 뷰를 생성합니다.Generate prepopulated views over the data in one or more data stores when the data isn't ideally formatted for required query operations. 데이터 관리,Data Management,
운영 효율성Operational Excellence
파이프 및 필터Pipes and Filters 복잡한 처리를 수행하는 작업을 재사용 가능한 일련의 별도 요소로 분류합니다.Break down a task that performs complex processing into a series of separate elements that can be reused. 디자인 및 구현,Design and Implementation,
메시징Messaging
우선 순위 큐Priority Queue 우선 순위가 높은 요청을 우선 순위가 낮은 요청보다 먼저 받아서 처리하도록 서비스로 전송된 요청의 우선 순위를 지정합니다.Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those with a lower priority. 메시징,Messaging,
성능 효율성Performance Efficiency
게시자/구독자Publisher/Subscriber 애플리케이션이 발신자와 수신자를 연결하지 않고 여러 관심 있는 소비자에게 이벤트를 비동기적으로 알릴 수 있습니다.Enable an application to announce events to multiple interested consumers asynchronously, without coupling the senders to the receivers. 메시징Messaging
큐 기반 부하 평준화Queue-Based Load Leveling 작업 그리고 그 작업이 일시적인 높은 부하를 부드럽게 처리하기 위해 호출하는 서비스 사이에서 버퍼 역할을 하는 큐를 사용합니다.Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads. 안정성,Reliability,
메시징,Messaging,
복원력,Resiliency,
성능 효율성Performance Efficiency
다시 시도Retry 이전에 실패한 작업을 투명하게 다시 시도하여 서비스 또는 네트워크 리소스에 연결하려 할 때 애플리케이션을 사용하여 예상된 일시적 오류를 처리합니다.Enable an application to handle anticipated, temporary failures when it tries to connect to a service or network resource by transparently retrying an operation that's previously failed. 신뢰성Reliability
Scheduler 에이전트 감독자Scheduler Agent Supervisor 서비스 및 기타 원격 리소스의 분산된 집합에서 일련의 작업을 조정합니다.Coordinate a set of actions across a distributed set of services and other remote resources. 메시징,Messaging,
신뢰성Reliability
순차 호위(convoy)Sequential Convoy 다른 메시지 그룹의 처리를 차단하지 않고 정의된 순서대로 관련 메시지 세트를 처리합니다.Process a set of related messages in a defined order, without blocking processing of other groups of messages. 메시징Messaging
분할Sharding 데이터 저장소를 수평 파티션 또는 분할 집합으로 나눕니다.Divide a data store into a set of horizontal partitions or shards. 데이터 관리,Data Management,
성능 효율성Performance Efficiency
사이드카Sidecar 격리 및 캡슐화를 제공하는 별도의 프로세스 또는 컨테이너에 애플리케이션 구성 요소를 배포합니다.Deploy components of an application into a separate process or container to provide isolation and encapsulation. 디자인 및 구현,Design and Implementation,
운영 효율성Operational Excellence
정적 콘텐츠 호스팅Static Content Hosting 정적 콘텐츠를 클라이언트에 직접 제공할 수 있는 클라우드 기반 스토리지 서비스에 배포합니다.Deploy static content to a cloud-based storage service that can deliver them directly to the client. 디자인 및 구현,Design and Implementation,
데이터 관리,Data Management,
성능 효율성Performance Efficiency
스트랭글러 그림Strangler Fig 특정 기능을 새로운 애플리케이션 및 서비스로 점진적으로 교체하여 레거시 시스템을 단계적으로 마이그레이션합니다.Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services. 디자인 및 구현,Design and Implementation,
운영 효율성Operational Excellence
제한Throttling 애플리케이션 인스턴스, 개별 테넌트 또는 서비스 전체의 리소스 사용량을 제어합니다.Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service. 안정성,Reliability,
성능 효율성Performance Efficiency
발레 키Valet Key 클라이언트에 특정 리소스 또는 서비스에 대한 제한된 직접 액세스를 제공하는 토큰 또는 키를 사용합니다.Use a token or key that provides clients with restricted direct access to a specific resource or service. 데이터 관리,Data Management,
보안Security