MSA 에는 많은 준비물이 필요합니다. 목표하는 결과에 따라 필요한 것이 달라질 것입니다.
구성요소가 많고 이들을 연결 해야 하기 때문에 Kubernetes 는 거의 필수로 받아들여 지고 있습니다.
당연하게도 DevOps 는 필수입니다.
준비물
- DevOps
- 인프라 관리 : 컨테이너, 오케이스트레이션, 서비스 메시, 로드밸런서, 인프라 자동화 도구
Docker, Kubernetes, Istio, Linkerd, Load Balancer NGINX HAProxy, Terraform, CloudFormation, Ansible - CI/CD : 빌드 도구, 컨테이너 레지스트리, 배포 자동화, 테스트 자동화, 배포 파이프라인 Github Actions, Docker Hub, Jenkins, Gitlab CI/CD, Travis CI, CircleCI, ArgoCD
- 어플리케이션의 자동화된 테스트가 신뢰성, 배포 안정성을 담보하므로 E2E, Unit Test 모두 필수
- 배포 전략 : Rolling update, Blue/Green, Canary
- 서비스 디스커버리 및 내부 라우팅, DNS 관리, API Gateway
- 소스코드 레포지토리 전략
- Monorepo vs Multirepo
MSA 에서는 소유권에 대해서도 중요 이슈로 다루며 Multirepo 를 권장
그러나 코드 공유의 장점이 커서 Monorepo 도 충분히 고려 사항입니다
참고 : Python 모노레포 uv - Git 학습
다수의 인원이 사용하게 되므로 Git branch 전략과 컨벤션 정의 필요
예) 브랜치에서 revert commit 은 하지 않기 - Pull Request, 코드 리뷰
- 이벤트 기반 시스템
- MSA 에서는 이벤트 기반 아키텍처가 핵심적인 역할을 하므로 메시지 큐(스트림)을 이용한 시스템 구축이 필수
Kafka, RabbitMQ, AWS SQS, AWS Kinesis, Celery, Redis
- 데이터베이스 전략
- 서비스 별 데이터베이스 분리를 해야 MSA 에 부합하겠지만,
DBMS 의 효율은 단일 서버 파워가 클수록 좋기 때문에 스키마,
권한으로 분리하고 작으면서 최대한 크게 가져가는 것이 효율적일 수 있음
- 모니터링과 로깅
- 모니터링 : 로그, 메트릭, 트레이싱, 알림
Prometheus/Grafana, DataDog, New Relic, CloudWatch
Jaeger, Zipkin, OpenTelemetry, Sentry, Slack, Email
실행
MSA를 준비하면서 기억나는 사항들을 정리했습니다.
이 다음은 각자에 맞춰 실행하는 것입니다.
MSA의 강점은 서비스를 작게하여 변경이 구조를 강제로 최소화 할 수 있는 것입니다.
이러한 사항은 모놀리스라고 해내지 못할 것은 아닐 것입니다.
그러나 배포가 잦고 명확히 도메인을 나눌 수 있는 서비스들이 많을 경우 MSA가 큰 강점을 가질 수 있을 것입니다.
MSA의 성공 여부는 구성원들의 MSA 에 대한 이해도와 DevOps 성숙도에 큰 영향을 받겠습니다.