본문 바로가기
Cloud/AWS

[AWS Session 기록] 12가지 디자인 패턴으로 알아보는 클라우드 네이티브 마이크로서비스 아키텍처 - 김형일, AWS / 박진현, AWS :: AWS Summit Seoul 2023

by 민휘 2023. 10. 27.

✅ API 관리 및 소비

API Gateway

  • 마이크로서비스의 비즈니스 기능을 API 소비자에게 통합된 API 엔드포인트 형태로 노출하는 패턴
  • 모든 API 트래픽을 먼저 받으므로, 리버시 프록시 역할을 할 수 있다.
  • 문제점 : SPOF, 스케일 아웃이 적용되지 않으면 병목 발생, 네트워크 호출 추가로 인한 응답 시간 증가, API GW와 내부 마이크로서비스가 결합됨
  • https://developerbee.tistory.com/233

 

Backend for Frontend

특정 FE 애플리케이션을 위한 맞춤 API를 BFF API로 제공해 서비스 제공 유연성과 안정성을 향상시키는 패턴. 모바일 애플리케이션을 위한 푸시 알림 API 제공, 모바일 애플리케이션을 위해 더 가벼운 데이터 제공, 더 나은 보안 프로토콜을 적용한 API 제공하는 등의 요구사항을 충족한다. AWS에서 구현할 때는 AWS AppSync를 사용한다.

 

 

✅ 마이그레이션

Strangler Fig

모놀리식 애플리케이션 기능을 새로운 아키텍처에서 MSA로 점진적 현대화하는 패턴. 기존 레거시 애플리케이션 기능을 운영환경에 영향 없이 연속성을 유지하면서 새로운 아키텍처로 이전한다. 이때 마이크로서비스를 클라우드 환경에 구현하고 Reverse Proxy를 사용해 전환한다. AWS API Gateway(리버스 프록시), ALB를 활용한다.

 

✅ 데이터 관리

Database per Service

하나의 데이터베이스에 여러 서비스가 접근할 때, 서비스 간 결합도가 증가한다. 접근 패턴과 규모 등 목적에 맞는 DB를 독립적으로 사용하고, API를 사용해 서비스를 통한 데이터만 외부에 공유하여 결합도를 낮추는 패턴이다. 마이크로서비스 별로 독립적인 데이터 저장소를 사용하므로 데이터베이스의 변경 가능성과 확장성을 제공한다. AWS Purpose-build Database를 사용해 구현한다.

 

CQRS and Event Sourcing 패턴

(CQRS) 읽기와 쓰기 저장소를 분리하고, (Event Sourcing) 이벤트 전달 방식을 사용해 데이터 일관성을 비동기적으로 유지하는 패턴. 단일 DB는 상태를 가지므로 확장성에 한계가 있다. 따라서 읽기와 쓰기의 데이터 모델 요구에 맞는 별도 저장소를 사용하고 이벤트 저장소를 통해 동기화한다. 단일 DB로 몰리는 트래픽을 목적에 맞게 분리하여 부하를 줄이고 응답 지연을 줄일 수 있다. 확장성도 향상된다. AWS Purpose-build Database, Amazon MSK(Managed Streaming Kafka)를 사용해 구현한다.

 

Materialized View

복잡한 조인이나 외부 데이터 저장소에 의존하게 되면 데이터 조회 성능이 저하된다. 요구되는 데이터를 로컬 데이터 저장소나 캐시에 미리 최적의 형식(Materialized View)으로 저장해서 조회 성능을 향상시킬 수 있다. AWS의 Purpose-build DB, AWS Lamba를 활용해 연결할 수 있다.

 

 

✅ 이벤트 전달

Publish Subscribe

메시지 발행자가 메시지를 토픽에 발행하면 모든 구독자가 수신하는 비동기식 메시지 전달 패턴. 각 서비스들의 결합도를 낮춰 대규모 분산 시스템의 병렬성확장성 향상, 비동기식 전달로 대기 지연을 줄일 수 있다. Amazon SNS, EventBridge, Kinesis Data Streams, MSK를 사용하여 구현할 수 있다.

 

 

✅ 연결성 및 조합

Side Car

통신, 모니터링, 보안, 로깅 등 공통적인 기능을 수행하는 사이드카 컨테이너를 메인 컨테이너와 함께 사용하는 방식. 애플리케이션 컨테이너의 변경 없이 기능을 확장하고 강화할 수 있다. EKS Pod, ECS Task를 사용할 수 있다.

Service Mesh

마이크로서비스들이 point to point로 연결되어, 서비스 간 로직을 서비스가 직접 관리하는 것이 부담이 된다. 서비스 간 통신 로직을 Sidecar Proxy로 옮기고 보안, 로깅, 로드밸런싱, 모니터링 등의 공통 제어는 Control Plane이 담당한다. AWS App Mesh, Amazon ECS Service Connect를 사용할 수 있다. Envoy 프록시로 Sidecar 컨테이너를 띄우고, Envoy끼리 통신한다. 세부 기능은 App Mesh에서 처리한다.

 

Service Choreography

여러 마이크로서비스의 조합으로 동작하는 비즈니스 기능을 이벤트 기반의 비동기 통신으로 합성. 다른 마이크로서비스를 직접 호출하지 않고 이벤트와 메시지에 반응하는 방식으로 작동한다. 유연성과 확장성, 변경 비용을 고려한 서비스들의 낮은 결합도를 달성할 수 있다. EventBridge, MSK, Kinesis Data Streams, SQS, SNS 등을 사용한다.

 

Service Orchestration

여러 마이크로서비스에 분산된 상호작용을 중앙의 단일 서비스를 통해 비즈니스 로직을 구현한다. 중앙 컨트롤러 서비스가 서비스 흐름을 제어하고, 서비스 상호작용을 조정하여 프로세스를 관리한다. 서비스 로직을 한눈에 파악하기 쉽고, 실패 추적과 대응 로직을 구현하기 쉽다. AWS Step Functions를 사용한다.

 

Saga

분산 트랜잭션을 처리하여 결과적 일관성을 구현한다. 트랜잭션 이벤트가 실패한 경우, 로컬에서 보상 트랜잭션을 실행한다. AWS Step Functions를 사용한다.