MSA 패턴 및 기술 관련해서 CQRS, API Gateway, BFF, SAGA, 이벤트 소싱 등 많은 개념들과 기술들이 있다. 이런 개념들을 하나씩 알아가는 것도 중요하지만 좀 더 넓은 개념에서 MSA에는 어떤 문제들이 있고 이를 해결하기 위해 어떤 해결책들을 사용하는지 전체적으로 한 번 정리를 하는 것도 좋을 것 같다.
아래는 MSA 패턴으로 유명한 크리스 리처드슨이 관리하는 사이트에 나와있는 MSA 패턴을 고수준에서 바라본 그림이다. 가장 왼쪽은 어플리케이션 아키텍처 패턴으로 모놀리식과 마이크로 서비스가 있고, 나머지 오른쪽에 있는 그룹들은 마이크로 서비스 아키텍처 패턴의 문제를 해결하는 패턴들이다. 왼쪽 상단의 범례 부분에서 Motivation Pattern(선행되는 패턴), Solution Pattern(선행 패턴의 후행/해결 패턴)이고, Solution A - Solution B는 서로 대비되는 대안이라고 보면 된다. 세번째 General(일반), Specific(일반 패턴의 구체화된 세분화된 패턴)이다.
패턴은 크게 3 계층으로 구분된다.
- 인프라 패턴: 개발영역 밖의 인프라 영역의 문제를 해결
- 어플리케이션 인프라 패턴: 개발에도 영향을 미치는 인프라 문제를 해결
- 어플리케이션 패턴: 개발 영역의 문제를 해결
아래는 위의 그림과 동일한 내용을 좀 더 이해하기 편하도록 간소화 해서 한국어로 번역 해놓은 그림이다. 아래 그림을 먼저 이해하기 위에 그림을 이해하면 좋을 것 같다.
MSA 패턴 정리
위 그림들의 내용을 간단히 표로 정리하면 아래와 같다. 이제 패턴 하나씩 세부적인 내용들을 확인해 나가면 된다.
패턴 그룹(구분) | 아키텍처 및 패턴 |
어플리케이션 아키텍처 (Application) |
- 모노리스 아키텍처 - 마이크로 서비스 아키텍처(MSA) |
분해(Decomposition) | 서비스 분해 관련 - 업무 기능별 분해(Decompose by Business Capability) - 하위 도메인별 분해(Decompose by Subdomain): DDD - Self-Contained 서비스(자립 서비스) - 팀 별 서비스(Service per Team) |
데이터베이스 아키텍처 (Database) |
서비스 별 데이터베이스를 어떻게 구성할 것인가? - 서비스 별 데이터베이스(Database per Service) - 공유 데이터베이스(Shared Database) |
쿼리 (Querying) |
분리된 서비스와 DB에서 데이터 조회(쿼리)를 어떻게 할 것인가? - API Composition - CQRS |
데이터 일관성 유지 (Maintaining Data Consistency) |
분리된 서비스와 DB 환경에서 데이터 일관을 어떻게 맞출 것인가? - 사가(Saga) - Aggregate - 도메인 이벤트(Domain Event) - 이벤트 소싱 |
테스트(Test) | - 서비스 컴포넌트 테스트(Service Component Test) - 서비스 통합 컨트랙트 테스트(Service Integration Contract Test) - 사용자측 컨트랜트 테스트(Consumer-side Contract Test) |
UI 패턴 | - 서버 측 페이지 조각 병합(Server-side Page Fragment Composition) - 클라이언트 측 UI 병합(Client-side UI Composition ) |
리팩토링 | - 스트랭글러 어플리케이션 - 부패 방지 계층(anti-corruption layer) |
횡단 관심사 (Cross Cutting Concerns) |
- 마이크로서비스 섀시(Chassis): 횡단 관심사 처리에 특화된 프레임워크 등의 기술 활용(구현에서 분리) - 설정 외부화(Externalized Configuration) - 서비스 템플릿(Service Template) |
보안(Security) | - 액세스 토큰(Access Token) |
트랜잭션 메시징 (Transactional Messaging) |
- 트랜잭셔널 아웃박스(Transactional Outbox) - 트랜잭셔널 로그 테일링(Transaction Log Tailing) - 풀링 퍼블리셔(Polling Publisher) |
통신(Communication Style) | - 원격 프로시져 호출(RPI) - 메시징 - 도메인 특화 프로토콜(Domain-Specific Protocol): MQTT, SMTP 등 - 멱등 소비자(Idempotent Consumer) |
신뢰성(Reliability) | - 서킷 브레이커 |
관측성(Observability) | - 로그 통합 - 어플리케이션 메트릭스(Application Metrics) - 감사로그(Audit Logging) - 분산 추적(Distributed Tracing) - 예외 추적(Exception Tracking) - 상태 확인(Health Check API) - 로그 배포 및 변경 |
배포(Deployment) 패턴 | - 호스트별 다중 서비스 인스턴스 - 호스트별 단일 서비스 인스턴스 - VM별 서비스 인스턴스 - 컨테이너별 서비스 인스턴스 - 서버리스 배포 - 서비스 배포 플랫폼 |
서비스 검색(Service Discovery) | - Client-Side Discovery: 서비스 Client가 직접 검색 - Server-Side Discovery: : 서비스 검색 외부 위임 - Service Registry - Self Registration: 서비스 자가 등록 - 3rd Party Registration: 서비스 외부 등록 |
외부API | - API Gateway - BFF(Backend-for-Frontend) |
연관 내용:
'개발 > MSA' 카테고리의 다른 글
[MSA] 서비스의 데이터 오너십(소유) 종류와 처리 방법 (0) | 2024.08.10 |
---|---|
[MSA] 코드 재사용 및 공유 패턴 종류 및 장단점 (0) | 2024.08.05 |
[Spring Cloud] Spring Cloud Config 개념 및 구현 (2) | 2024.06.15 |
[MSA] MSA(마이크로 서비스 아키텍처)는 무엇인가?(개념, 장단점, 조건 등) (0) | 2024.05.26 |
[API Gateway - KrakenD] KrakenD 소개 및 구성해보기 (0) | 2024.05.19 |
댓글