제1장 웹 서비스

내용 목차

1.1. 기본 개념
1.2. 웹 서비스 표준
1.2.1. WSDL 표준
1.2.2. UDDI 표준
1.2.3. JAX-WS, JAXB, StAX 표준
1.2.4. JAX-RPC 표준
1.2.5. SAAJ 표준
1.3. SOAP 메시지 교환과 SOAP 메시지 인코딩

본 장에서는 웹 서비스에 대한 기본 개념과 표준에 대해서 설명한다.

1.1. 기본 개념

웹 서비스는 애플리케이션들이 플랫폼과 프로그래밍 언어와는 독립된 방식으로 서로 통신할 수 있도록 하는 표준화된 기술이며, 표준 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 방식으로 작동하며, 동기 또는 비동기 통신으로 호출된다. 이러한 작동 방식이나 통신 방식과는 무관하게 웹 서비스와 웹 서비스 클라이언트 간에 교환되는 근본적인 단위는 메시지이다.

웹 서비스는 다음과 같은 장점을 가지고 있다.

  • 인터넷 공개 표준을 지원한다.

    웹 서비스는 SOAP(Simple Object Access Protocol), WSDL, UDDI(Universal Description, Discovery and Integration)와 같은 공개 표준을 정하여 이를 근간으로 하여 상호 작용이 이루어지므로 웹 서비스를 지원하는 응용 프로그램들은 상호 작동에 문제가 없다.

  • 플랫폼과 언어에 독립적이다.

  • HTTP와 같은 웹 프로토콜을 사용하므로 방화벽과 같은 장애에도 문제가 없어 응용 프로그램에 대한 접근이 용이하다.

1.2. 웹 서비스 표준

J2EE(Java 2 Platform, Enterprise Edition) 스펙은 버전 1.4에 이르러 웹 서비스의 중요성이 반영되어 트랜잭션 지원이나 DB 연결, 생성 주기(Lifecycle) 관리와 같은 서비스들이 응용 프로그램의 소스 코드 수정없이 지원받을 수 있게 되었다.

Java EE(Java Enterprise Edition, J2EE에서 명칭 변경) 버전 5에서 새로운 스펙들이 추가되었으며, 이와 함께 기존 스펙의 기능들을 정리 및 향상하여 보다 성숙된 웹 서비스를 제공할 수 있게 되었다.

현재 JEUS 웹 서비스는 다음과 같은 표준을 따르고 있다.

  • EWS(Implementing Enterprise Web Services) 표준

  • JAX-WS(Java API for XML-based Web Services) 표준

  • JAX-RPC(Java API for XML-based RPC) 표준

  • JAXB(Java Architecture for XML Binding) 표준

  • SAAJ(SOAP with Attachments API for Java) 표준

  • Streaming API for XML 표준

  • Web Service Metadata for the Java Platform 표준

  • XML, XML Namespace, XML Infoset, XML Schema 표준

  • SOAP, MTOM, WS-Addressing 표준

  • WS-Reliable Messaging, WS-Coordination, WS-AtomicTransaction 표준

  • WSDL, WS-Policy, WS-MetadataExchange 표준

  • WS-Security Policy, WS-Security, WS-Trust, WS-SecureConversation 표준

  • UDDI(Universal Description, Discovery and Integration) 표준

본 절에서는 이 중 몇 가지 주요 표준들에 대해 설명한다.

1.2.1. WSDL 표준

WSDL(Web Service Description Language)은 웹 서비스 기술 언어라고 하며, RPC 기반과 메시지 기반의 서비스를 서술하는 XML 형태를 의미한다. WSDL 파일은 개발 툴이나 서비스 개발자 또는 배치자(서비스 제공자)에 의해서 생성되며 인터넷에 공개되면 그때부터 서비스는 다른 클라이언트에 의해 알려지게 되어 이는 클라이언트로 하여금 서비스에 접근할 수 있는 환경을 구축할 수 있게 한다.

클라이언트 프로그래머(서비스 소비자)들은 공개된 WSDL을 이용하여 제공되는 웹 서비스에 대한 정보를 얻게 되고 그 정보를 바탕으로 웹 서비스에 접근할 수 있도록 프록시(proxy)나 템플릿(template) 등을 생성할 수 있다.

1.2.2. UDDI 표준

UDDI(Universal Description, Discovery and Integration) 표준은 웹 서비스 관련 정보의 공개와 탐색을 위한 표준이다. 서비스 제공자는 UDDI라는 서비스 소비자에게 이미 알려진 온라인 저장소에 그들이 제공하는 서비스들을 저장하게 되고, 서비스 소비자들은 그 저장소에 접근함으로써 원하는 서비스들의 목록을 찾을 수 있다.

1.2.3. JAX-WS, JAXB, StAX 표준

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 기능으로 대체할 수 있게 되었다.

1.2.4. JAX-RPC 표준

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로 발전한다.

1.2.5. SAAJ 표준

SAAJ(SOAP with Attachments API for Java) 표준은 SOAP 프로토콜으로의 직접 접근 가능한 프로그래밍 인터페이스를 제공한다. low level 프로토콜 처리에 익숙하다면 SOAP 메시지를 큰 어려움 없이 작성할 수 있다.

1.3. SOAP 메시지 교환과 SOAP 메시지 인코딩

SOAP은 RPC 방식과 문서 방식의 정보 교환을 지원한다. SOAP 메시지는 RPC 방식이든 문서 방식이든 SOAP 메시지의 element에 정의되어 있는 EncodingStyle 속성에 의해 정의되는 인코딩 방식을 사용한다.

다음은 이러한 SOAP 메시지의 특성에 대한 설명이다.

  • SOAP 메시지의 구성 요소

    SOAP 메시지는 SOAP Envelope를 가지며 Envelope는 헤더와 바디라는 2개의 하위 요소가 있다. 헤더는 필수적으로 포함되어야 하는 것은 아니다. 헤더의 하위 요소들은 헤더 블록이며 각각의 헤더 블록은 데이터의 논리적인 묶음으로 볼 수 있다. SOAP 바디는 SOAP 메시지의 필수 요소이며 SOAP 메시지의 궁극적으로 전달하고자 하는 내용들이 담겨 있는 곳이다.

  • SOAP 메시지의 인코딩

    SOAP은 RPC 방식과 문서(Document) 방식의 정보 교환을 지원한다.

    • RPC 방식

      RPC 방식은 원격 프러시저 호출(RPC) 방식의 메시지 교환 방식을 가리키며, 클라이언트와 서버가 잘 정의된 프로그래밍 모델로 생성되어야 하며, 클라이언트는 인자를 가지는 메소드를 호출하고 서버는 응답으로 하나의 값을 반환한다. RPC 방식의 메시지 교환 방식에서는 SOAP은 메시지 바디의 형태를 별도로 정의한다.

    • 문서(Document) 방식

      문서 방식에서는 XML 문서가 교환되고 각각의 element의 의미는 서버와 클라이언트가 해석의 몫으로 남겨둔다. 즉, SOAP 메시지의 바디의 구조에 대한 제약 사항은 SOAP에서 규정하고 있지 않으며, 응용 프로그램이나 또는 별도로 정해진 XML 스키마에 의해 SOAP 바디에 위치한 XML 문서의 구조가 결정된다.