Rajesh RV 역량 모델
- 핵심 역량
- 지원 역량
- 인프라스트럭처 역량
- 프로세스 및 통제 역량
1. 핵심 역량 : 서비스 별 배포 되는 SW 패키지에 필수 요소
<단일 서비스 내 패키징 되는 SW 컴포넌트들>
- 서비스 Listener :
- HTTP 등의 리스너가 애플리케이션에 내장되어 있어야 함 (Ex. Spring Boot와 같은 Self Contained 방식 필요)
- EndPoint :
- HTTP 요청을 받아 처리 할 API가 애플리케이션 내부에 있어야 함
- 다양한 프로토콜 및 동기/비동기 등 사용 가능
- 서비스 구현 :
- 각 서비스의 핵심 로직을 구현
- 응집도 높고 단일 책임의 원칙을 지켜야 함
- 외부 시스템에 영향을 받으면 안됨. =>Spring Data, Spring Message 등으로 해결
- 계층형 아키택처 사용 권고
- 데이터 저장 :
- 각 서비스 마다 상태나 데이터를 저장할 데이터 소스가 있어야 함
- 데이터 소스는 하나의 서비스에 한정 되어야 하고, 다양한 기술을 이용 가능 (Ex. Polyglot Persistence, NoSQL 등)
2. 지원 역량 : 지원 기술 및 설계 패턴
- Service Discovery :
- 서비스/인스턴스 개수가 많아 복잡해져 생기게 됨
- 물리적인 정적인 정보를 동적으로 바꾸게 함
- 서비스 간에 다른 서비스의 물리적인 주소를 유지하지 않음
- 유연하게 인스턴스 및 서비스를 추가 삭제 가능함
- Config Server :
- 설정정보를 애플리케이션에서 완전히 분리.
- 중앙 Config에서 설정관리, 저장 백엔드로는 Git, DBMS사용.
- 설정정보 변경 시 서비스 재배포 없이 적용 가능
- Service Gateway :
- 다양한 서비스들에 대한 단일 진입점
- 인증, 인가, 로깅, 필터링 등의 공통 처리 수행
- SW Defined Load Balancer
- MSA에서는 인프라 토폴로지가 매우 복잡
- 서비스를 호출하는 클라이언트에서 SW로 로드밸런서 수행
- Circuit Breaker
- 서비스의 장애는 언제든 발생 가능하고 장애 방지 설계 필요
- 한 서비스의 장애는 다른 서비스들에 전파되어 전체 시스템 장애로 이어질 수 있음
- 특정 서비스 장애는 그 서비스만의 장애로 격리
- 서비스 간의 Circuit Breaker라는 컴포넌트가 삽입 됨 (장애발생 판단되면 Circuit 차단)
- Distributed Tracing
- 서비스 간 모든 호출에 추적 ID를 삽입
- 추적 ID를 Key로 하여 단일 API 트랜잭션의 활동을 파악
- Data Lake
- MSA에서는 데이터 파편화 가능성 존재
- 비정형 원시 데이터를 그대로 저장
- 데이터 분석 할 시점에 데이터 가공에 대해 고민
- 실시간 이용 (Kafka 등)
- Messaging
- 메시징을 이용한 서비스 간 협력 설계 방식을 권고
- 메시징은 서비스 간 결합도를 낮출 수 있음
- 고가용성 메시징 솔루션이 필요
3. 인프라스트럭처 역량 : 컨테이너 및 컨테이너 오케스트레이션
- 클라우드 :
- On Demand
- 대용량 확장 가능한 환경
- 몇 번의 클릭만으로 리소스 사용 가능 (Ex. Auto Scaling으로 자동화된 Provisioning)
- 다양한 자원/서비스 제공 (자원, DB, AI etc)
- 컨테이너 런타임 :
- 컨테이너 기술을 이용하여 빠른 환경 구성 및 배포 가능
- 컨테이너 이미지는 런타임 코드가 동시에 존재 (Docker, etc)
- 컨테이너 오케스트레이션 :
- 많은 수의 컨테이너 관리 가능
- 배포/모니터링 비용 최소화 (Kubernetes, ECS, Mesos/Marathon etc)
4. 프로세스 및 통제 역량 : 데브옵스 및 문서화
- DevOps
- 에자일과 DevOps는 MSA 성공을 위한 필수 요소 중 하나
- 지속적 통합, 자동화된 배포, 자동화된 QA
- 에자일 도입하여 짧은 개발주기로 반복적으로 개발하여 빠르게 Delivery
- 컨테이너 레지스트리
- MSA에서 컨테이너는 필수적
- 컨테이너의 핵심인 이미지 등의 관리 필요
- 코드 형상 관리와 유사
- Docker Hub, GCR... etc
- 문서화
- 서비스들은 인터페이스를 통하여 통신
- 인터페이스의 문서화가 중요
- 일반 Method 호출보다 복잡하기 때문에 다양한 정보가 들어 있어야함 (필수/선택 파라미터, 버전, 응답정보 등)
- 웹으로 쉽게 열람할 수 있어야 함
- Spring REST Docs, Swagger 등
- 참조 아키텍처 및 라이브러리
- 탈중앙화된 방식은 비효율성을 야기할 수 있음
- 조직의 기술별 참조모델 중요 -> 프레임워크화 할 수도 있음
Rajesh RV 성숙도 모델
Rishi Singh 성숙도 모델
- 총 9가지 영역에서 4단계의 성숙도 모델 제안
- 4단계 : Early, Inception, Expanding, Mature
- Expanding 단계가 현실적인 MSA 수준
- Mature는 다소 이상적인 수준
1. 기능적 분할 영역
- Early : Business 역량에 따른 기능 분할
- Inception : Modular Monolith, 서비스간 명확한 Interface
- Expanding : 도메인 주도 설계에 의한 잘 분할 된 서비스
- Mature : 이벤트 기반의 협력, 조회와 명령의 분할
2. Data 영역
- Early : 서비스간 저장소 공유, ACID 기반 트랜잭션
- Inception : 일부 새로운 서비스들에 대해 독립된 저장소
- Expanding : 모든 서비스들의 독립적인 저장소
- Mature : Event 기반 데이터 관리, 이벤트소싱 CQRS
3. Testing 영역
- Early : 수동/자동 Testing 혼재
- Inception : 완전 자동화된 Testing 수행
- Expanding : Chaos Enginerring
- Mature : Consumer Driven Contract, 고객 페르소나 기반 E2E Testing
4. Infrastructure 영역
- Early : Continuous Integration/Buid
- Inception : Continuous Deployment, 중앙집중형 Logging
- Expanding : Container/Orchestration, 설정 외부화
- Mature : 완전 자동화 된 Provisioning 지원하는 PaaS
5. Deployment 영역
- Early : Script 기반, 호스트 당 다중 서비스 배포
- Inception : VM 당 단일 서비스 배포
- Expanding : Container 당 단일 서비스 배포, Immutable Infra, Blue/Green Deployment
- Mature : Multi-Datacenter 배포
6. Monitoring 영역
- Early : Application Performance Monitoring
- Inception : Cetralized Logging System
- Expanding : Container Monitoring
- Mature : Distributed Tracing, Trace as a Service, Synthetic Transaction
7. Governance 영역
- Early : 중앙집중화된 Governance
- Inception : 일부 Monolith, 일부 Microservices의 Shared Governance Model로 과도기적 형태
- Expanding : 완전한 분산 된 Governance
- Mature : 참조 아키텍처 및 참조 방법론 등의 지원
8. Team Structure 영역
- Early : Dev, QA, Ops 등 기술 별 조직
- Inception : 일부 Cross Functional 팀
- Expanding : 제품 기반 개발팀과 이를 지원하는 Platform 팀(운영, 모니터링 등)
- Mature : 완전한 제품 기반 DevOps
9. Architecture 영역
- Early : ESB를 사용하는 SOA 기반의 아키텍처 또는 Modular Monolith 구조
- Inception : Monolith 시스템에 신규 기능을 Microservice로 개발하는 형태
- Expanding : 모든 비즈니스 기능이 Microservice로 분리 되어 서로 Network 인터페이스로 협력
- Mature : Event 기반, Serverless 도입
'Architecture' 카테고리의 다른 글
Kafka 1) 연결 모니터링 (2) | 2024.01.11 |
---|---|
MSA 5) MSA 분리 전략 : 도메인 주도 설계 (0) | 2023.11.01 |
MSA 4) MSA 분리 전략 : 분리 원칙 (0) | 2023.11.01 |
MSA 2) Microservice Architecture 에 대해서 (0) | 2023.10.18 |
MSA 1) MSA를 들어가기 앞서서 : Monolithic System (0) | 2023.10.18 |