티스토리 뷰
728x90
반응형
Web Service 정리를 한다 한다 오래전부터 준비했는데...결국 미완성으로 멈쳐있은지 ... 어언 몇 개월이 지났네요..
그래서 일단 올리고 차근차근 시간 있을때 추가 해야겠네요. ㅋㅋㅋ
What is Web Service
TCP/IP Socket을 사용하던 시절에는 이기종간에 데이터를 주고 받기 위해서는 Client/Server를 모두 구현하여야 했다. 물론 표준도 없어서 만드는 회사마다 다 다르게 만들었다. 그러던 중 Web의 시대가 도래하였다. 그리고 이제 Web Server를 모두가 사용하는 상황이 되었고 개발자들은 이 Server를 이용해서 이기종간의 데이터를 주고 싶어 졌다.
XML Namespaces - The xmlns Attribute
"Universal Description, Discovery and Integration (UDDI, pronounced Yu-diː)"
"A Web service is a method of communication between two electronic devices over the web (internet)."
웹 서비스(web service)는 네트워크 상에서 서로 다른 종류의 컴퓨터들 간에 상호작용을 하기 위한 소프트웨어 시스템이다. 웹 서비스는 서비스 지향적 분산 컴퓨팅 기술의 일종이다. 웹 서비스 프로토콜 스택은 SOAP, WSDL, UDDI 등으로 이루어진다. 모든 메시징에 XML이 사용되어 상호운용성이 높다.
기존의 분산 컴퓨팅 기술들인 CORBA, DCOM, RMI과 비교했을 때 주된 차이점은 다음과 같다.
웹 서비스라는 명칭을 가지고 있지만 월드 와이드 웹과 혼동하여서는 안 된다. 월드 와이드 웹은 사람과 컴퓨터 간의 상호작용을 위한 시스템인 데 반해, 웹 서비스는 컴퓨터와 컴퓨터 간의 상호작용을 위한 시스템이다.
기존의 분산 컴퓨팅 기술들인 CORBA, DCOM, RMI과 비교했을 때 주된 차이점은 다음과 같다.
느슨한 연결(loose coupling) 이진 부호화(바이너리 인코딩)가 아닌 XML 유니코드 부호화를 사용한다. 객체 지향(object-oriented)이 아닌 메시지 지향(message-oriented)이다. |
History of Web Service
TCP/IP Socket을 사용하던 시절에는 이기종간에 데이터를 주고 받기 위해서는 Client/Server를 모두 구현하여야 했다. 물론 표준도 없어서 만드는 회사마다 다 다르게 만들었다. 그러던 중 Web의 시대가 도래하였다. 그리고 이제 Web Server를 모두가 사용하는 상황이 되었고 개발자들은 이 Server를 이용해서 이기종간의 데이터를 주고 싶어 졌다.
왜? 굳이 Server단을 만드는 수고를 덜수 있기 때문이다. 물론 이를 위해서 MS와 IBM이 Standard를 만들어야 했고 새로운 프로토콜인 SOAP Protocol을 정의해야만 했다. 이것이 우리가 사용하는 Web Service의 시초라 알고 있으나 100% 확실하진 않다. 그러나 확실한건 Web Service란 이기종간의 데이터를 주고 받기 위해 태어났고 그 근간이 되는 것은 HTTP 프로토콜 위에 정의된 SOAP 프로토콜이라는 것이다. 그리고 사용하는 메세지는 XML Based 이다.
UDDI와 WSDL은 Web Service를 지원하기 위해 같이 태어난 기술이지만 UDDI은 거의 사양길로 접어 드는 듯하다. 이미 MS는 UDDI를 벗어나 자신들만의 Microsoft BizTalk Server를 쓰기로 천명했다.
Web Service의 3가지 컴포넌트
- UDDI
- WSDL
- SOAP
XML
XML의 Attribute와 Element
Attribute | Element |
반드시 Quote로 감싸있어야 한다. | <>으로 감싸있는 것들. |
XML Example for Attribute and Element.
Attribute Element Good Way |
Prefix
여러개의 같은 이름의 element를 쓸 경우 xml parser가 이를 구분할수 없다. 따라서 Prefix를 사용함으로써 구분을 지어준다.
2개이상의 table을 사용하려 할때를 예로 들어보면, 아래와 같이 h와 f의 prefix를 이용하여 구분짓는다.
(Note) XML 안에서 prefix를 사용하려면 반드시 namespace를 정의해야한다.
<h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> |
XML Namespaces - The xmlns Attribute
XML Namespaces is defined by the xmlns attribute in the atsrt tag of an element.(syntax. xmlns:prefix="URI") Note: The namespace URI is not used by the parser to look up information. The purpose is to give the namespace a unique name. However, often companies use the namespace as a pointer to a web page containing namespace information. Default Namespaces Real Use |
UDDI
"Universal Description, Discovery and Integration (UDDI, pronounced Yu-diː)"
웹 서비스 관련 정보의 공개와 탐색을 위한 표준이다.
서비스 제공자는 UDDI라는 서비스 소비자에게 이미 알려진 온라인 저장소에 그들이 제공하는 서비스 목록들을 저장하게 되고, 서비스 소비자들은 그 저장소에 접근함으로써 원하는 서비스들의 목록을 찾을 수 있게 된다.
간단히 UDDI가 무엇이냐 물어본다면?
- Web Service들이 등록되어 있는 어떤 Directory 서버이다.. 라고 말하면 되지 않을까?
어떤 기업이 자신이 제공하는 서비스를 외부로 노출하고(Web service 제공) 싶을때 UDDI registry에 등록하면 개발자들이 쉽게 찾을 수 있다.
이정도면 되겠다.. 왜? 이제 내부적으로 쓰거나 거의 쓰지 않으니까!!! 왜?왜? Rest라는 더 편한 방법이 나와서!!!
WSDL
"The Web Services Description Language (WSDL, pronounced 'wiz-dul') is an XML-based language that is used for describing the functionality offered by a Web service."
WSDL(Web Services Description Language의 약자)은 웹 서비스 기술언어 또는 기술된 정의 파일의 총칭으로 XML로 기술된다. 웹 서비스의 구체적 내용이 기술되어 있어 서비스 제공 장소, 서비스 메시지 포맷, 프로토콜 등이 기술된다.
클라이언트는 SOAP을 이용하여 WSDL 안에 정의 되어 있는 특정 Operation을 콜할 수 있다. 다시 말해서, WSDL만 알면 상대방이 어떤 Operation을 어떤 방식으로 호출하면 되는지 또 그 호출의 리턴값의 type 무엇인지 조차도 다 알 수 있으므로, 개발자는 개발을 하는데 있어서 WSDL있으면 되는 것이다.
현재 WSDL의 버젼이 두개가 존재하고 그 구성이 미세하게 다르다. 최신버젼은 2.0이다.
Default Structure of WSDL
<definitions> <types> definition of types........</types> <message> definition of a message....</message> <portType> <operation> definition of a operation....... </operation> </portType> <binding> definition of a binding....</binding> <service> definition of a service....</service> </definitions> | ||||||||
Example <definitions name="HelloService" targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <types> | ||||||||
Analysis of the Example
|
Reference
Tutorial - http://www.tutorialspoint.com/wsdl/index.htm
SOAP
SOAP는 Simple Object Access Protocol 입니다.
SOAP는 분배, 분산, 웹기반 환경에서 자바 객체와 COM(M$사의 그녀석)이 서로 대화할 수 있도록 합니다. 더 개괄적으로 말하면, 어떤 플랫폼, 어떤 언어의 객체들 또는 코드라도 서로 교통할 수 있도록 합니다. 현재, 20개 이상의 플랫폼, 60개 이상의 언어로 구현되어 있습니다.
SOAP 은 다양한 메세징 시스템에서 사용 가능하고 또 다양한 Transport protocols을 통해 전달 되어질수도 있다. 하지만 SOAP은 우선적으로 HTTP를 통한 RPC에 포커스하고 있다.
SOAP의 특징
이러한 SOAP의 특징을 살펴보면!! HTTP를 이용하기 때문에 다른 RPC에 비해 Proxy와 방화벽에 제약을 받지 않고 쉽게 통신이 가능하다는 점을 들 수있습니다. 물론 HTTP 뿐만 아니라 다른 전송 프로토콜도 이용할 수 있습니다! 또한 위에서 언급했듯이 플랫폼에 독립적이며, 프로그래밍 언어에도 독립적입니다.
SOAP Message Structure <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2001/12/soap-encoding" SOAP-ENV:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <SOAP-ENV:Header> ... ... </SOAP-ENV:Header> <SOAP-ENV:Body> ... ... <SOAP-ENV:Fault> ... ... </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP_ENV:Envelope> SOAP Schema - http://www.w3.org/2001/12/soap-envelope | |||||
SOAP Message Ordinary XML document Envelope: ( Mandatory ) Defines the start and the end of the message. (시작과 끝은 언제나 Envelope이다.) Header: ( Optional ) Contains any optional attributes of the message used in processing the message, either at an intermediary point or at the ultimate end point. (Actor attribute 와 MustUnderstand attribute가 있음. Actor attribute : 클라이언트가 그 SOAP Header에 받을 사람을 명시해주는 것.
Contains the XML data comprising the message being sent. (실제적으로 메세지를 콜할 주소와 파라미터를 정의한다.)
Fault: ( Optional ) An optional Fault element that provides information about errors that occurred while processing the message (에러가 발생했을 때 그 에러 코드및 String을 컨트럴 하고 싶을 때 사용한다.)
SOAP의 버젼이 1.1, 1.2가 존재한다. 1.1에서는 1.2의 envelop namespace가 속해진 메세지를 받으면 그냥 Fault Generate함. 1.2에서는 1.2의 envelop namespace가 아닌 메세지를 받으면 VersionMismatch fault를 Generate함. |
SOAP Encoding
Encoding Style
The encoding style for a SOAP message is set via the SOAP-ENV:encodingStyle attribute. To use SOAP 1.1 encoding, use the value http://schemas.xmlsoap.org/soap/encoding/ To use SOAP 1.2 encoding, use the value http://www.w3.org/2001/12/soap-encoding |
SOAP Data Type
크게 Scalar type 과 Compound type이 있다.
Scalar type | Compound type |
오직 하나의 value을 가지고 있다. | 여러개의 value들을 포함하고 있다. Arrary 와 structs 두가지로 더 구분지어진다. |
SOAP HTTP Binding
HTTP + XML = SOAP A SOAP request could be an HTTP POST or an HTTP GET request. The HTTP POST request specifies at least two HTTP headers: Content-Type and Content-Length. Content-Type: MIME Types; charset = character-encoding(optional)
Content-Length: bytes
|
Sample
Reference
Version Description- http://www.w3.org/TR/soap/
SOAP-Programming - http://oreilly.com/catalog/progwebsoap/chapter/ch03.html
JAX-RPC
JAX-RPC는 Java API for XML-Based RPC(Remote procedure call) 입니다.
JAX-RPC는 자바SE 1.4 이하 또는 rpc/인코딩된 스타일을 사용해야만 할 때 SOAP 1.1 스펙 기반의 웹서비스와 웹어플리케이션을 만들수 있게 합니다. 가능하면 JAX-RPC 대신에 근래의 산업 표준에 기반한 JAX-WS를 사용해야 합니다.
JAX-WS
JAX-WS는 Java API for XML-Based Web Services 입니다.
JAX-WS는 SOAP 기반이고 REST적인 자바 웹서비스를 개발하기위한 기초 기술입니다. JAX-WS는 웹서비스와 웹어플리케이션에서 JAX-RPC를 대신하도록 디자인되었습니다.
JAX-WS는 SOAP 기반이고 REST적인 자바 웹서비스를 개발하기위한 기초 기술입니다. JAX-WS는 웹서비스와 웹어플리케이션에서 JAX-RPC를 대신하도록 디자인되었습니다.
Reference
Web2.0 ( Web API )
Web2.0이라 불리는 Web API안의 Web Service는 서비스 기반의 SOAP에서 통신 기반의 Rest로 경향이 변화하고 있다.
Web 기반으로 통신을 하는 거라 HTTP 프로토콜을 이용하고 보통 XML 또는 JSON 형식의 Response를 받는다.
Rest services
Axis2
JAXB
JAXB는 Java Architecture for XML Binding 입니다.
JAXB는 XML컨텐츠의 스키마를 자바표현으로 바꾼 자바 객체들을 사용해서 XML컨텐츠를 편리하게 처리할 수 있는 방법을 제공합니다.
SAAJ
SAAJ는 SOAP with Attachments API for Java 입니다.
SAAJ는 JAX-RPC를 사용하는 것을 대신해 직접 SOAP 메시징 어플리케이션을 만드는데 사용할 수 있습니다. SAAJ로 SOAP기반의 XML메시지를 읽고 쓸 수 있습니다. 선택적으로 그런 형태의 메시지들을 인터넷으로 주고 받을 수 있습니다.
JSR
JSR은 Java Specification Request 입니다.
JSR은 새로운 스펙의 개발 또는 존재하는 스펙의 중요한 교정을 목적으로 하는 하나 또는 그 이상의 멤버에 의해 PMO(Program Management Office)에 제출된 문서 입니다.
뒤에 나오는 숫자는 그 문서의 번호라고 보시면 됩니다. JCP(Java Community Process)라는 자바 개발자 사이트가 있는데 여기에서 위와 같은 일의 진행상태를 확인하거나 개발중인 기술을 다운받거나 또는 개발에 참여할 수 있습니다.
Reference
WebService 아키텍쳐에 대해서 http://blog.naver.com/chidong2?Redirect=Log&logNo=60019342751
반응형
댓글
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 온타리오
- git proGit
- BC주
- 캐나다부동산
- 벌링턴
- TORONTO
- 부동산분석
- 토론토정착서비스
- 미시사가
- 부모님초청이민
- basement
- RHCE
- BTBS
- redhat
- 밀튼
- Jay
- 옥빌
- 우드워킹
- 캐나다
- RHEL
- certification
- 인터넷
- 토론토
- Canada
- ansible
- docker
- Red Hat
- cert
- Certificate
- 정착서비스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함