내용 목차
본 장에서는 웹 서비스에 대한 기본 개념과 표준에 대해서 설명한다.
웹 서비스는 애플리케이션들이 플랫폼과 프로그래밍 언어와는 독립된 방식으로 서로 통신할 수 있도록 하는 표준화된 기술이며, 표준 XML 메시징을 통해 네트워크로 접근될 수 있는 오퍼레이션들을 기술하는 소프트웨어 인터페이스이다. 또한 웹 서비스는 인터넷에만 연결되어 있다면 서비스에 대한 권한을 가지고 있는 사용자 누구에게라도 비즈니스를 공개하고 사용될 수 있도록 메시징 프로토콜, 프로그래밍 표준, 서비스 발견을 위한 편의 환경 등을 정의하고 있다.
웹 서비스는 인터넷의 URI로 접근 가능한 응용 프로그램이며, 웹 서비스의 인터페이스와 바인딩은 XML 문서로 정의되고 기술된다. 하나의 웹 서비스는 인터넷에 공개되어진 또 다른 웹 서비스와 상호 연동이 가능할 뿐 아니라 기존의 Back-end 응용 프로그램들과도 연동이 가능하다.
지금까지의 응용 프로그램 아키텍처는 2가지의 범주에 속해 있었다. 하나는 메인프레임을 기반으로 작동하는 단일화된 시스템이며, 다른 하나는 데스크탑에서 작동하는 클라이언트-서버(client-server) 기반의 시스템이었다. 이들 시스템은 물론 모두 잘 작동하지만 이러한 아키텍처 위에 동작하는 프로그램들은 그 시스템에서만 작동할 수 있게 맞추어진 프로그램들이라는 한계점을 가지고 있다. 이러한 아키텍처 내에서의 프로그램들은 아주 폐쇄적이어서 접근이 용이하지 않으므로 웹에 존재하는 무수히 많은 사용자들에게는 무용지물이다.
그래서 소프트웨어 산업은 서비스지향 아키텍처(SOA : Service-Oriented Architecture)라는 방향으로 진화하게 되었고, 이 기반위에서의 응용 프로그램들은 웹에서 동적으로 상호 작용을 할 수 있게 되었다. 응용 프로그램은 큰 규모로 이루어져 있던 소프트웨어 시스템을 더 작게 모듈화된 여러 서브 시스템으로 구성하게 만들었고, 이렇게 작게 모듈화된 서브 소프트웨어 시스템들은 각각 다양한 기술들로 구현할 수 있게 되었다. 또한 하나의 컴퓨터에 존재하지 않아도 되며, 재사용할 수 있게 되었다. XML과 HTTP와 같은 표준 웹 프로토콜을 사용하여 인터넷의 어떠한 사용자라도 쉽게 접근할 수 있게 되었다.
이러한 서비스 지향 기술은 이미 수년전부터 RMI, COM 그리고 CORBA와 같은 여러 다양한 형태의 기술들로 구현되어 왔으므로 최근에 발생한 완전한 새로운 형태의 것이라고 보기는 힘들다. 하지만 이렇게 언급한 기술들은 벤더나 구현된 기술에 종속적이라는 단점이 있다. 하지만 웹 서비스는 이러한 단점들을 극복한다.
다음은 웹 서비스의 주요 특징에 대한 설명이다.
웹을 통해 접근할 수 있다.
스스로 표방하고 서술한다.
웹 서비스는 스스로의 역할과 기능, 속성에 대해서 서술함에 따라서 웹 서비스 클라이언트가 서비스에 대해 이해할 수 있게 한다.
WSDL(Web Service Description Language)이라는 파일에 서비스를 서술하여 이를 공개함으로써 다른 응용 프로그램에서 서비스를 이용할 수 있게 한다.
HTTP와 같은 표준 인터넷 프로토콜에 의해 전달되는 XML 메시지를 통해 웹 서비스 클라이언트와 교신한다. 웹 서비스 클라이언트는 응용 프로그램일 수도 있고, 다른 웹 서비스일 수도 있다.
request-response 또는 one-way 방식으로 작동하며, 동기 또는 비동기 통신으로 호출된다. 이러한 작동 방식이나 통신 방식과는 무관하게 웹 서비스와 웹 서비스 클라이언트 간에 교환되는 근본적인 단위는 메시지이다.
웹 서비스는 다음과 같은 장점을 가지고 있다.
J2EE(Java 2 Platform, Enterprise Edition) 스펙은 버전 1.4에 이르러 웹 서비스의 중요성이 반영되어 트랜잭션 지원이나 DB 연결, 생성 주기(Lifecycle) 관리와 같은 서비스들이 응용 프로그램의 소스 코드 수정없이 지원받을 수 있게 되었다.
Java EE(Java Enterprise Edition, J2EE에서 명칭 변경) 버전 5에서 새로운 스펙들이 추가되었으며, 이와 함께 기존 스펙의 기능들을 정리 및 향상하여 보다 성숙된 웹 서비스를 제공할 수 있게 되었다.
현재 JEUS 웹 서비스는 다음과 같은 표준을 따르고 있다.
본 절에서는 이 중 몇 가지 주요 표준들에 대해 설명한다.
SOAP(Simple Object Access Protocol)은 분산 환경에서의 정보 교환을 목적으로 하는 경량의 XML 기반 프로토콜이다.
SOAP은 다음과 같은 정보 교환 방식을 지원한다.
SOAP 프로토콜은 다음과 같은 요소들로 구성된다.
SOAP 메시지를 서술하는 Envelope
Envelope는 누가 어떻게 메시지를 처리해야 하는지에 대한 정보를 가지고 있으며, 메시지의 Body를 감싸고 있다.
응용 프로그램에 사용되는 데이터 타입의 객체를 설명하는 인코딩 법칙(Encoding rule)
원격 프러시저 호출과 응답을 나타내는 데 필요한 준수 사항들
SOAP은 다음과 같은 특성을 갖는다.
프로토콜에 독립적이다.
구현 언어에 독립적이다.
플랫폼과 운영 시스템(Operating System)에 독립적이다.
SOAP XML 메시지에 MIME 타입과 같은 타입으로 추가적인 메시지를 붙여서 보낼 수 있다.
WSDL(Web Service Description Language)은 웹 서비스 기술 언어라고 하며, RPC 기반과 메시지 기반의 서비스를 서술하는 XML 형태를 의미한다. WSDL 파일은 개발 툴이나 서비스 개발자 또는 배치자(서비스 제공자)에 의해서 생성되며 인터넷에 공개되면 그때부터 서비스는 다른 클라이언트에 의해 알려지게 되어 이는 클라이언트로 하여금 서비스에 접근할 수 있는 환경을 구축할 수 있게 한다.
클라이언트 프로그래머(서비스 소비자)들은 공개된 WSDL을 이용하여 제공되는 웹 서비스에 대한 정보를 얻게 되고 그 정보를 바탕으로 웹 서비스에 접근할 수 있도록 프록시(proxy)나 템플릿(template) 등을 생성할 수 있다.
UDDI(Universal Description, Discovery and Integration) 표준은 웹 서비스 관련 정보의 공개와 탐색을 위한 표준이다. 서비스 제공자는 UDDI라는 서비스 소비자에게 이미 알려진 온라인 저장소에 그들이 제공하는 서비스들을 저장하게 되고, 서비스 소비자들은 그 저장소에 접근함으로써 원하는 서비스들의 목록을 찾을 수 있다.
JAX-WS(Java API for XML-based Web Services) 표준은 Sun Microsystems에서 제공하는 웹 서비스 API를 정의하는 표준이다. 이는 JAX-RPC 표준을 발전시킨 개념으로 XML의 바인딩을 위한 JAXB 표준과 표준 스트리밍 파서를 위한 StAX 표준, 기능이 향상된 새로운 SAAJ 표준을 기반으로 통합, 발전된 Java 진영의 노력의 산물이다. 이러한 API를 채택함으로 인해 J2EE 1.4 스펙에서 요구했던 많은 Descriptor 파일들을 모두 Java SE 5의 Annotation 기능으로 대체할 수 있게 되었다.
JAX-RPC(Java API for XML-based RPC) 표준은 Sun Microsystems에서 제공하는 웹 서비스 API를 정의하는 표준이다. 웹 서비스가 해결해야 하는 당면 과제 중 하나는 상호 호환성을 가지는 서비스의 개발이다. 이러한 문제를 해결하기 위해 WS-I, OASIS, W3C 그리고 SOAPBuilders 같은 다양한 표준 단체들이 수많은 노력을 경주해왔다.
JAX-RPC는 이러한 상호 호환성의 문제를 해결하고 웹 서비스 구현에 대한 유연한 프로그래밍 API를 제공하기 위한 J2EE 1.4 스펙의 Java 진영의 최초의 노력의 산물이다. 이러한 API를 채택함으로 인해 JAX-RPC는 서비스 사용자와 개발자들로 하여금 상호 호환성이라는 아주 큰 짐을 Runtime Framework으로 덜게 해 주었다. 이는 후에 JAX-WS라는 웹 서비스를 위한 Framework로 발전한다.
SOAP은 RPC 방식과 문서 방식의 정보 교환을 지원한다. SOAP 메시지는 RPC 방식이든 문서 방식이든 SOAP 메시지의 element에 정의되어 있는 EncodingStyle 속성에 의해 정의되는 인코딩 방식을 사용한다.
다음은 이러한 SOAP 메시지의 특성에 대한 설명이다.
SOAP 메시지의 구성 요소
SOAP 메시지는 SOAP Envelope를 가지며 Envelope는 Header와 Body라는 2개의 하위 요소가 있다. Header는 필수적으로 포함되어야 하는 것은 아니다. Header의 하위 요소들은 Header 블록이며 각각의 Header 블록은 데이터의 논리적인 묶음으로 볼 수 있다. SOAP Body는 SOAP 메시지의 필수 요소이며 SOAP 메시지의 궁극적으로 전달하고자 하는 내용들이 담겨 있는 곳이다.