서비스 사용자(Service Consumer) : '서비스 제공자'에 의해 제공되고 있는 하나 이상의 서비스를 사용한다.
서비스 제공자(Service Provider) : '서비스 사용자'가 호출시 입력하는 값을 가공하여, 그에 해당하는 결과를 제공한다. 경우에 따라 '서비스 제공자'는 또 다른 '서비스 제공자'의 서비스를 사용하는 '서비스 사용자'가 될 수도 있다.
서비스 레지스트리(Service Registry) : 서비스에 대한 설명 정보(descriptions)를 저장하고 있다. '서비스 제공자'는 자신이 제공하고 있는 서비스를 등록하고, '서비스 사용자'는 자신이 원하는 서비스를 발견하여 사용한다.
여기서 우리는 SOA를 이해하기 위한 세 가지 주요 요소를 추출할 수 있다. '서비스', '메시지' 그리고 '서비스 발견'이 그것이다. 이들 각각에 대한 이해를 통해, 우리는 SOA의 본질에 보다 가까이 갈 수 있다.
서비스
SOA의 관점에서 서비스는 인터페이스를 통해 자신이 가진 비즈니스 프로세스를 처리할 수 있는 컴포넌트로 정의된다. 아래 그림과 같이 서비스는 인터페이스와 구현 부분으로 구성된다.
서비스가 가지는 특징을 다음과 같이 3가지로 요약할 수 있다.
서비스의 인터페이스는 플랫폼에 독립적이다.
서비스는 동적으로 발견될 수 있으며, 호출될 수 있다.
서비스는 self-contained하다. 즉, 자신의 상태를 스스로 유지한다.
서비스의 탄생으로 인해 자체적으로 소프트웨어를 만드는 기업은 점차 사라지고, 향후에는 만들어져 있는 소프트웨어를 서비스 단위로 구입하여 사용하는 패러다임이 대세를 이룰 것으로 예상된다.
메시지
SOA를 이루는 두 번째 중요한 개념은 메시지이다. 서비스 제공자와 서비스 사용자는 메시지를 통해 서로 통신한다. 서비스 제공자는 서비스 명세를 통해 자신이 가진 서비스의 인터페이스를 공개하는데, 이 명세 내에는 서비스가 제공하는 기능과 이를 이용하기 위해 사용자와 주고 받아야 하는 메시지의 형식이 정의되어 있다. SOA 관점에서 서비스는 플랫폼 독립적이어야 하므로, SOA에서 정의되는 메시지는 특정 기술에 독립적이어야 한다. 아래 그림은 서비스 제공자와 서비스 사용자가 메시지를 통해 통신하는 모습을 보여준다.
이러한 SOA 메시지를 체계를 응용하면 아래 그림과 같이 보다 복잡한 아키텍처를 구성할 수 있다. 서비스 제공자는 동시에 서비스 사용자가 될 수 있다. 서비스 제공자는 다른 서비스 제공자로부터 비즈니스 프로세스나 컨텐츠 등을 제공 받아 보다 가치 있는 서비스를 제공할 수 있다는 것이다.
서비스 발견
서비스 발견이란 서비스 사용자가 서비스 레지스트리로부터 자신의 원하는 서비스 제공자를 찾는 작업을 말한다. 이를 위해서는 서비스 레지스트리는 서비스를 등록하고 발견하는 기능을 제공해야 한다. SOA의 관점에서 서비스 레지스트리는 다음과 같은 요구사항을 만족해야 한다.