Simple Object Access Protocol(SOAP)은 IBM, Microsoft, DevelopMentor, UserLand Software에서 공동 참여하여 만든 네트워크를 통한 정보 교환용 W3C 표준이다. 점점 더 많은 SOAP 서버들을 웹에서 사용할 수 있게 되면서, SOAP은 거의 모든 프로그램- Visual Basic, JavaScript, Perl 같은 대중적이며 단순한 언어로 작성된 프로그램 포함-에서 실행될 수 있다. SOAP을 통해, 웹에서 사용할 수 있는 많은 정보 소스들을 활용할 수 있다.
HTML과 마찬가지로, SOAP은 HTTP 전송 프로토콜을 사용하여 웹을 통해서 보내지는 다양한 정보의 역할을 지정하는 태그를 제공한다. (SOAP 1.1부터는 SMTP도 마찬가지다.) 하지만 SOAP은 HTML 보다 더 훨씬 강력하다. SOAP을 사용해서, 프로그램은 "SOAP 요청"(원격 머신에서 호출할 메소드와 매개변수를 설명하고 있는 짧은 XML 문서)를 SOAP 서버로 보낸다. SOAP 서버는 그러한 매개변수를 가진 메소드를 실행하고 SOAP 응답을 다시 프로그램으로 보낸다. 응답은 실행 결과가 되거나 에러 메시지가 될 수 있다. 퍼블릭 SOAP 서버는 주식 가격, 최신 환율, FedEx 운송 정보, 대수식에 대한 해답, 모든 종류의 정보를 SOAP 클라이언트에 제공할 수 있다.
SOAP가 생겨나기 전에, 이러한 종류의 정보를 사용하는 프로그램들은 웹 페이지를 가져와서 해당 텍스트를 찾기 위해 HTML을 분석해야 했다. 그러한 웹 페이지들을 다시 디자인 하는 것은(예를 들어, 현재 주식 시세를 테이블의 두 번째 칼럼 대신 세 번째 칼럼에 두는 일) 이러한 프로그램을 쓸모 없게 만들기만 할 뿐이었다. SOAP 스팩과 SOAP 요청과 응답과 관련한 스키마는 훨씬 더 강력한 클라이언트와 서버간 연결 프레임웍을 제공한다.
대중적인 프로그래밍 언어에 사용할 수 있는 많은 SOAP 클라이언트들이 있다. SOAP::Lite for Perl 홈 페이지에서 SOAP Toolkits 섹션을 참조하라. (참고자료) 본 자료는 자신의 프로그램에서 호출할 수 있는 클래스 라이브러리, COM 객체 등을 제공한다. 일반적으로 이러한 클라이언트 라이브러리는 다음과 같은 패턴을 따른다.
- 프로그램은 호출할 원격 메소드의 이름과 필요한 매개변수들을 전달한다.
- 라이브러리는 정보를 패키징 하기 위해 SOAP 요청에 대한 알맞은 XML 문서를 생성한다.
- 라이브러리는 SOAP 엔드포인트 URL로 구분된 SOAP 서버로 XML 문서를 전달한다. 대개의 경우, 웹서버 주소에 SOAP서버의 URL을 지정하는 방식으로 브라우저로 연결해 볼 수 있다.
- SOAP 서버가 메소드 실행을 시도한 후에, 실행 결과에 대한 SOAP 응답 XML 문서를 생성하고 이를 SOAP 클라이언트로 보낸다.
- 클라이언트 라이브러리는 SOAP 응답을 받은 후, XML을 파싱하여 메소드 호출 결과를 받아서 그 결과를 프로그램에 전달한다.
SOAP 개요 (Graham Glass의 "The Web services (r)evolution" 칼럼-developerWorks)에서는 SOAP 요청과 응답에 사용되는 XML 문서의 구조에 대해서 설명하고 있지만, 내가 사용했던 SOAP 클라이언트는 언제나 XML 생성과 파싱을 자동으로 처리해줬기 때문에 나는 그런 일들을 처리 할 필요가 없었다. XML 사용자로서, 나는 XML 부분은 내 스스로 해보고 싶었다. SOAP가 그렇게 단순하다면 SOAP 요청에 대한 XML 문서를 읽는 간단한 SOAP 클라이언트를 작성하여, 이것을 지정된 SOAP 엔드포인트 URL로 보내고, 응답 문서를 읽고, 결과를 출력할 수 있겠다는 생각이 들었다. 이는 어떤 서버의 어떤 메소드라도 호출할 수 있기 때문에 진정한 범용클라이언트가 될 것이다.
Listing 1의 SoapClient4XG ("SOAP Client for XML Geeks") 자바 클래스는 앞서 언급한 SOAP Toolkits 페이지에 열거된 특별한 Java SOAP 클래스를 사용하지 않고도 수행된다. (참고자료) 필요한 SOAP 엔드포인트 URL과 SOAP XML 문서 파일 이름 매개변수들과 원래의 SOAP 액션 매개변수를 검사한 후에, 파일을 읽고, 이것을 SOAP 서버로 보내고, 다시 응답을 읽고 그 결과를 출력한다.
SOAP 클라이언트는 HTTP 프로토콜을 사용하여 XML SOAP 요청을 보내기 때문에, 가장 필요한 작업은 HTTP 설정이다. 자바는 HTTP 매개변수들을 설정할 HttpURLConnection 클래스와 수 많은 "set" 메소드를 제공하고, 이들 중 대부분이 단순한 문자열로 설정될 수 있다. 약간의 추가 코드를 필요로 하는 한 가지 HTTP 매개변수는 Content-Length이고, SoapClient4XG는 XML 요청의 길이를 계산한다. 이것을 요청을 읽은 후에 바이트 어레이에 놓고 바이트 어레이의 length 프로퍼티를 체크한다.
이러한 HTTP 매개변수들을 설정할 수 있는 다른 HTTP 구현들도 사용할 수 있다. Sun의 오픈 소스 Brazil 웹 애플리케이션 프레임웍(참고자료)는 HTTP 핸들링을 자동화 하고, SOAP 에러 핸들링을 더욱 쉽게 한다. 오래된 HttpURLConnection 클래스와는 달리 이것은 범용 HTTP 클래스로서 특별히 자바 애플릿으로 손쉽게 이미지나 웹 리소스들을 불러오도록 작성되지는 않았다.
Listing 1의 전체 SOAP 클라이언트를 참조하라.
Xmethods.com (참고자료)에서는 공개적으로 사용할 수 있는 SOAP 서비스 리스트를 제공하고 있다. 추가적으로 각 서비스가 필요로 하는 추가 SOAP Action 파라메터의 여부와 샘플 요청들을 포함한 대한 설명들을 제공하기 때문에, 나는 그곳에서 제공하는 날씨기온 SOAP 서버의 샘플 요청을 복사하여 몇 개의 공백을 추가하고 zipcode 요소에 내가 속한 zip code를 사용하였다. (Listing 2)
이 파일을 weattherreq.xml이라는 파일에 저장하고, Listing 3의 명령은 샘플 XML을 받았던 같은 XMethods 웹 페이지에 지정된 SOAP 엔드포인트 URL로 내용을 보낸다.
Listing 4를 보면, SOAP 서버는 response 엘리먼트에 저장된 현재 기온에 대한 SOAP 응답을 보낸다.
이 SOAP 클라이언트는 여러분이 만든 XML 문서 파일에서 SOAP 요청을 보내기 때문에, 클라이언트가 내부에서 자동으로 요청을 만드는 대신 XML 에디터나 텍스트 에디터를 사용하여, 보내지는 XML을 직접 다룰 수 있다. 더 중요한 점은 이 클라이언트는 늘어나는 SOAP 서비스들을 약간의 작업만으로 선택적으로 호출 할 수 있다는데 장점이 있다는 것이다. 서비스의 SOAP 엔드포인트 URL의 이름을 정하고, HTTP 매개변수를 설정하고, 호출할 메소드와 매개변수를 나타내는 XML을 보내고 응답을 기다리면 된다.
여러분이 좋아하는 프로그래밍 언어에 SOAP 라이브러리가 있는지 점검해 보라. 나의 SOAP 클라이언트보다 더 나은 에러 핸들링을 제공하고, 강력한 애플리케이션 개발 향상에 기여하는 토대가 될 기능도 있을 것이다. 하지만, 단순하면서도 궁극적인 것이 내재되어 있는 이 간단한 프로토콜은 대단한 것을 해낼 수 있다는 것을 명심하기 바란다)
(Michael Brennan에게 감사의 말을 전한다.)
-
SOAP Toolkits 섹션: SOAP::Lite for Perl 홈 페이지
- Graham Glass의 developerWorks 시리즈 "The Web services (r)evolution," particulary Part 2와 Part 3: SOAP 개발
- James Snell의 Web services insider, Part 1: Reflections on SOAP: 업계에서의 SOAP의 역할과 SOAP 툴킷의 기능 비교
- Uche Ogbuji의 SOAP 애플리케이션에서 WSDL 사용하기 (한글) : Web Services Description Language 소개 및 SOAP 개발에 미치는 영향
-
XMethods.com : SOAP 서비스 리스트 소개
-
W3C의 SOAP 1.1 스팩
- Apache XML Project의 Apache SOAP.
- Sun의 : SOAP 메시징 지원 방식

Bob DuCharme (www.snee.com/bob)은 Manning Publications의 XSLT Quickly, Prentice Hall의 XML: The Annotated Specification and SGML CD, McGraw Hill의 Operating Systems Handbook의 저자이다. XML.com에 "Transforming XML" 칼럼을 연재하고 있으며, XML Magazine, XML Journal, IBM developerWorks, Prentice Hall의 XML Handbook에 글을 기고하고 있다. 컨퍼런스에서도 활발한 활동을 하는 Bob은 UDICo (www.udico.com)의 기업 문서 부분 부회장이다. Columbia University에서 종교학 학사 학위를 받았고, New York University에서 컴퓨터 공학 석사 학위를 받았다. Park Slope, Brooklyn에서 아내와 두 딸과 함께 살고 있다.