SOAP 웹 서비스 튜토리얼: SOAP 프로토콜이란 무엇입니까? 예

SOAP이란 무엇입니까?

SOAP는 HTTP를 통해 웹 서비스에 액세스하기 위한 XML 기반 프로토콜입니다. 모든 응용 프로그램에서 사용할 수 있는 몇 가지 사양이 있습니다.

SOAP는 Simple Object Access Protocol로 알려져 있지만, 나중에는 SOAP v1.2로 단축되었습니다. SOAP는 프로토콜이거나, 다른 말로 하면 웹 서비스가 서로 통신하거나 이를 호출하는 클라이언트 애플리케이션과 통신하는 방법에 대한 정의입니다.

SOAP는 다양한 프로그래밍 언어를 기반으로 구축된 애플리케이션이 서로 쉽게 대화하고 과도한 개발 노력을 피할 수 있도록 중간 언어로 개발되었습니다.

SOAP 소개

오늘날 세계에는 다양한 프로그래밍 언어를 기반으로 구축된 수많은 애플리케이션이 있습니다. 예를 들어 다음과 같이 설계된 웹 애플리케이션이 있을 수 있습니다. Java, 다른 하나는 .Net에 있고 다른 하나는 .Net에 있습니다. PHP.

오늘날의 네트워크화된 세계에서 애플리케이션 간의 데이터 교환은 매우 중요합니다. 하지만 이러한 이기종 애플리케이션 간의 데이터 교환은 복잡할 것입니다. 이 데이터 교환을 달성하기 위한 코드의 복잡성도 복잡할 것입니다.

이러한 복잡성에 대처하는 데 사용되는 방법 중 하나는 XML(Extensible Markup Language)을 애플리케이션 간에 데이터를 교환하기 위한 중간 언어로 사용하는 것입니다.

모든 프로그래밍 언어는 XML 마크업 언어를 이해할 수 있습니다. 따라서 XML은 데이터 교환의 기본 매체로 사용되었습니다.

그러나 데이터 교환을 위해 모든 프로그래밍 언어에서 XML을 사용하는 것에 대한 표준 사양은 없습니다. 이것이 바로 SOAP 소프트웨어가 등장하는 곳입니다.

SOAP는 HTTP를 통한 XML과 함께 작동하도록 설계되었으며 모든 애플리케이션에서 사용할 수 있는 일종의 사양을 갖습니다. 후속 장에서 SOAP 프로토콜에 대한 자세한 내용을 살펴보겠습니다.

SOAP의 장점

SOAP는 애플리케이션 간의 데이터 교환에 사용되는 프로토콜입니다. SOAP를 사용하는 이유는 다음과 같습니다.

  • SOAP 기반 웹 서비스를 개발할 때 웹 서비스가 클라이언트 애플리케이션과 통신하는 데 사용할 수 있는 일부 언어가 필요합니다. SOAP은 이러한 목적을 달성하기 위해 개발된 완벽한 매체입니다. 이 프로토콜은 모든 웹 표준을 관리하는 기관인 W3C 컨소시엄에서도 권장됩니다.
  • SOAP는 애플리케이션 간의 데이터 교환에 사용되는 경량 프로토콜입니다. '라는 키워드에 주목하세요..' SOAP 프로그래밍은 경량 데이터 교환 언어인 XML 언어를 기반으로 하기 때문에 SOAP도 동일한 범주에 속하는 프로토콜입니다.
  • SOAP는 플랫폼에 독립적으로 설계되었으며 운영 체제에도 독립적으로 설계되었습니다. 따라서 SOAP 프로토콜은 모든 프로그래밍 언어 기반 애플리케이션에서 작동할 수 있습니다. Windows and Linux 플랫폼입니다.
  • HTTP 프로토콜에서 작동 – SOAP는 모든 웹 애플리케이션에서 사용되는 기본 프로토콜인 HTTP 프로토콜에서 작동합니다. 따라서 World Wide Web에서 작동하기 위해 SOAP 프로토콜을 기반으로 구축된 웹 서비스를 실행하는 데 필요한 일종의 사용자 정의가 없습니다.

SOAP 빌딩 블록

SOAP 사양은 "SOAP 메시지” 이는 웹 서비스와 클라이언트 애플리케이션으로 전송되는 것입니다.

아래의 SOAP 아키텍처 다이어그램은 SOAP 메시지의 다양한 구성 요소를 보여줍니다.

SOAP 빌딩 블록
SOAP 메시지 빌딩 블록

SOAP 메시지는 아래 구성 요소를 포함하는 단순한 XML 문서일 뿐입니다.

  • XML 문서를 SOAP 메시지로 식별하는 Envelope 요소 - 이것은 SOAP 메시지의 포함 부분이며 SOAP 메시지의 모든 세부 정보를 캡슐화하는 데 사용됩니다. 이것은 SOAP 메시지의 루트 요소입니다.
  • 헤더 정보를 포함하는 헤더 요소 - 헤더 요소는 호출 애플리케이션에서 사용할 수 있는 인증 자격 증명과 같은 정보를 포함할 수 있습니다. 또한 SOAP 메시지에서 사용할 수 있는 복합 유형의 정의를 포함할 수도 있습니다. 기본적으로 SOAP 메시지는 문자열 및 숫자와 같은 간단한 유형일 수 있는 매개변수를 포함할 수 있지만 복합 객체 유형일 수도 있습니다.

복잡한 유형의 간단한 SOAP 서비스 예는 아래와 같습니다.

"튜토리얼 이름"과 "튜토리얼 이름"이 조합된 구조화된 데이터 유형을 전송한다고 가정해 보겠습니다. Descript이온”이라면 아래와 같이 복합 유형을 정의합니다.

복합 유형은 요소 태그로 정의됩니다. 구조의 모든 필수 요소와 해당 데이터 유형은 복합 유형 컬렉션에서 정의됩니다.

<xsd:complexType>     
 <xsd:sequence>       
 	<xsd:element name="Tutorial Name" type="string"/>         
  	<xsd:element name="Tutorial Description"  type="string"/>
  </xsd:sequence>
</xsd:complexType>
  • 호출 및 응답 정보를 포함하는 Body 요소 - 이 요소는 웹 서비스와 호출 애플리케이션 간에 전송해야 하는 실제 데이터를 포함합니다. 아래는 헤더 섹션에 정의된 복합 유형에서 실제로 작동하는 SOAP 본문의 SOAP 웹 서비스 예입니다. 다음은 Tutorial Name 및 Tutorial의 응답입니다. Descript이 웹 서비스를 호출하는 호출 애플리케이션으로 전송되는 이온입니다.
<soap:Body>
   <GetTutorialInfo>
		<TutorialName>Web Services</TutorialName> 
		<TutorialDescription>All about web services</TutorialDescription> 
   </GetTutorialInfo>
</soap:Body>

SOAP 메시지 구조

한 가지 주목할 점은 SOAP 메시지가 호출될 때 일반적으로 웹 서비스에 의해 자동 생성된다는 것입니다.

클라이언트 애플리케이션이 웹 서비스의 메서드를 호출할 때마다 웹 서비스는 자동으로 SOAP 메시지를 생성하며, 이 메시지에는 웹 서비스에서 클라이언트 애플리케이션으로 전송되는 데이터의 필수 세부 정보가 포함됩니다.

이 SOAP 튜토리얼의 이전 항목에서 논의한 것처럼 간단한 SOAP 메시지에는 다음과 같은 요소가 있습니다.

  • 봉투 요소
  • 헤더 요소와
  • 본문 요소
  • Fault 요소(선택 사항)

아래의 간단한 SOAP 메시지 예를 살펴보고 요소가 실제로 어떤 역할을 하는지 살펴보겠습니다.

SOAP 메시지 구조

SOAP 메시지 구조
  1. 위의 SOAP 메시지에서 볼 수 있듯이 SOAP 메시지의 첫 번째 부분은 전체 SOAP 메시지를 캡슐화하는 데 사용되는 봉투 요소입니다.
  2. 다음 요소는 실제 메시지의 세부 정보를 담고 있는 SOAP 본문입니다.
  3. 우리의 메시지에는 "Guru99WebService"라는 이름의 웹 서비스가 포함되어 있습니다.
  4. "Guru99Webservice"는 'int' 유형의 매개변수를 허용하며 이름은 TutorialID입니다.

이제 위의 SOAP 메시지가 웹 서비스와 클라이언트 애플리케이션 간에 전달됩니다.

위의 정보가 클라이언트 애플리케이션에 얼마나 유용한지 확인할 수 있습니다. SOAP 메시지는 클라이언트 애플리케이션에 웹 서비스의 이름, 예상되는 매개변수, 웹 서비스에서 사용하는 각 매개변수의 유형을 알려줍니다.

SOAP 봉투 요소

빌딩 블록의 첫 번째 비트는 SOAP Envelope입니다.

SOAP 봉투는 웹 서비스와 클라이언트 애플리케이션 사이에서 교환되는 SOAP 메시지의 모든 필수 세부 정보를 캡슐화하는 데 사용됩니다.

SOAP 봉투 요소는 SOAP 메시지의 시작과 끝을 나타내는 데 사용됩니다. 이를 통해 웹 서비스를 호출하는 클라이언트 애플리케이션이 SOAP 메시지가 끝나는 시기를 알 수 있습니다.

SOAP 봉투 요소에서는 다음과 같은 사항을 주의 깊게 살펴보세요.

  • 모든 SOAP 메시지에는 루트 Envelope 요소가 있어야 합니다. SOAP 메시지에는 봉투 요소가 반드시 있어야 합니다.
  • 모든 Envelope 요소에는 비누 본문 요소가 하나 이상 있어야 합니다.
  • Envelope 요소에 헤더 요소가 포함된 경우 이 요소는 하나만 포함해야 하며 본문 요소 앞에 Envelope의 첫 번째 하위 요소로 표시되어야 합니다.
  • SOAP 버전이 변경되면 봉투가 변경됩니다.
  • v1.1 호환 SOAP 프로세서는 v1.2 봉투 네임스페이스가 포함된 메시지를 수신하면 오류를 생성합니다.
  • v1.2 호환 SOAP 프로세서는 v1.2 봉투 네임스페이스를 포함하지 않는 메시지를 수신하는 경우 버전 불일치 오류를 생성합니다.

다음은 SOAP 봉투 요소 버전 1.2의 SOAP API 예입니다.

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-envelope" SOAP-ENV:encodingStyle=" http://www.w3.org/2001/12/soap-encoding">
          <soap:Body>
        <Guru99WebService xmlns="http://tempuri.org/">
                  <TutorialID>int</TutorialID>
                </Guru99WebService>
          </soap:Body>
</SOAP-ENV:Envelope>

오류 메시지

SOAP 웹 서비스에 대한 요청이 이루어질 때 반환되는 응답은 성공적인 응답 또는 오류 응답의 두 가지 형식일 수 있습니다. 성공이 생성되면 서버의 응답은 항상 SOAP 메시지입니다. 그러나 SOAP 오류가 생성되면 "HTTP 2" 오류로 반환됩니다.

SOAP 오류 메시지는 다음 요소로 구성됩니다.

  1. – 에러가 발생한 코드를 지정하는 코드입니다. 오류 코드는 아래 값 중 하나일 수 있습니다.
    1. SOAP-ENV:VersionMismatch – SOAP Envelope 요소에 대한 유효하지 않은 네임스페이스가 발견되는 경우입니다.
    2. SOAP-ENV:MustUnderstand – mustUnderstand 속성이 "1"로 설정된 Header 요소의 직계 하위 요소가 인식되지 않았습니다.
    3. SOAP-ENV:Client – ​​메시지의 형식이 잘못되었거나 잘못된 정보가 포함되어 있습니다.
    4. SOAP-ENV:Server – 서버에 문제가 있어 메시지를 진행할 수 없습니다.
  2. – 오류에 대한 자세한 설명을 제공하는 텍스트 메시지입니다.
  3. (선택 과목)– 오류를 일으킨 사람을 나타내는 텍스트 문자열입니다.
  4. (선택 과목) – 애플리케이션별 오류 메시지에 대한 요소입니다. 따라서 애플리케이션에는 다양한 비즈니스 논리 시나리오에 대한 특정 오류 메시지가 있을 수 있습니다.

오류 메시지의 예

오류 메시지의 예가 아래에 나와 있습니다. 클라이언트가 GetTutorial 클래스에서 TutorialID라는 메서드를 사용하려고 하는 시나리오에서 오류가 생성됩니다.

정의된 클래스에 해당 메소드가 존재하지 않는 경우 아래와 같은 오류 메시지가 발생합니다.

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
      <SOAP-ENV:Body>
         <SOAP-ENV:Fault>
         <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
        <faultstring xsi:type="xsd:string">
            Failed to locate method (GetTutorialID) in class (GetTutorial)
         </faultstring>
    </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

출력:

위 코드를 실행하면 “클래스(GetTutorial)에서 메서드(GetTutorialID)를 찾지 못했습니다.”라는 오류가 표시됩니다.

SOAP 통신 모델

SOAP에 의한 모든 통신은 HTTP 프로토콜을 통해 수행됩니다. SOAP 이전에는 많은 웹 서비스 통신에는 표준 RPC(Remote Procedure Call) 스타일을 사용했습니다. 이것은 가장 간단한 형태의 의사소통이었지만 많은 한계를 가지고 있었습니다.

이제 이 SOAP API 튜토리얼에서는 아래 다이어그램을 고려하여 이 통신이 어떻게 작동하는지 살펴보겠습니다. 이 예에서는 서버가 다음과 같은 두 가지 메소드를 제공하는 웹 서비스를 호스팅한다고 가정합니다.

  • 직원 가져오기 – 이렇게 하면 모든 직원 세부 정보를 얻을 수 있습니다.
  • 직원 설정 – 이렇게 하면 직원 부서, 급여 등의 세부 정보 값이 그에 따라 설정됩니다.

일반적인 RPC 스타일 통신에서 클라이언트는 요청에 있는 메서드를 호출하고 필요한 매개변수를 서버에 보내면 서버는 원하는 응답을 보냅니다.

SOAP 통신 모델

위의 통신 모델에는 다음과 같은 심각한 제한 사항이 있습니다.

  1. 언어 독립적이지 않음 – 메소드를 호스팅하는 서버는 특정 프로그래밍 언어로 되어 있으며 일반적으로 서버에 대한 호출은 해당 프로그래밍 언어로만 이루어집니다.
  2. 표준 프로토콜이 아님 – 원격진행 호출 시 표준 프로토콜에 따라 호출이 이루어지지 않습니다. 웹을 통한 대부분의 모든 통신은 HTTP 프로토콜을 통해 이루어져야 했기 때문에 이것이 문제였습니다.
  3. 방화벽 – RPC 호출은 일반 프로토콜을 통하지 않기 때문에 클라이언트가 서버와 통신하려면 서버에 별도의 포트를 열어야 합니다. 일반적으로 모든 방화벽은 이러한 종류의 트래픽을 차단하며 클라이언트와 서버 간의 이러한 종류의 통신이 작동하도록 하려면 일반적으로 많은 구성이 필요합니다.

위에 언급된 모든 제한 사항을 극복하기 위해 SOAP는 아래 통신 모델을 사용합니다.

SOAP 통신 모델

  1. 클라이언트는 프로시저 호출 및 인수에 관한 정보를 SOAP 메시지로 형식화하고 이를 HTTP 요청의 일부로 서버에 보냅니다. 데이터를 SOAP 메시지로 캡슐화하는 이 프로세스는 다음과 같이 알려져 있습니다. 마샬링.
  2. 그런 다음 서버는 클라이언트가 보낸 메시지를 풀고 클라이언트가 요청한 내용을 확인한 다음 적절한 응답을 SOAP 메시지로 클라이언트에 다시 보냅니다. 클라이언트가 보낸 요청을 언래핑하는 방식을 다음과 같이 알려져 있습니다. 디마샬링.

실용적인 SOAP 예

이제 이 SoapUI 튜토리얼에서는 실용적인 SOAP 예제를 살펴보겠습니다.

SOAP 메시지가 어떻게 생성되는지 확인하는 가장 좋은 방법 중 하나는 실제로 웹 서비스가 작동하는 모습을 보는 것입니다.

이 주제에서는 Microsoft.Net 프레임워크를 사용하여 ASMX 웹 서비스를 구축합니다. 이 유형의 웹 서비스는 SOAP 버전 1.1과 버전 1.2를 모두 지원합니다.

ASMX 웹 서비스는 자동으로 웹 서비스 정의 언어(WSDL) 문서. 이 WSDL 문서는 웹 서비스가 수행할 수 있는 작업을 애플리케이션이 알 수 있도록 호출 클라이언트 애플리케이션에 필요합니다.

이 예에서는 웹 서비스를 호출하는 애플리케이션에 문자열을 반환하는 데 사용되는 간단한 웹 서비스를 만들겠습니다.

이 웹 서비스는 다음에서 호스팅됩니다. Asp.Net 웹 애플리케이션. 그런 다음 웹 서비스를 호출하고 웹 서비스에서 반환된 결과를 확인합니다.

Visual Studio에서는 웹 서비스와 호출 애플리케이션 간에 전달되는 SOAP 메시지가 무엇인지도 보여줍니다.

웹 서비스 애플리케이션을 설정하기 위한 첫 번째 전제 조건은 아래 단계에 따라 수행됩니다.

이 예제를 실행하려면 시스템에 Visual Studio 2013이 설치되어 있는지 확인하세요.

단계 1) 첫 번째 단계는 빈 ASP.Net 웹 애플리케이션을 만드는 것입니다. Visual Studio 2013에서 메뉴 옵션 파일->새 프로젝트를 클릭합니다.

SOAP 메시지 예

새 프로젝트 옵션을 클릭하면 Visual Studio에서 프로젝트 유형을 선택하고 프로젝트에 필요한 세부 정보를 입력할 수 있는 또 다른 대화 상자가 표시됩니다. 이는 다음 단계에서 설명합니다.

단계 2) 이 단계에서,

  1. 먼저 다음을 선택하세요. C# ASP.NET 웹 애플리케이션의 웹 템플릿입니다. SOAP 서비스 프로젝트를 만들려면 프로젝트가 이 유형이어야 합니다. 이 옵션을 선택하면 Visual Studio가 웹 기반 애플리케이션에 필요한 필수 파일을 추가하는 데 필요한 단계를 수행합니다.
  2. 우리의 경우 webservice.asmx로 주어진 프로젝트의 이름을 지정하십시오. 그런 다음 프로젝트 파일이 저장될 위치를 지정하십시오.

SOAP 메시지 예

완료되면 Visual Studio 2013의 솔루션 탐색기에 프로젝트 파일이 생성된 것을 볼 수 있습니다.

SOAP 메시지 예

단계 3) 이 단계에서,

프로젝트에 웹 서비스 파일을 추가하겠습니다.

  1. 먼저 아래와 같이 프로젝트 파일을 마우스 오른쪽 버튼으로 클릭하십시오.

SOAP 메시지 예

  1. 프로젝트 파일을 마우스 오른쪽 버튼으로 클릭하면 "추가->웹 서비스(ASMX)" 옵션을 선택하여 웹 서비스 파일을 추가할 수 있습니다. 웹 서비스 이름 파일에 Tutorial Service 이름을 제공하기만 하면 됩니다.

SOAP 메시지 예

단계 4) 다음 코드를 Tutorial Service asmx 파일에 추가하세요.

SOAP 메시지 예

코드 설명 :

  1. 이 코드 줄은 웹 서비스 파일의 이름을 제공합니다. 이는 클라이언트 애플리케이션이 웹 서비스 이름을 통해 웹 서비스를 호출할 수 있는 방법을 제공하므로 중요한 단계입니다.
  2. 일반적으로 클래스 파일은 웹 서비스의 기능을 캡슐화하는 데 사용됩니다. 따라서 클래스 파일에는 클라이언트 애플리케이션에 일부 기능을 제공하는 모든 웹 메소드에 대한 정의가 포함됩니다.
  3. 여기서 [WebMethod]는 기능을 설명하는 속성으로 알려져 있습니다. 후속 단계에서는 "Guru99WebService"라는 함수를 생성하지만 [WebMethod] 특성을 추가하는 이 단계를 포함하면 클라이언트 애플리케이션에서 이 메서드를 호출할 수 있습니다. 이 속성이 없으면 클라이언트 애플리케이션에서 메서드를 호출할 수 없습니다.
  4. 여기서는 호출 클라이언트 애플리케이션에 문자열을 반환하는 데 사용되는 'Guru99WebService'라는 함수를 정의합니다. 이 함수는 모든 클라이언트 애플리케이션에서 호출할 수 있는 웹 서비스입니다.
  5. 우리는 return 문을 사용하여 "This is a Guru99 Web service"라는 문자열을 클라이언트 애플리케이션에 반환합니다.

코드가 성공적으로 실행되면 브라우저에서 코드를 실행할 때 다음과 같은 출력이 표시됩니다.

출력:

SOAP 메시지 예

  • 출력에는 웹 서비스의 이름이 웹 서비스에 이름을 지정한 결과인 "Guru99 Web Service"라는 것이 명확하게 표시됩니다.
  • 또한 웹 서비스를 호출할 수 있음을 알 수 있습니다. Invoke 버튼을 클릭하면 웹 브라우저에 아래와 같은 응답이 표시됩니다.

SOAP 메시지 예

위의 출력은,

  • 웹 메소드를 호출하면 "This is a Guru99 Web service"라는 문자열이 반환된다는 것을 명확하게 보여줍니다.
  • Visual Studio에서는 위 웹 서비스가 호출될 때 생성되는 SOAP 메시지 요청 및 응답을 볼 수도 있습니다.

웹 서비스가 호출될 때 생성되는 SOAP 요청은 다음과 같습니다.

SOAP 메시지 예

코드 설명 :

  1. SOAP 메시지의 첫 번째 부분은 이전 장에서 논의된 봉투 요소입니다. 이는 모든 SOAP 메시지에 존재하는 캡슐화 요소입니다.
  2. SOAP 본문은 다음 요소로, SOAP 메시지의 실제 세부 정보를 담고 있습니다.
  3. 세 번째 부분은 'Guru99WebService'라는 서비스를 호출하도록 지정하는 요소입니다.

SOAP 메시지 예

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  
    <soap:Body>
      
        <Guru99WebServiceResponse xmlns="http://tempuri.org/">
          
            <Guru99WebServiceResult>string</Guru99WebServiceResult>
          
        </Guru99WebServiceResponse>
    </soap:Body>
</soap:Envelope>

코드 설명 :

  1. SOAP 메시지의 첫 번째 부분은 이전 장에서 논의된 봉투 요소입니다. 이는 모든 SOAP 메시지에 존재하는 캡슐화 요소입니다.
  2. SOAP 본문은 다음 요소로, SOAP 메시지의 실제 세부 정보를 담고 있습니다.
  3. 지금 보게 될 흥미로운 부분은 'string' 속성입니다. 이것은 클라이언트 애플리케이션에 호출되는 웹 서비스가 문자열 유형의 객체를 반환한다는 것을 알려줍니다. 이것은 클라이언트 애플리케이션이 그렇지 않으면 웹 서비스가 무엇을 반환하는지 알 수 없기 때문에 매우 유용합니다.

요약

  • SOAP는 서로 다른 기반으로 구축된 애플리케이션 간에 데이터를 교환하는 데 사용되는 프로토콜입니다. 프로그래밍 언어.
  • SOAP는 XML 사양을 기반으로 구축되었으며 HTTP 프로토콜과 함께 작동합니다. 이는 웹 애플리케이션 내에서 사용하기에 완벽합니다.
  • SOAP 빌딩 블록은 SOAP 메시지로 구성됩니다. 각 SOAP 메시지는 봉투 요소, 헤더 및 본문 요소로 구성됩니다.
  • 봉투 요소는 SOAP 메시지의 필수 요소이며 SOAP 메시지의 모든 데이터를 캡슐화하는 데 사용됩니다.
  • 헤더 요소는 인증 정보나 복잡한 데이터 유형의 정의와 같은 정보를 포함하는 데 사용될 수 있습니다.
  • body 요소는 필요한 경우 매개변수 정보와 함께 웹 메소드 정의를 포함하는 기본 요소입니다.