04_모놀리스에서 MSA로 - 준비 및 실행

MSA 에는 많은 준비물이 필요합니다. 목표하는 결과에 따라 필요한 것이 달라질 것입니다.
구성요소가 많고 이들을 연결 해야 하기 때문에 Kubernetes 는 거의 필수로 받아들여 지고 있습니다. 당연하게도 DevOps 는 필수입니다.

준비물

  1. 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
  1. 소스코드 레포지토리 전략
  • Monorepo vs Multirepo
    MSA 에서는 소유권에 대해서도 중요 이슈로 다루며 Multirepo 를 권장
    그러나 코드 공유의 장점이 커서 Monorepo 도 충분히 고려 사항입니다
    참고 : Python 모노레포 uv
  • Git 학습
    다수의 인원이 사용하게 되므로 Git branch 전략과 컨벤션 정의 필요
    예) 브랜치에서 revert commit 은 하지 않기
  • Pull Request, 코드 리뷰
  1. 이벤트 기반 시스템
  • MSA 에서는 이벤트 기반 아키텍처가 핵심적인 역할을 하므로 메시지 큐(스트림)을 이용한 시스템 구축이 필수
    Kafka, RabbitMQ, AWS SQS, AWS Kinesis, Celery, Redis
  1. 데이터베이스 전략
  • 서비스 별 데이터베이스 분리를 해야 MSA 에 부합하겠지만,
    DBMS 의 효율은 단일 서버 파워가 클수록 좋기 때문에 스키마,
    권한으로 분리하고 작으면서 최대한 크게 가져가는 것이 효율적일 수 있음
  1. 모니터링과 로깅
  • 모니터링 : 로그, 메트릭, 트레이싱, 알림
    Prometheus/Grafana, DataDog, New Relic, CloudWatch
    Jaeger, Zipkin, OpenTelemetry, Sentry, Slack, Email

실행

MSA를 준비하면서 기억나는 사항들을 정리했습니다.
이 다음은 각자에 맞춰 실행하는 것입니다.

MSA의 강점은 서비스를 작게하여 변경이 구조를 강제로 최소화 할 수 있는 것입니다.
이러한 사항은 모놀리스라고 해내지 못할 것은 아닐 것입니다.
그러나 배포가 잦고 명확히 도메인을 나눌 수 있는 서비스들이 많을 경우 MSA가 큰 강점을 가질 수 있을 것입니다.
MSA의 성공 여부는 구성원들의 MSA 에 대한 이해도와 DevOps 성숙도에 큰 영향을 받겠습니다.