2.1 마이크로서비스 아키텍처란 무엇인가?
1장에서 마이크로서비스 아키텍처의 핵심 사상은 기능 분해라고 했습니다. 대규모 단일 애플리케이션을 개발하는 대신 애플리케이션을 여러 서비스로 구성하자는 것입니다. 마이크로서비스 아키텍처 자체를 일종의 기능 분해라고도 볼 수 있지만 몇 가지 의문점이 생깁니다. 마이크로서비스 아키텍처는 광의(廣義)의 소프트웨어 아키텍처 개념과 어떤 연관이 있을까요? 그리고 서비스란 무엇이고, 그 크기는 어느 정도가 적당할까요?
이 질문에 답하려면 소프트웨어 아키텍처란 과연 무엇인지 한 걸음 물러나 되새겨 볼 필요가 있습니다. 소프트웨어 아키텍처는 구성 요소 및 그들 간의 디펜던시(dependency, 의존관계)로 엮인 고수준의 구조물입니다. 애플리케이션 아키텍처는 다차원적(multidimensional)이므로 기술하는 방법도 다양합니다. 아키텍처가 중요한 이유는 소프트웨어의 품질 속성, 즉 ‘~성(-ilities)’으로 끝나는 지표가 아키텍처에 의해 결정되기 때문입니다. 예전에는 확장성, 신뢰성, 보안 등이 아키텍처의 목표였지만, 이제 신속/안전하게 소프트웨어를 전달하는 능력도 매우 중요합니다. 곧 배우겠지만, 마이크로서비스 아키텍처는 관리성, 테스트성, 배포성이 높은 애플리케이션을 구축하는 아키텍처 스타일(architecture style)입니다.