13.2 JAX-WS 웹 서비스
JAX-WS(Java API for XML Web Services)는 Java EE 플랫폼에 포함된 API를 사용하여 웹 서비스를 만드는 기술이다. 웹 서비스는 주로 XML 및 구조화된 텍스트 형식으로 정보 교환 등 네트워크에서 통신할 수 있는 표준이다. 웹 서비스는 플랫폼 독립적이다. JAX-WS 애플리케이션은 클라이언트/서버 모델을 사용한다. 서버 컴포넌트를 웹 서비스 엔드 포인트라고 한다.
웹 서비스의 기능을 구현하기 위해 Java EE에서는 JSR-220 JAX-WS라는 표준API를 제공한다.
JAX-WS는 Java SE 5에서 도입된 어노테이션을 사용하여 웹 서비스 서버 모듈과 클라이언트 개발이 쉽다. JAX-WS는 JAX-RPC 표준을 발전시킨 것으로 XML의 바인딩을 위한 JAXB 표준과 표준 스트리밍 파싱 API인 StAX 표준, 기능이 향상된 새로운 SAAJ(SOAP with Attachments API for Java) 표준을 기반으로 통합한 API이다.
JAX-WS는 XML 기반 통신에 SOAP과 REST를 사용한 웹 서비스를 처리하기 위한 API이다.
이전에는 JAX-RPC(Java API for XML Based RPC)라고 불리며, Java 프로그램에서 RPC원격 프로그램 호출을 위한 API 표준이 있었다. JAX-WS 버전은 2.0이며, JAX-RPC 1.1의 후속 표준이기 때문에 JAX-WS 버전 1.0은 없다.

그림 4. JAX-WS 개념도
JAX-WS에서 주고받는 메시지는 Java 객체에서 자동으로 생성된다. XML을 기반으로 하고 있기 때문에 다른 플랫폼과 연계하여 사용할 수 있다.
JAX-WS는 WS-Notification, WS-Addressing, WS-Policy, WS-Security, WS-Trust 등의 웹 서비스 프로토콜들을 지원하고 있다. 이런 프로토콜들은 메시지 구조 및 메시지 형식을 정의하는 XML기반 SOAP메시지를 사용하여 통신한다.
웹 서비스 엔드 포인트는 웹 서비스 인터페이스와 웹 메서 드 인터페이스를 구현하는 클래스로 구성된다.
웹 서비스 클라이언트는 WSDL 정의를 사용하여 생성한 스텁이라는 클래스를 사용하여 작성한다.
JBoss EAP 6에는 JAX-WS 웹 서비스 앤드 포인트의 배포를 지원하는 기능이 포함되어 있다. 이런 기능은 JBossWS에 의해 제공된다. 엔드 포인트 등을 설정하려면 웹 서비스 서브시스템을 사용한다.
JAXB
Java 및 XML 데이터의 맵핑은 ‘JAXB(Java Architecture for XML Binding)’가 이용된다. JAXB는 Java 오브젝트를 XML로 변환하는 표준이며, 반대로 XML에서 Java 객체로 변환도 가능하다.
JAXB를 사용하면 특별히 신경 쓰지 않고도 Java 객체와 XML간의 상호 맵핑이 가능하다. 따라서 웹 서비스를 구축할 경우, 사용자는 프로토콜을 전혀 의식하지 않고 메시지를 주고받을 수 있어 개발 부담이 많이 줄어든다.
Stub와 Tie
JAX-WS를 사용할 때 사용자의 Java 프로그램과 공급자 Java 프로그램의 통신을 위한 프로그램을 직접 코딩할 필요가 없다. 사용자 Java 프로그램의 Stub과 공급자 프로그램의 Tie가 서로 통신을 수행한다. 이때 Tie가 Stub을 자동으로 생성하기 때문에 개발 시 통신에 대해서는 신경 쓸 필요 없다. 일반적인 원격 메서드 호출뿐만 아니라 SOAP을 사용하여 XML 문서도 송수신할 수 있다. 다음 그림은 웹 서비스 공급자와 클라이언트 간의 통신 방식을 보여준다.

그림 5. JAX-WS 웹 서비스와 클라이언트 간의 통신