| 특징 | 설명 |
|---|---|
| 서비스 독립성 | 서비스별 독립적 개발·배포·운영, 느슨한 결합 |
| 분산 데이터 관리 | 서비스별 데이터 저장소, 필요에 따라 데이터 공유·동기화 |
| 유연한 확장성 | 서비스 단위로 독립적 확장 가능 |
| 서비스 복구·격리 | 한 서비스 장애가 전체에 영향 최소화 |
| 서비스 통신 | 표준화된 API (REST, gRPC, 메시지 큐 등)로 서비스 간 통신 |
| 분산 추적·모니터링 | 요청 추적(분산 트레이싱), 성능 모니터링 등 필요 |
| 동적 서비스 검색 | 서비스 디스커버리 필요 (Eureka 등) |
| 기술 유연성 | 서비스마다 기술 스택 자유롭게 선택 가능 |
| 원칙 | 설명 |
|---|---|
| 서비스 세분화 | 비즈니스 기능, 성능, 트랜잭션 경계 등으로 서비스 분리 |
| 도메인 주도 설계 (DDD) | 비즈니스 도메인을 바운디드 컨텍스트로 분리 (독립성↑) |
| 단일 책임 원칙 (SRP) | 클래스·모듈마다 하나의 책임만, 높은 응집도·낮은 결합도 |
| 가벼운 통신 | HTTP/REST, 메시징 큐 등 효율적 통신 설계 |
| 공개 인터페이스 | 각 서비스의 명시적 API 정의 (Swagger, OpenAPI) |
| 독립적 데이터 저장소 | 데이터 독립성 확보 (스키마 충돌 최소화, 서비스 장애 영향 최소화) |
| 구분 | 모놀리식 아키텍처 | 마이크로서비스 아키텍처 |
|---|---|---|
| 아키텍처 구조 | 단일 애플리케이션 | 독립적인 마이크로서비스 집합 |
| 배포 단위 | 전체를 한 번에 배포 | 서비스별 개별 배포 |
| 개발 조직 | 단일 팀 중심 | 도메인 기반의 분산 팀 개발 |
| 개발/배포 속도 | 전체 앱 다시 빌드/배포 | 서비스별 빠른 배포 가능 |
| 확장성 | 수직적 확장(서버 스펙↑) | 수평적 확장(서비스별로) |
| 기술 스택 | 단일 기술 스택 | 서비스별 적합한 기술 스택 선택 가능 |
| 결함 격리 | 전체 앱 영향 | 서비스 단위 격리 |
| 복잡성 | 낮음 (코드 한 덩어리) | 높음 (서비스 간 통신·데이터 관리·모니터링 등 필요) |
| 전략 | 설명 |
|---|---|
| 스트랭글러 패턴 | 기존 모놀리식 앱의 기능을 점진적으로 MSA로 분리 (운영 중에도 점진적 전환 가능) |
| 빅뱅 방식 | 전체를 새롭게 MSA로 재개발 (리스크·비용↑) |
| 서비스 | 설명 | 예시 |
|---|---|---|
| IaaS | 인프라(서버, 네트워크 등)를 가상화해 제공 | AWS EC2, GCP Compute Engine |
| PaaS | 앱 개발·배포 플랫폼 제공 | AWS Elastic Beanstalk, Heroku |
| FaaS | 서버리스 함수 실행 환경 제공 | AWS Lambda, GCP Cloud Functions |
| SaaS | 소프트웨어를 서비스 형태로 제공 | Slack, Google Workspace, Microsoft 365 |
| 구분 | 기술·도구 예시 |
|---|---|
| 환경설정 관리 | Spring Cloud Config (Git 기반 중앙 설정) |
| 서비스 디스커버리 | Spring Cloud Netflix Eureka |
| 로드밸런싱 | Ribbon, Nginx |
| API 게이트웨이 | Spring Cloud Gateway, Zuul |
| 메시징 플랫폼 | Apache Kafka, RabbitMQ |
| 분산 DB | MongoDB, Cassandra, Redis |
| 컨테이너 플랫폼 | Docker, Kubernetes |