본문 바로가기

참고자료

SOAP란 무엇일까? - 웹서비스와 SOAP

1. 웹서비스란?

SOAP의 이해 이전에 웹서비스에 대한 이해를 잠시 해보자. 웹 서비스는 SOAP,  WSDL, UDDI 등의 표준 기술을 이용해 네트워크에 연결된 컴퓨터간의 분산 컴퓨팅을 지원하는 소프트웨어 및 기술이다. 웹 + 서비스 라는 단어대로 웹을 통하여 서비스를 제공하거나 교환한다. 웹 역시도 인터넷의 응용기술이며 표준 방식으로 분산되어 있는 정보들을 공유하고 호환시키는 서비스이다. 


2. WSDL이란? 

WSDL은 비즈니스 서비스를 기술하여 비즈니스들끼리 전자적으로 서로 접근하는 방법을 제공하기 위해 사용되는 XML 기반의 언어이다. WSDL은 웹서비스 시스템에서 제공하는 기능들을 외부에서 이용할 수 있도록 사용법을 알려주는 인터페이스 언어이다. 서비스 제공장소, 서비스 메시지 포맷, 프로토콜 등이 기술되어 있다. 하지만 서비스를 호출 할 때 어떻게 보내야되고 어떤 형태로 응답받는지에 대한 내용은 없다. 

웹 서비스설계에서 프록시 패턴을 많이 사용하게 되는데, 여기서 사용한 프록시 패턴은 클라이언트의 비즈니스 로직과      통신관련 로직을 분리하고, 통신관련한 서비스 호출은 프록시에게 위임하는 형태이다. 이런 프록시는 jdk1.6 에서 제공하    는 wsiport나 maven plugun을 통해 프록시를 제공받을 수 있으며, 개발자가 직접 구현할 필요가 없다. 그리고 서비스에 변화가 된다해도 비즈니스 로직 쪽은 상관없이 프록시 쪽만 변경하면 된다. WSDL에 있는 설정정보를 이용하여 웹 서비스들은 프록시를 생성하며, 이 생성된 프록시로 원하는 서비스를 호출 할 수 있다. 

하지만 이런 프록시 패턴은 통신모듈이 캡슐화가 되어 있어서 개발자가 통신오류에 관한 예외처리를 해줘야한다. 


3. SOAP란?

Simple Object Access Protocol의 약자이다. 서로 다른 service간의 연동을 할때 상호 이해 가능한 형태의 메시지를 송수신함으로써 원격지에 있는 서비스 객체나 API를 사용하고 싶어서 탄생한 프로토콜이다. SOAP 이전에는 서로 다른 Service 간의 연동을 할 때 연결은 할 수 있었지만 호환성과 보안상의 문제가 있었다. 때문에 좀 더 범용적으로 사용할 표준화되고 안전한 방법이 필요했고 그래서 나온것이 SOAP다. 마이크로소프트에서 객체 접근 규약으로서 처음 디자인했지만 현재는 W3C에서 표준화 작업과 관리를 하고 있다. 종종 서비스 지향 아키텍쳐(Service Oriented Architecture) 와 의미가 혼용되기도 하지만 SOAP 와 SOA는 다른 개념이다.

SOAP는 HTTP,HTTPS,SMTP 등을 통해 XML 기반의 메세지를 컴퓨터 네트워크 상에서 교환하는 프로토콜이다. SOAP는 웹 서비스에서 기본적인 메시지를 전달하는 기반이 되는 프로토콜이다. 메세지를 교환하는 패턴이 몇가지 있지만 보통 클라이엍느에서 서버로 메세지 요청을 하고 서버에서는 이 요청에 대한 응답을 바로 해주는 형태이다. 
SOAP는 xml을 근간으로 <헤더>와 <바디>를 조합하는 디자인패턴으로 설계되어 있다. <헤더>는 반복적이거나 트랜잭션에 관련한 정보 및 보안에 대한 설정정보를 가지고 있다. <바디> 부분은 주요한 정보를 가지고 있다.

 

webService의 Data 변환과정

 

SOAP 는 표준포장구조라고도 불리는데, 그 이유는 메시지를 포장하는 포장지 역할을 하기 때문이다. 클라이언트와 서버간 전송하는 메커니즘을 통일한 것이다. SOAP로 보내고자 하는 메세지를 감싸서 주고받으면 .net 에서 EJB를 호출하는것도 가능해진다. 따라서 SOAP를 통해 다른 플랫폼의 통신을 편하게 만들어준다.

메시지는 XML 형식이어야 하기 때문에 SOAP로 감싸기 전 보낼 메세지를 XML로 변환하는 과정이 필요하다. 클라이언트에서 요청을 보낼 때는 요청을 위한 정보를 xml로 변환하고 SAOP로 포장해서 서버로 전달하면, 서버에서는 SOAP를 벗긴 후 내부의 xml을 다시 필요한 객체로 변환한다. 이렇게 XML을 객체로 혹은 객체를 XML로 변환해주는 것을 OXM( Object Xml Mapping) 이라고 한다.

여담으로 이런 OXM을 사용하고 SOAP 바인딩을 해주는것이 웹 서비스 프레임워크의 역할 중 하나이다.  이런 웹 서비스 프레임워크는 JAVA 기반의 JAV-WS와 .NET 기반의 WCF가 있다. 이미 프레임워크로 구현이 되어있기 때문에  개발자는 제공을 위한 서비스와 클라이언트 개발에만 집중하면 된다.


4.SOAP는 어디서 어떻게 쓰이나?

SOAP 통신은 xml 문서에 봉투라고 불리는 부대 정보가 포함된 메시지를 HTTP등의 프로토콜로 교환한다. 서비스를 이용하는 클라이언트와 서비스를 제공하는 서버 양방이 SOAP의 생성과 해석 엔진을 장착함으로써 서로 다른 환경에서 객체의 호출을 가능하게 한다. SOAP 통신은 보안적으로 좋다. 헤더에 사용자 인증정보를 담아 보내기 때문에 SOAP 바디에 존재하는 미들웨어 통신 프로토콜을 변경하지 않고도 보안적용이 가능하다. 이때 SOAP 사용할 수 있는 인증방법은 아이디 패스워드, 또는 공개키 기반 인증서이다. SOAP 1.0은 HTTP에 한하지만 SOAP1.1 에서는 HTTP, SMTP, FTP 중에 선택 가능하고, 기업간 이용에는 방화벽도 안전하게 통과할 수 있다. 때문에 기업과 미들웨어를 연결할때 많이 쓰인다고 한다.


5. 장점과 단점은?

장점

-  프록시와 방화벽에 구애받지 않는다

-  플랫폼과 프로그래밍 언어에 독립적이다.

- WSDL,UDDI 등 표준 통신규약이 있다.

 

단점

- 구조가 복잡해 성능이 떨어질 수 있다.

- REST 에 비해 상대적으로 무겁고 속도도 느리다.

 

 

 

참고

Red Hat - REST와 SOAP 비교

https://www.redhat.com/ko/topics/integration/whats-the-difference-between-soap-rest

SAOP와 REST의 차이점은 무엇인가요?

https://aws.amazon.com/ko/compare/the-difference-between-soap-rest/

웹 서비스 REST 와 SOAP /장단점 비교

https://july7k.tistory.com/166

해시넷-웹서비스

http://wiki.hash.kr/index.php/%EC%9B%B9%EC%84%9C%EB%B9%84%EC%8A%A4

호다닥 공부해보는 SOAP

https://gruuuuu.github.io/programming/soap/

'참고자료' 카테고리의 다른 글

nosql 이란?  (0) 2023.10.15
MIME 이란? Content-type 이란?  (0) 2023.09.26
인코딩은 무엇이며 BASE 64 인코딩이란 무엇일까?  (0) 2023.09.15
API와 SDK  (0) 2022.04.14
blocking 과 non blocking  (0) 2022.01.27