본문 바로가기
C#

[SOAP,C#] SOAP 통신 하는법

by 아마도개발자 2023. 11. 3.

아마도 정보처리기사 공부할때나 들어봤지, 실제 개발하면서 내가 사용하게 될 날이 올줄은 몰랐단 단어다.

프로젝트의 필요 데이터를 가져오기 위해 PLM관리 부서에 특정 데이터를 받아 올 수 있는 API를 요청했고, 몇 시간 뒤 한 줄의 메시지를 받았다.

 

김OO : http://XX.YYY.ZZ.LL:1111/XXX/XXX-services/AA_BB_CC 사용하세요~

 

메세지를 받자마자 든 생각은 '뭔데 이게..' 였다. 당연히 REST API를 생각했었는데 메쏘드나 파라미터 등에 대한 정보도 안알려주고 달랑 URL만 보내준다는게 이해가 안갔으나 조심스럽게 브라우저에서 접속을 시도해 보았다.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <soap:Fault>
      <faultcode>soap:Server</faultcode>
      	<faultstring>No such operation: (HTTP GET PATH_INFO: `URL`)		  
      </faultstring>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

 

생소한 값 속에 soap, xml이란 글자가 들어왔다. 다행히 정처기를 공부하며 soap가 xml기반의 메시지 프로토콜이란 것은 알고 있었기 때문에 이게 SOAP서버에서 만들어진 API구나 라고 생각할 수 있었다.

 

어찌됐든 난 데이터를 받아와야 했기 때문에 SOAP의 정의와 활용에 대해 조금 알아 보았다.

 

SOAP(Simple Object Access Protocol)는 일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜이다. 

 

장점

  • SOAP을 사용한 HTTP는 기존 원격 기술들에 비해서 프록시와 방화벽에 구애받지 않고 쉽게 통신 가능하다.
  • SOAP은 융통성있게도 각각 다른 트랜스포트 프로토콜들의 사용을 허용하고 있다. 표준 스택에서는 트랜스 포트 프로토콜로 HTTP를 사용하지만, 다른 프로토콜 역시 사용가능 하다.
  • SOAP은 플랫폼 독립적이다.
  • SOAP은 프로그래밍 언어에 독립적이다.
  • SOAP은 확장가능하다.

 

대략적인 개요는 이러한데, 장점 중 하나인 "프록시와 방화벽에 구애받지 않는다" 이 부분 때문에 우리 회사에서 SOAP를 사용하고 있다고 확신했다.. 여러 외주업체들이 우리 회사의 프록시에 고통받고 떠났고, 나 또한 그랬기 때문에..

 

자 그럼 SOAP서버에서 데이터를 가져와 보자.

예제를 위해 SOAP서버와 콘솔 클라이언트를 생성하였다.

 

우선 SOAP 서버를 가동시켜 아래 페이지를 확인한다.

 

SOAP 서버 서비스 설명 페이지

 

이후 콘솔 프로젝트(클라이언트) 에서 SOAP 서비스를 연결한다

 

이후, WCF Web Service를 선택하여 내 SOAP서버 URL을 입력한 뒤, 이동 버튼을 클릭하고 네임스페이스를 지정해준다.

(서비스 명을 선택하면 API목록을 확인할 수 있다)

 

 

 

다음을 계속 누르다보면

 

 

'서비스 참조를 추가했습니다'라는 문구가 보이면 정상적으로 서버가 연결된 것이다. 또한, 우측에 SoapApi가 생긴것이 보인다.

 

 

위와 같이 SOAP서버의 api를 호출하는 코드를 작성하여 데이터 확인이 가능하다.

끝!

 

 

soap를 사용하면서 느낀것은 생각보다는 만드는 과정 자체가 어렵지 않다는 것이다.(기본적인 함수 호출만 해서 그런지 몰라도) 하지만 일반적인 환경에서 REST방식과 비교했을 때, 개인적으로 비교 불가로 REST를 사용하는 것이 바람직하다고 느꼈다. 

 

SOAP서버를 사용해보는 과정이 재밌긴 했지만 앞으로 내가 굳이 SOAP서버를 만들어서 사용할 일은 없을 것 같긴하다.. 아마도