MSA(Microservice Architecture)는 하나의 거대한 모놀리식 시스템을 작고 독립적인 서비스 단위로 나누어 개발, 배포, 운영하는 소프트웨어 아키텍처 스타일입니다.
| 구성요소 | 역할 및 설명 | 사용 기술 예시 |
|---|---|---|
| Load Balancer (로드밸런서) | 서비스 간 트래픽을 균등하게 분산해 시스템 과부하 방지 | Nginx, HAProxy, Envoy, Istio |
| Service Routing (라우팅) | 요청을 적절한 마이크로서비스로 연결 - 정적 라우팅: 수동 설정 - 동적 라우팅: 레지스트리 기반 자동 설정 | Spring Cloud Gateway, Istio, Linkerd |
| Service Registry & Discovery | 서비스 위치를 자동 등록/탐색하여 동적으로 연결 | Consul, Eureka, Zookeeper |
| Circuit Breaker | 실패율이 임계치를 넘을 경우 자동 차단하여 시스템 보호 | Resilience4j, Hystrix |
| Service Management | 서비스 설정, 집계 및 관리 도구 | Spring Admin, Kiali, Grafana |
| Common Service (공통 서비스) | 인증, 로깅, 암호화 등 반복 기능의 공통화 | OAuth2, ELK Stack, Redis, Kafka |
| Business Service (비즈니스 서비스) | 실제 업무 로직을 담당하는 서비스 | 주문/결제/상품 서비스 등 |
| Caching (캐싱) | 자주 사용되는 데이터를 임시 저장해 성능 향상 | Redis, Memcached |
| Storage (저장소) | - RDB: 관계형 DB - NoSQL: 비정형 데이터 저장 - Block/Object Storage: 대용량 파일 | MySQL, MongoDB, S3, Ceph |
| CQRS (Command Query Responsibility Segregation) | 쓰기/읽기 로직을 분리하여 성능 및 확장성 강화 | Event Sourcing + Kafka |
| CI/CD (DevOps) | 코드 작성부터 배포까지 자동화 - Profile 관리, Image 생성, 통합 배포 자동화 | Jenkins, GitHub Actions, ArgoCD |
| Monitoring | - Central Monitoring: 메트릭 수집 - E2E Monitoring: 서비스간 흐름 추적 | Prometheus, Grafana, Jaeger |
| Logging | 로깅 데이터를 중앙에서 수집 및 분석 | ELK Stack, Loki |
| Self-Healing | 장애 발생 시 자동 복구를 시도하는 기술 | Kubernetes liveness/readiness probes, Retry policy |
| Infrastructure (인프라) | 서비스가 실행되는 기반 환경 - Bare Metal - VM - PaaS | KVM, Docker, K8s, OpenShift |
마이크로서비스는 레고 블록처럼 각각 다른 역할을 가진 조각들이고,
이 조각들이 잘 협력하려면 주소 찾기(Discovery), 길 안내(Routing), **트래픽 정리(Load Balancing)**가 필요해요.
문제 생기면 자동으로 끊거나 고쳐주는 Circuit Breaker도 있고요.
그림을 모니터하고, 로그를 수집하고, 데이터는 냉장고처럼 Redis에 잠깐 넣어놓을 수도 있어요.
| 핵심 요소 | 핵심 기술 | 정리 키워드 |
|---|---|---|
| 통신 관리 | Gateway, Discovery, Routing | 연결, 탐색, 분산 |
| 상태 관리 | Circuit Breaker, Retry | 신뢰성 |
| 공통 기능 | Auth, Logging, Caching | 재사용 |
| 데이터 계층 | RDB, NoSQL, Object Storage | 저장소 다양성 |
| 운영 인프라 | CI/CD, Monitoring, Logging | 자동화, 가시성 |
| 복원력 | Self-Healing, Redundancy | 장애 대응 |