마이크로서비스는 애플리케이션 구축을 위한 아키텍처 기반의 접근 방식입니다. 마이크로서비스를 전통적인 모놀리식(monolithic) 접근 방식과 구별 짓는 기준은 애플리케이션을 핵심 기능으로 세분화하는 방식입니다. 각 기능을 서비스라고 부르며, 독립적으로 구축하고 배포할 수 있습니다. 이는 개별 서비스가 다른 서비스에 부정적 영향을 주지 않으면서 작동(또는 장애가 발생)할 수 있음을 의미합니다.
MONOLITHIC 소프트웨어에서는 코드 저장소로써 개발자는 오직 한가지 언어로만 구현합니다 그러나 마이크로 서비스에서는 각 서비스는 독립적이고 새로운 프로젝트이며 요구사항에 맞는 어떠한 언어든지 사용해서 구현을 할 수 있습니다.
개발자는 오직 특정 서비스만 집중하기 때문에 구현단계에서 효율을 높일 수 있고 개발자는 코드에 대해서 상세히 파악할 수 있습니다.
중앙화된 데이터베이스가 없습니다. 각 모듈은 각자의 데이터베이스를 가지고 있기 때문에 데이터는 분산 되어있습니다.
이러한 분산화된 서비스들은 배포단계에서 쿠버네티스와 도커와의 결합성이 뛰어납니다. 이는 도커와 쿠버네티스의 장점을 그대로 받아들여 효과를 볼 수 있습니다.
모든 기능적 특성은 개별 서비스이며 따라서 큰 프로젝트에는 많은 서비스들이 있습니다. 이러한 서비스들을 모니터링하는 것은 오버헤드를 증가시킵니다.
그뿐만이 아니라 서비스가 장애가 나는 경우 장애를 추적하는 것은 힘든 작업이 될 수 있습니다.
서비스는 다른 서비스를 호출하기 때문에 경로를 추적하고 디버깅하는 것 또한 어렵습니다.
각 서비스는 로그를 생성하기 때문에 중앙 로그 모니터링은 없습니다. 이는 매우 고통스러운 부분이며 장애를 대비해 아주 좋은 로그 관리 시스템을 필요로 합니다.
이러한 단점이 있지만 최근 많은 회사들에서 마이크로 서비스 아키텍처를 많이 받아들이며 회사 우대사항에 마이크로 서비스 아키텍처에 대한 이해성을 높은 부분으로 요구 하고 있다. 따라서 이는 단점보다는 장점을 더 인정하는 추세라고 생각되며 나 또한 이러한 아키텍처가 거대한 어플리케이션을 만드는데 오히려 좋은 아키텍처라고 생각된다.