✅ 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를 사용한다.
'Cloud > AWS' 카테고리의 다른 글
Github Actions와 Docker Hub를 활용해서 CI/CD 파이프라인 구축하기 (1) | 2023.10.29 |
---|---|
EC2 생성하고 Spring Boot 프로젝트 도커로 배포하기 (0) | 2023.10.29 |
[AWS Session 기록] 가상 데이터 센터 만들기 - VPC 기본 및 연결 옵션 - 양승도 솔루션즈 아키텍트(AWS 코리아) (1) | 2023.10.27 |
[콘솔과 테라폼 구현] 사용자 > 1000 : 서버와 RDS 이중화, ALB, Read Replica 추가 (1) | 2023.10.22 |
[콘솔과 테라폼 구현] 첫 사용자 1명 : 단일 EC2 + EIP (0) | 2023.10.22 |