Spring Boot Microservices Explained - What & Why?
- 마이크로서비스는 비즈니스 도메인을 중심으로 모델링된 독립적으로 배포 가능한 서비스입니다. 📦
- 모놀리식 아키텍처는 단일 애플리케이션으로 개발 및 배포되지만, 복잡성이 증가하면 개발, 배포, 유지보수가 어려워집니다. 🏗️
- 마이크로서비스는 각 서비스가 자체 데이터베이스와 잘 정의된 API를 가지며, API를 통해서만 상호작용하는 '블랙박스' 개념을 따릅니다. 🗄️
- 각 비즈니스 도메인(예: 주문 관리, 결제 처리, 고객 지원)은 해당 마이크로서비스를 소유하며, API 계약을 유지하는 한 독립적으로 변경 및 배포할 수 있습니다. 🏢
- 마이크로서비스는 더 작고 단순하며 독립적으로 배포 가능하여, 자율적인 팀이 다른 팀과의 조율 없이 변경 사항을 배포할 수 있게 합니다. 🚀
- 기업이 마이크로서비스를 선택하는 주된 이유는 시스템 및 팀의 확장성(scaling)을 높여 더 많은 가치를 제공하기 위함입니다. 📈
- 개별 마이크로서비스는 독립적으로 확장 가능하며, 각 서비스의 특정 요구사항에 맞춰 하드웨어를 최적화하여 성능을 극대화할 수 있습니다. ⚙️
- 마이크로서비스는 각 팀이 자신의 서비스를 소유하게 하여 코드 충돌을 줄이고, 소유권을 명확히 하며, 더 많은 개발자가 효과적으로 기여할 수 있도록 돕습니다. 🤝
- 마이크로서비스는 만능 해결책이 아니며, 분산 시스템의 복잡성(예: 신뢰할 수 없는 네트워크를 통한 API 호출, 데이터 일관성 유지)이라는 큰 과제를 안고 있습니다. 🕸️
- 마이크로서비스는 '마이크로서비스 세금'이라고 불리는 상당한 운영 오버헤드를 발생시킵니다. 각 서비스마다 모니터링, 로깅, 배포 파이프라인, 인프라 자원이 필요하며, 서비스 디스커버리, API 게이트웨이, 트레이싱 등의 추가 도구가 요구됩니다. 💸
- 개발 복잡성도 증가합니다. 엔드 투 엔드 테스트가 어려워지고, 로컬 개발 환경에서 실행할 수 있는 마이크로서비스 수에 제한이 있어 개발자가 불완전한 시스템으로 작업하거나 긴 피드백 주기를 감수해야 할 수 있습니다. 🧪