Chapter 2 SOAP(Simple Object Access Protocol)
“SOAP은 분산 환경에서 구조화된 정보를 교환하기 위한 경량 프로토콜이다. SOAP은 확장성 있는 메시지 프레임워크를 정의하기 위해 XML 기술을 사용하고, 하부에 다양한 프로토콜을 사용하여 데이터가 교환될 수 있는 메시지 구조를 제공한다. 이 프레임워크는 특정 프로그래밍 모델이나 구현 방식에 독립적일 수 있도록 디자인 되어있다.”
SOAP는 객체에 접근하기 위한 프로토콜이다. 리모트에 있는 객체를 참조하기 위한 다양한 정의를 할 수 있는 것이 SOAP이다. 처음에는 SOAP이 특정 컴포넌트, 즉 DCOM이나 CORBA 같은 객체의 메소드를 리모트로 서비스하는 데 집중하였기 때문에 프로토콜 이름에 Object라는 말이 들어갔다. 하지만 SOAP는 객체의 메소드를 서비스하는 것에 만족하지 않고 이제 메시징 처리를 위한 기본 프로토콜로 변모하였다. SOAP이 메시지 처리의 기본 프로토콜로 자리 잡은 이유는 단순하다는 것 때문이다. 단순하고 가볍기 때문에 인터넷을 기반으로 사용할 수 있는 것이다.
SOAP은 산업 표준인 XML에 기반하고 있기 때문에 어떤 애플리케이션에서도 사용할 수 있는 프로토콜인 것이다.
1. SOAP의 작동 원리
대다수의 방화벽이 웹 포트인 80 포트만 허용하기 때문에 SOAP은 대부분 HTTP에 의존하여 메시징 처리가 이루어진다. SOAP이 인터넷을 통한 메시징 처리의 표준으로 자리 잡을 수 있었던 이유는 HTTP 위에 SOAP이 올라갈 수 있기 때문이다. HTTP위에 SOAP이 올라간다는 것은 HTTP의 요청과 응답에 메시지에 SOAP 메시지가 포함될 수 있다는 것을 의미한다.
SOAP 스펙은 SOAP 메시지들이 단방향(one-way)이 아니라 양방향(two-way)이라고 말하고 있다 서버뿐 아니라 클라이언트도 SOAP메시지를 해석할 수 있어야 한다.
SOAP에 HTTP를 이용하는 이유
· HTTP는 이미 널리 구현되어 있으며, 이해하기 쉬운 프로토콜이다.
· 그 자체가 가지고 있는 요청/응답 패러다임이 RPC와 잘 들어 맞는다.
· 이미 대부분의 방화벽이 HTTP에서 작업할 수 있도록 설정되어 있다.
· HTTP는 보안 소켓 레이어(Secure Sockets Layer, SSL)를 이용하여 쉽게 보안을 구축 할 수 있다.
SOAP은 TCP나 HTTP뿐만 아니라 SMTP 같은 다양한 프로토콜과도 함께 사용할 수 있는 것이다. 메시징 서버를 사용해서 메시지 처리를 할 때와 마찬가지로, SOAP은 기본적으로 단방향으로 메시지를 보낸다. 송신자는 메시지를 보내지만, 수신자로부터 메시지를 받지는 않는다. 하지만 송신자가 메시지를 보내고 그 결과로 다시 SOAP 프로토콜을 통해 메시지를 받는 것은 가능하다.
2. SOAP 메시지의 구조
SOAP 메시지는 크게 SOAP Envelope, SOAP Header, SOAP Body, SOAP Fault로 구성되어있다.
· SOAP Envelope : Envelope는 SOAP 메시지를 감싸는 가장 상위의 요소이다. Envelope는 Header와 Body를 가질 수 있다. · SOAP Header : Header는 메시지에서 필수적인 요소는 아니지만 SOAP 메시지에 기능을 추가 하는 역할을 담당한다. 여러 가지 정보를 헤더에 담기 위해 여러 개의 블록으로 구성되어 있으며, Header는 Envelope 태그 다음에 가장 먼저 나오는 항목이어야 한다. 보통 Header는 인코딩, 인증, 트랜잭션 같은 관리적인 문제에 사용된다.
· SOAP Body : Body는 SOAP을 통해 전송할 데이터로 채워진다. 여러 개의 블록으로 구성될 수 있으며, 요청할 때 요청할 웹 서비스의 이름과 매개변수로 채워지고, 응답할 때는 결과로 채워진다.
· SOAP Fault : SOAP 처리를 한 후 발생하는 에러 처리 메시지가 이 영역에 채워진다. SOAP Fault는 에러에 대한 자세한 내용을 기술할 수 있도록 다음과 같이 여러 개의 요소를 지원한다.
- <faultcode> : 에러의 종류를 코드로 구분할 수 있도록 해준다. 웹 서비스 소비자는 이 코드를 보고 어떤 종류의 에러가 발생했는지 알 수 있다. SOAP에는 SOAP 메시징에서 일어날 수 있는 기본 코드를 정의하고 있고 웹 서비스 제공자가 별도로 정의할 수도 있다.
- <faultstring> : 코드가 기계적인 내용인 데 반해, 스트링은 사람이 에러에 대한 내용을 읽고 이해할 수 있도록 해준다.
- <faultactor> : 메시징 처리를 하는 중에 어떤 부분에서 에러가 발생했는지 알릴 때 사용된다.
- <detail> : Body에 관련된 데이터 때문에 SOAP 메시징이 성공하지 못했을 경우에 사용된다. 만약 에러가 발생했는데 <detail> 부분이 없다면, Body와 관련된 부분에서 에러가 발생하지 않았다는 것을 알 수 있다.
SOAP Request
SOAP Response
SOAP Fault
|