
대규모 애플리케이션을 여러 작고 독립적인 서비스들로 나누어 개발된 구조, 모놀리틱 시스템의 대안으로 등장했다.
각 마이크로서비스는 독립적으로 개발되고 배포될 수 있으며, 각각의 서비스는 일반적으로 비즈니스 기능의 한 부분을 담당하고 서로는 API를 통해 통신한다.
1. 유연성과 확장성: 각 서비스를 독립적으로 확장하거나 업데이트 할 수 있어 시스템 유연성이 증가한다.
2. 고장 격리: 하나의 서비스에 문제가 발생해도 전체 시스템에 영향을 미치지 않아 신뢰성이 향상된다.
3. 기술 다양성: 서비스마다 가장 적합한 기술을 선택할 수 있어 기술 스택의 다양성을 확보할 수 있다.
4. 지속적 배포 및 통합: 각 서비스를 독립적으로 배포할 수 있어 지속적인 개발과 배포에 용이하다.
1. 관리의 복잡성: 각각의 마이크로서비스는 독립적으로 배포되고 운영되어야 하므로, 전체 시스템을 모니터링하고 관리하는 일이 복잡해질 수 있다.
2. 데이터 일관성 유지: 데이터베이스를 독립적으로 운영할 때, 서비스 간 데이터가 중복될 수 있고, 트랜잭션이 여러 서비스에 걸쳐 있을 때 일관성을 보장하기 어렵다.
3. 서비스 간 통신 비용: 마이크로서비스는 네트워크를 통해 서로 통신하기 때문에 지연 시간과 통신 비용이 발생한다. 서비스 간의 요청이 많을수록 비용이 증가한다.
4. 보안 문제: 각 서비스가 API를 통해 통신하므로, 각 API의 보안을 철저히 관리해야 하며, 잠재적인 보안 취약점에 대해 주의해야 한다. 하나의 서비스가 보안이 약하다면 전체 시스템에 위험을 초래할 수 있다.
온라인 쇼핑몰의 전체적 기능을 독립적인 마이크로 서비스로 나누어 운영한다.
- 사용자 관리 서비스: 사용자 로그인/회원가입/프로필 관리
- 상품 관리 서비스: 상품 등록/수정/조회 등 상품 DB에 직접 접근해 관리
- 주문 처리 서비스: 상품 구매 시 결제 처리와 주문 상태 업데이트
- 결제 서비스: 신용카드 결제나 간편 결제 등 다양한 방법으로 결제 처리
- 리뷰 서비스: 상품에 대한 리뷰를 작성
상품 관리 서비스를 업그레이드하려 할 때 주문 처리 서비스나 결제 서비스 등은 영향을 받지 않고 계속 운영될 수 있다. 각 서비스가 독립된 데이터베이스를 가지고 있고, 정의된 API를 통해서만 다른 서비스와 통신하기 때문이다.
상품 관리 서비스에 문제가 발생하더라도, 사용자 관리 서비스와 결제 서비스는 정상적으로 작동하여 사용자가 로그인하고 결제할 수 있다. 특정 부분에 문제가 발생해도 전체 시스템의 다운타임을 최소화할 수 있는 고장 격리 기능을 제공한다.
사용자가 주문을 하고 나서 상품 관리 서비스의 재고가 감소해야 하지만, 주문 처리 서비스와 상품 관리 서비스 간의 동기화 문제로 인해 재고 관리에 혼란이 생길 수 있다.