사실 SOA는 이미 CORBA나 DCOM등의 분산 객체 기술에서 그 기본 개념이 사용되었으나, 기술적인 문제(기술적인 미성숙 및 공개 표준의 부재)와 비즈니스 문제들(주요 소프트웨어 벤더들 간 협력의 부재)로 인하여 그리 큰 주목을 받지 못했다. 하지만 XML 기반의 웹 서비스 기술이 등장하면서 SOA는 새롭게 조명을 받고 있다.
W3C는 SOA를 "호출 가능한 컴포넌트의 집합"으로 정의 하고 있다. 여기서 컴포넌트는 그 인터페이스의 정의 내용이 공개(publish)‧발견(discovery) 가능한 것을 의미한다. 하지만 CBDI는 이 정의에 대해 두 가지 문제점을 지적하고 있다. SOA가 단순한 컴포넌트의 집합이 아니라는 점과, 정의 자체가 아키텍처의 구성 방법 보다는 이미 정의되어 있는 컴포넌트만을 염두 해두고 있다는 점이다. 따라서 CBDI는 SOA를 “애플리케이션의 기능들을 사용자(consumer)에 적합한 크기(granularity)로 공개한 서비스들의 집합으로 제공하고 사용되게 하는 정책(policy), 적용(practice), 또는 프레임워크(framework)"로 정의하고, 이 때 서비스는 ”단일한 표준기반의 인터페이스 형태를 사용하여 구현과 독립적으로 추상화되며, 호출(invoke)되고, 공개(publish)되며, 발견(discover)할 수 있는 것“이라 정의하였다.
즉 SOA란 서비스라 불리는 분할(decomposition)된 애플리케이션 조각들을 단위로 느슨하게 연결해 하나의 완성된 애플리케이션으로 만드는 아키텍처이다.
서비스(Service)의 개념
SOA가 무엇인지 좀 더 명확히 하기 위해서 서비스가 무엇인지 좀더 상세히 설명할 필요가 있다. 일반적으로 서비스란 생산된 재화를 운반·배급하거나 생산이나 소비에 필요한 노무를 제공하는 것을 말한다. 즉 하나의 컴포넌트가 다른 컴포넌트와 인터페이스 계약을 통하여 제공 되어지는 행동을 서비스라고 한다.
사실 “서비스”란 용어는 IT분야에서도 지난 10여 년동안 폭넓게 사용되어왔다. 예를 들면, 이미 1990년대 초기에 트랜잭션 모니터링(Transaction Monitoring) 소프트웨어는 “서비스”란 용어를 사용해 왔다. 이 소프트웨어는 애플리케이션의 플랫폼에 상관없이 미들웨어에서 트랜잭션 모니터링기능을 제공했다. 또한 1990년대 후반부터는 많은 웹 기반 응용시스템들이 검색엔진(search engine)이나 권한(authorization) 관리, 로그인관리 등 공통적으로 사용 할 수 있는 서비스들(shared component services)을 제공해 왔다.
여기서 중요한 사실은 어떤 과정을 거쳐 우리에게 서비스가 제공되는 지는 관심 밖이라는 사실이다. 단지 우리는 원하는 결과물만을 중요하게 생각하고 있다는 것이다. 114 전화번호 안내 서비스를 예로 들어 보도록 하자. 우리는 찾고자 하는 상호를 말하고, 2~3초 정도를 기다린 후 결과물인 전화번호를 서비스 받는다. 여기서 우리는 전화번호를 찾아내기 위한 과정이나, 시스템의 구현 형태, 보안 따위의 문제는 전혀 중요하게 생각하지 않는다. 단지 안내 받은 전화번호와 그 정확성에만 관심을 두고 있다.
그럼 이제 우리가 다루는 SOA에 좀 더 가까운 또 다른 서비스의 예를 들어보도록 하자. 현재 개발하고 있는 시스템에 사용자가 성인인지 여부를 판단해 주는 기능이 필요한 상황이라고 가정해 보자. 하지만 현재 보유하고 있는 관련 데이터가 없어 직접 구현하는 것이 불가능 하다. 이럴 때 이 기능을 서비스로 제공하는 사업자가 있다면 조회 건수당 얼마씩의 비용을 지불하고 손쉽게 이용할 수 있다. 바로 이러한 것들이 SOA에서 말하고 있는 서비스이다. 즉, 우리가 원하는 결과를 어떻게 해서든 제공하고, 우리가 그것을 이용할 수 있도록 하는 것이 서비스인 것이다. 또 이전의 서비스들과 달리 상호운용성을 강조하며 네트워크에서 접근할 수 있도록 공개된 인터페이스를 가지고 있어야 하며, 동적으로 발견‧사용될 수 있어야 한다. 서비스는 여러 애플리케이션으로부터 추출된 것이며, 이들 서비스를 서로 조합하여 비즈니스 프로세스를 구성할 수 있으며, 서비스는 기술적 계층과는 독립성을 갖는다.