프로그래밍/웹, 네트워크

Restful에 대한 이해하기(xml, soap란?) - 2

Hwan2 2020. 1. 12. 21:49
반응형

이 글은 제가 C++ Restful 인 casablanca를 개발하는데 앞서 일반적인 Restful의 정의를 알아보고자 작성하는 글입니다.

조사 기간은 7일걸렸습니다.

 

 

목차는 다음과 같이 진행됩니다.

 

1. 웹의 역사(Restful의 탄생 배경을 알아보기 위해선 시작점을 이해해야 했습니다.)

보러가기 : hwan-shell.tistory.com/139?category=826872

2. xml과 json, soap의 통신 방식과 단점.

3. Restful 과 soap의 차이점.

보러가기 : hwan-shell.tistory.com/141?category=826872

4. Restful의 특징

보러가기 : hwan-shell.tistory.com/142

 

그럼 두번째 글 시작하겠습니다.

 

우선 HTTP통신 방식은 다음과 같이 진행됩니다.

 

클라이언트가 서버로부터 HTML 정보를 요청하면, HTTP프로토콜을 통해 클라이언트 요청이 서버로 전달되고,

전달받은 서버는 클라이언트에게 요청된 정보를 보내주죠.

 

정말 간단하죠??

 

그리고 Socket통신과의 차이점이 드러나는데, 바로 연결의 지속성입니다.

 

HTTP통신을 하게되면 클라이언트와 서버는 Request와 Response 때만 연결이 되고 그 후에는 연결을 끊어버리죠.

반면 Socket은 서버와 지속적으로 통신을 하면서 통신라인을 유지합니다.

(사실 더욱 밑단으로 내려가면 HTTP프로토콜이나 일반적으로 프로그래밍에서 사용하는 Socket은 같은놈입니다.

즉, tcp/ip기반 통신을 하고 있죠. 이건 다음에 따로 설명하겠습니다.)

 

때문에 웹서버는 다수의 사용자도 빠르게 처리할 수 있는 장점을 지니고 있게 됩니다.

 

 

 

 

그럼 클라이언트는 서버에게 어떤식으로 Request를 하는지 알아보겠습니다.

 

1991년 HTML 1.0이 탄생했을 때 클라이언트와 서버간의 데이터를 주고 받을 땐 SGML을 기반으로 받을 자료를 정의한 뒤 

주고받았습니다.

 

하지만 이러한 통신방식은 느리고 무거웠습니다. SGML자체에 정의되는 것들이 많았고 문법도 어려웠기 때문입니다.

 

 

그래서 1996년 XML이 제안, 1998년 2월 10일 XML 1.0 버전이 W3C에 의해 권고되어 사용됐습니다.

XML은 SGML에서 파생된 것으로 SGML의 장점만 가지고 나왔으며, HTML의 정보를 디테일하게 표현하여 전송이 가능했습니다.

 

 

출처 : https://ko.wikipedia.org/wiki/XML

 

 

HTML의 경우엔 <head>, <body> 중심으로 표현된다면 XML은 사용자가 테그를 직접 설정할 수 있습니다.

따라서 데이터의 구분이 생기는 것이죠.(예를들어 새의 크기는 3m입니다. 라고 한다면 <birdsize>새의크기, <birdvalue>3 이런식으로 말이죠)

그래서 인터넷으로 연결된 시스템끼리 쉽게 식별 가능한 데이터를 주고받을 수 있게 됩니다.

 

 

 

 

그럼 이제 SOAP에 대해 알아보도록 하겠습니다.

 

SOAP는 XML을 전송하는 방식으로 MS의 후원을 받아 만들어 졌습니다.

 

SOAP는 (Simple Object Access Protocol)로 

HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 메시지를 교환하기 위한 통신규약 프로토콜입니다.
restful이 등장하기 전에 기업에서 많이 사용되었다고 합니다.(주식, 날씨, 여권발급, 공인인증 등...)(정확히는 restful과 비교대상으로 적절하다.... 입니다.)
SOAP는 떨어져 있는 서버에게 함수호출이나 객체반환을 통해 원하는 값을 반환 받는 RPC방식입니다.RPC(Remote Procedure Call)란 다른 네트워크에 있는 컴퓨터에게 서비스를 요청하는 프로토콜입니다.
SOAP의 통신구조는 다음과 같습니다.

 

 

서버는 WSDL을 UDDI라는 저장소(Service Registry)에 저장합니다.

 

WSDL은 다음과 같이 정의되어 있습니다.

 

 

출처 : http://egloos.zum.com/tequiero35/v/941680

 

 

시작과 끝을 <wsdl:definitions> </wsdl:definitions>으로 테그선언이 되며 그 안에 내용이 있습니다.

그리고 이것 또한 XML형태로 만들어져 있습니다.

 

서버쪽(Service Provider)은 이러한 정보를 작성해 UDDI로 올리게 됩니다.

(서버 : 나는 이런 정보를 제공할 것이며 이러한 정보를 받으려면 여기 양식에 맞춰 작성해라~)

 

 

 

사용자는(Service Consumer) UDDI에 접근해 자신이 원하는 서비스를 누가 제공하는지 WSDL을 찾습니다. 

 

 

 

사용자는 원하는 WSDL을 다운받은 후 양식에 맞게 SOAP를 작성하게 됩니다.

SOAP또한 XML을 사용하여 인코딩 되게 되며 다음과 같이 만들어집니다.

 

 

 

이렇게 되있으며 Envelope안에는 GET or POST를 넣어 자료를 어떤식으로 처리할지 보내게 됩니다.

 

그럼 서버는(Service Provider) 클라이언트에서 받은 자료를 바탕으로 서비스를 제공하게 됩니다.

 

 

 

이런 SOAP의 장점은 다음과 같습니다.

1. 프록시와 방화벽에 제약이 없다. (기존 HTTP방식을 사용함으로)

2. 플랫폼과 프로그래밍에 독립적이다. (WSDL이라는 양식을 토대로 작성해서 보내줌으로)

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

4. 분산 환경에 적합하다.

5. 기존의 컴포넌트보다 이기종간 상호운용성이 높음

6. stateful방식이다.(서버는 세션을 저장하여 클라이언트와 통신하게 됩니다.)

 

 

단점은 다음과 같습니다.

1. 너무 복잡하다.

2. 해당 문법을 작성하기 위해선 Tool이 필요하다.

3. 무겁고 느리다.

4. 작성하는것 또한 어렵다.

 

 

통신방식이 SOAP만 있는것은 절대 아닙니다.(DCOM, CORBA 등....)

 

 

이런 복잡하고 무거운 통신방식을 깨고자 나온것이 Restful입니다.

 

다음은 Restful에대해 알아보도록 하겠습니다.

 

 

3편 보러가기(클릭!!)

 

 

 

※잘못된 정보가 있거나 보충이 필요한 부분이 있다면 피드백을 주시면 감사하겠습니다.

 

 

반응형