마이크로서비스는 운영의 단순함을 독립성과 확장성과 맞바꿉니다. 대규모 시스템과 팀에는 도움이 되지만 분산 시스템의 복잡성을 더합니다.
장점
- 독립 배포 — 전체 릴리스 없이 하나의 서비스만 출시.
- 독립 확장 — 부하가 높은 서비스만 확장.
- 기술 자유 — 서비스별로 적합한 언어/DB 선택.
- 장애 격리 — 하나의 서비스 장애가 시스템 전체를 중단시키지 않음.
- 팀 자율성 — 소규모 팀이 서비스를 처음부터 끝까지 소유.
단점
text
✗ 분산 시스템의 복잡성(네트워크 장애, 재시도, 타임아웃)
✗ 단순한 ACID 트랜잭션 대신 eventual consistency
✗ 서비스 경계를 넘나드는 테스트와 디버깅의 어려움
✗ 운영 부담(서비스별 CI/CD, 모니터링, 트레이싱)
✗ 서비스 간 네트워크 지연
솔직한 트레이드오프
text
모놀리스의 고통 ──────────────▶ 코드/팀 규모에 따라 증가
마이크로서비스의 고통 ──────────▶ 높은 고정 비용, 완만한 기울기
→ 일정 규모 이하에서는 모놀리스가 단순히 더 저렴하다.
왜 중요한가
장점은 조직적이고 운영적인 것이지 마법이 아닙니다. 많은 팀이 독립적으로 배포하고 부분을 다르게 확장해야 할 때 그 값을 합니다.
단점은 초기에도 지속적으로도 발생합니다.
자동화, 관측 가능성(observability), CI/CD에 투자할 수 없다면, 마이크로서비스는 속도를 높이기는커녕 오히려 느리게 만들 것입니다.
