서비스 지향 아키텍처(이하 SOA)란 서비스의 최종 능력 집합을 제공하는 여러 서비스가 서로 협업하도록 하는 설계 접근 방식이다. 서비스 간 통신은 네트워크 호출로 이루어진다.
대뮤고 모놀리식 애플리케이션의 도전에 대한 대응으로 출현한 SOA는 소프트웨어의 재사용성 자열를 목표로 한다.
서비스의 의미를 아주 많이 변경하지 않는 한 이론적으로 남들 모르게 서비스를 다른 서비스로 대체할 수 있어 소프트웨어 유지보수와 재작성을 더 쉽게 한다.
이러한 SOA는 본래 매우 훌륭한 아이디어지만, 많은 노력에도 불구하고 SOA를 잘하는 방법에 대한 합의는 부족했다.
SOA 앞에 산적한 많은 문제 중에 통신 프로토콜(예를 들면 SOAP), 벤더 미들웨어, 서비스 세분화에 대한 지침 부족, 분리할 시스템 선정에 대한 잘못된 지침과 같은 것들이 있다.
SOA에 관한 지부한 많은 지식은 큰 시스템을 어떻게 작게 나눌 수 있는지 고민하는데 도움이 되지 않는다. 게다가 얼마나 커야 큰 것인지 설명하지 않고, 서비스가 지나치게 결합되지 않도록 하는 현실적이고 실질적인 방법을 충분히 다루지도 않는다.
실사용을 기반으로 출현한 마이크로서비스는 SOA에 적합한 시스템과 아키텍처를 더 잘 이해할 수 있게 해준다. XP와 스크럼이 애자일 소프트웨어 개발의 특정 접근법으로 여겨지듯이, 마이크로서비스는 SOA에 대한 특정 접근법으로 보아야한다.