IBM®
메인 컨텐츠로 가기
    Korea [국가변경]    이용약관
 
 
   
        제품    서비스 & 솔루션    고객지원 & 다운로드    회원 서비스    
메인 컨텐츠로 가기

한국 developerWorks  >  Information Management | XML | SOA와 웹서비스 | Rational  >

DB2 9 pureXML용 웹 서비스 생성하기 (한글)

XML 데이터용 Bottom-Up 웹 서비스를 생성하는 방법

developerWorks
문서 옵션

JavaScript가 필요한 문서 옵션은 디스플레이되지 않습니다.

토론

샘플 코드

영어원문

영어원문


제안 및 의견
피드백

난이도 : 중급

Vijay Bommireddipalli, Data Servers Solutions, IBM

2007 년 9 월 18 일

웹 서비스는 서비스 지향 아키텍처(SOA)를 실현하는 중요한 구현 블록입니다. 애플리케이션이 점점 더 SOA로 향해가면서, 애플리케이션 기능을 웹 서비스로서 노출해야 할 필요가 많아졌습니다. 이 글에서는 간단한 자바 클래스를 사용하여 웹 서비스를 생성하여 pureXML™ 기능을 사용하여 DB2® 9 에서 XML 데이터를 삽입 및 검색하는 방법을 설명합니다. 웹 서비스가 생성되어 WebSphere® Application Server에서 전개되면, 웹 서비스 클라이언트로서 Rational Application Developer (RAD)의 빌트인 웹 서비스 익스플로러나 XForms를 사용하여 이들을 테스트 할 수 있습니다. 같은 서비스들이 SOAP over HTTP 웹 서비스 호출을 할 수 있는 웹 서비스 클라이언트에 의해 사용될 수 있습니다.

배경

소셜 북마크

mar.gar.in mar.gar.in
digg Digg
del.icio.us del.icio.us
Slashdot Slashdot

요즘, 웹 서비스들은 SOA의 중요한 컴포넌트이고, 매우 분리되고 유연한 솔루션이다. 웹 서비스는 Top-Down 또는 Bottom-Up 방식을 사용하여 구현될 수 있다. Top-Down 방식의 경우, 서비스 스팩(예, WSDL 파일)으로 시작한 다음 기반 코드를 구현하여 그 스팩과 매치시킨다. Bottom-Up 방식의 경우, 자바 빈으로 시작하여 그 기능을 웹 서비스로서 노출시킨다.

IBM은 DB2 9에 pureXML 기능을 도입했다. 이것은 XML 데이터가 데이터베이스에 기본적으로 저장될 수 있도록 한다. 이것은 XML을 DB2의 퍼스트 클래스 datatype으로 만들고, XML 컬럼은 데이터베이스 내 기본적인 계측적 형태로 잘 구성된 XML을 저장할 수 있다. 데이터가 XML로서 데이터베이스에 저장되면, 이 데이터는 매우 효율적으로 쿼리될 수 있다. XML은 쿼리 계산 때문에 런타임 시 파싱되지 않기 때문이다. XQuery, SQL, DB2가 제공하는 애플리케이션 개발 인터페이스를 사용하여 XML 데이터로 액세스 및 조작 할 수 있다.

XForms는 XML 기반의 전자 폼 기술로서 데이터를 XML 데이터 인스턴스로서 제출할 수 있다. 이는 W3C 권장이고 플랫폼이며, 장치 독립적이다. XForms는 데이터 모델과 표현을 분리하는데, 이는 사용자 데이터가 XML로서 제출될 수 있도록 한다. 이 데이터의 수신자는 XML 인스턴스로서 제출된 데이터를 저장 및 조작할 수 있다. XForms를 사용하여 데이터가 제출되는 여러 방법들이 있다. 이 예제에서는 웹 서비스를 사용하기로 한다.

엔드 유저 폼에 XForms를 사용하고, 전송 메커니즘으로서 웹 서비스를 사용하고, 저장에 DB2 9을 사용하여, 진정한 엔드투엔드 XML 솔루션을 만들 수 있다. 변화에 탄력적이며, 개발 시간을 현격히 줄인다.

DB2 9, XForms, 웹 서비스와 관련된 상세한 정보는 참고자료 섹션을 참조하라.

사전 조건

다음 사항들은 이 글에서 설명하는 내용들을 이해하는데 필수적이다.

  • DB2 9과 pureXML 기능을 이해해야 한다. 참고자료 섹션에서 DB2 9의 pureXML 기능을 파악해야 한다.
  • RAD 실행 및 WebSphere Application Server 테스트 환경을 사용하여 애플리케이션을 전개 및 제거하는 기능을 알아야 한다.
  • 웹 서비스 개발을 이해하고 있어야 한다.




위로


시스템 요구 사항

서버 측 개발

  1. DB2 9과 pureXML

    무료로 사용할 수 있는 DB2 Express-C를 사용할 수 있다. DB2 Express-C는 두 개의 듀얼 코어 CPU 서버에서 실행될 수 있으며, 최대 4GB 메모리까지 가능하며, 시스템 스토리지 설정이 가능하고, 데이터베이스 크기에 대한 제한 사항이나 기타 제약 사항이 없다. Express-C 다운로드에 대한 링크는 참고자료 섹션을 참조하라.

  2. RAD Version: 7.0.0 (또는 이후 버전)

    주: 본 예제는 RAD에 포함된 WebSphere Application Server Version 6.1.0.2 빌트인 테스트를 사용하여, 결과를 테스트하는 단계를 상세히 보여준다. WAR 파일을 반출하고 이를 WebSphere Application Server(6.1.0.2 및 이후 버전)에 전개할 수 있다. 본 예제는 이전 버전의 WebSphere Application Server에서는 실행되지 않는다.

클라이언트 측

  • Mozilla Firefox 1.5.x 또는 이후 버전(Firefox 2.0.x)과 XForms 플러그인.

    XForms 플러그인은 Firefox Add-ons 페이지에서 설치될 수 있다. XForms 플러그인을 설치하려면 Firefox 2.0.x를 사용하여 이 url 을 시작하고 Install now를 선택한다.




위로


절차

요약

본 예제는 Bottom-Up 방식을 사용하여 XML 데이터용 웹 서비스의 생성 과정을 설명한다. 자바 빈의 구현(FormServices.java)이 시작 포인트로서 제공된다. 본 자바 빈에는 데이터 액세스 및 조작 메소드가 포함되어 있고, DB2 9 샘플 데이터베이스의 XML 컬럼에 있는 데이터를 조작한다. 사이드 바 "FormServices.java explained"에 자바 빈 콘텐트에 대한 상세한 설명이 되어 있다. RAD를 사용하여 자바 빈에 있는 이러한 메소드를 웹 서비스로서 노출하게 될 것이다. 마지막으로, 이러한 웹 서비스들을 Xforms를 사용하여 테스트 할 것이다.

단계

  1. 샘플 데이터베이스와 xmlcustomer 테이블을 생성하기
    1. codepage UTF8의 샘플 데이터베이스를 만든다. (없을 경우)
       db2 create db sample using codeset UTF8 territory US 
      

      DB2 9은 UTF8 데이터베이스 코드 페이지를 사용하여 XML datatype 컬럼을 만든다.

    2. DB2 명령어 프롬프트에서, 다음 명령어를 사용하여 xmlcustomer 테이블을 만든다.
      connect to sample
      CREATE TABLE XMLCUSTOMER( CID  INT NOT NULL PRIMARY KEY, INFO  XML )
      

      XML 컬럼 INFO는 잘 구성된 XML을 저장할 수 있다.

      DB2 명령어 프롬프트에 다음을 입력하여 테스트 insert를 시도한다.

      insert into xmlcustomer values ( 9999, '<test/>'); 
      

  2. RAD 시작 및 "Dynamic Web Project" 생성하기
    1. 웹 퍼스펙티브에서 시작한다. (또는, Window > Open Perspective > Web 순으로 선택한다.)
    2. 프로젝트 이름으로 "XForm"을 입력한다. (대소문자 구별)
    3. 디폴트를 사용하고 Finish를 클릭한다.

그림 1. 웹 프로젝트 만들기
웹 프로젝트 만들기

  1. 제공된 자바 소스 코드 파일을 가져와서 필요한 부분을 수정하기
    1. 위에서 생성된 XForm 프로젝트를 Java Resources 폴더가 보일 때까지 확장한다.
    2. 오른쪽 클릭하여 New > package를 선택한다. 패키지 이름으로 "com.ibm.test"를 지정하고 Finish를 클릭한다.

그림 2. 패키지 생성하기
패키지 생성하는 방법

    1. 방금 생성된 패키지를 오른쪽 클릭하고 Import > File System 순으로 선택하여 FormServices.java (자바 소스 파일)를 가져온다.


FormServices.java에 대하여:

자바 소스 코드 FormServices.java는 두 개의 클래스로 구성된다.

  • DB 클래스:

    이 클래스는 데이터베이스 연결을 핸들한다. 자신의 환경에 맞게 수정해야 한다.

  • 메소드:

    connect: 애플리케이션 코드가 DB2 데이터베이스로 연결되도록 한다. 이 메소드는 type 4 Java Database Connectivity (JDBC) 드라이버를 사용한다.

    disconnect: 데이터베이스에서 애플리케이션 연결을 해제하고 JDBC 리소스를 해제한다.

  • FormServices 클래스:

    본 클래스는 데이터베이스에 있는 데이터를 조작하는 메소드를 갖고 있고 폼에 디스플레이 될 데이터를 가져온다. 이 메소드는 웹 서비스로서 노출된다. XML 데이터 조작을 가능케 하는 세 개의 기본 메소드가 있다. 이 세 개의 메소드들이 반복하여 XML 데이터가 스트링으로 취급되도록 한다.

  • 메소드:

    insertFormData: 인풋 XML 데이터를 취하고 이것을 DB2 데이터베이스의 XML 컬럼에 저장한다. XML 인풋은 XML 데이터여야 한다. (&lt; 같은 이스케이프 스트링은 안된다.)

    retrieveFormData: 고유 키에 기반하여 XML 컬럼에 저장된 폼 데이터를 가져온다.

    retrieveFormIDs: 폼 ID를 검색하고 이것을 XForm에 맞는 XML로 리턴한다. 이 메소드를 사용하여 폼 내에 드롭다운 메뉴를 생성할 수 있다.

    세 개의 메소드 *AsString()은 기본적으로 위와 같은 메소드이지만, XML 데이터를 와이어를 통해 전송하는 대신, XML은 스트링으로 변환된다. 따라서, <hello/>는 "&lt;hello/&gt;"가 된다. 이러한 편리한 메소드들이 제공되어 빌트인 웹 서비스 익스플로러를 테스팅에 사용할 수 있다.

    genSOAPElement: 스트링에서 SOAPElement로 페이로드를 변형하는데 사용되는 헬퍼 메소드이다.

    genStringfromSOAP: SOAPElement에서 스트링으로 페이로드를 변형하는데 사용되는 헬퍼 메소드이다.




그림 3. FormServices.java 샘플 코드 가져오기
자바 소스 임포팅

    1. //Change 패턴을 찾고 필요할 경우 환경에 맞게 수정한다. 코드에 있는 주석들을 참조하면 도움이 된다.
    2. 이 예제를 제시된 대로 따라갈 경우, Database 클래스에서 사용자 아이디와 패스워드를 변경해야 하는데 이것 역시 //Change 패턴에 의해서 표시된다.
    3. 이 코드가 깨끗하게 컴파일 되고 모든 반입이 수행되었는지를 확인한다. db2jcc.jar를 XForm 프로젝트의 Java Build Path에 추가해야 한다.
    4. 외부 db2jcc.jar를 추가하려면, 프로젝트를 오른쪽 클릭하고 Properties > Java Build Path > Add External Jars >를 선택한 다음 DB2 설치(\sqllib\java)에서 db2jcc.jar를 선택한다.
  1. 컴파일 된 자바 코드를 웹 서비스로서 노출하기
    1. FormServices.java를 오른쪽 클릭하고, Web Services > Create Web Service 순으로 클릭한다. 웹 서비스 메뉴가 보이지 않으면, 실행 방법에 대해 읽어보라.
    2. 웹 서비스 메뉴가 보이지 않는다면, 워크벤치에서 웹 서비스 기능을 실행해야 한다. Windows > Preferences > Workbench > Capabilities 순으로 클릭하고 Web Service Developer를 체크하여 이것이 실행되는지를 확인한다.


그림 4. 자바 소스에서 웹 서비스 생성하기
자바 bean에서 웹 서비스 생성하기

    1. 설정이 아래 보이는 것처럼 되었는지 확인한다. 경고가 실행되면 OK를 클릭한다.

      주: 서비스가 생성되면, 다양한 자바 datatype을 JAX-RPC 스팩에 정의된 것과 같은 XSD 유형으로 매핑한다. IBM WebSphere SOAP 엔진은 자바 빈의 javax.xml.soap.SOAPElement datatype을 WSDL의 XML 스키마 xsd:anyType으로 매핑한다. 하지만, JAX-RPC 스팩은 현재 xsd:anyType에 대한 표준 자바 매핑을 정의하지 않는다. JAX-RPC 구현은 xsd:anyType을 지원하는데 필요하지 않다. 본 예제는 다른 SOAP 엔진에서는 실행되지 않으며 다른 SOAP 엔진에서 테스트 되지 않았다.


그림 5. 웹 서비스 설정 리뷰
웹 서비스 설정 리뷰

    1. 실행해야 하는 서비스를 선택할 수 있는 메뉴가 보일 때까지 Next를 클릭한다. 모든 서비스들이 웹 서비스로서 노출되는 것으로 체크되었는지를 확인한 다음 Finish를 클릭한다.

      주: 경고가 실행되면 OK를 클릭한다. (위 주 참조)


그림 6. 웹 서비스로서 노출할 메소드 선택하기
웹 서비스로서 노출할 메소드 선택하기

    1. 프롬프트가 뜨면 Start Server를 클릭한다. 생성된 서비스들은 빌트인 WebSphere Application Server 테스트 서버에 퍼블리시 될 것이다.
  1. 빌트인 테스트 WebSphere Application Server에서 XForms 실행하기
    1. XForms 애플리케이션을 테스트하기 전에, 설치된 필수 JAR 파일들이 JDBC type 4 드라이버를 사용하여 DB2에 연결하기에 맞는 버전인지를 확인한다.
      1. 설치된 WebSphere Application Server 디렉토리로 가서 다음 파일들이 있는지를 확인한다. db2jcc.jar, db2jcc_license_cu.jar (예를 들어, 본 예제의 경우, 필자는 이러한 JAR 파일들을 "C:\Program Files\IBM\SDP70\runtimes\base_v61\lib'" 밑에 설치했어야 했다.)
      2. JAR 파일들이 없다면, JAR 파일들을 복사하고 WebSphere Application Server 시스템 서버를 재시작 한다.
    2. 이전 단계에서 생성된 웹 서비스와 XForms를 실행하기 전에 같은 WebSphere Application Server에 SOAPForwarding 서블릿을 설치해야 한다. 이 파일 (SOAPResolution.war)은 다운로드 섹션에서 제공된다.

      이 단계는 단순한 stop gap 정렬이다. Mozilla의 XForms Add-on은 현재 유효한 SOAP 호출을 하지 않는다. 이 단계는 이러한 결함들이 Mozilla XForms Add-on의 차기 릴리스에서 픽스되면 필요치 않다. 이 글을 쓰고 있는 현재, Firefox Xforms Version 0.7.0.1을 사용하는 웹 서비스 호출은 SOAPAction 헤더가 빠져있다. SOAPForwarding 서블릿은 이 SOAPAction 헤더를 추가하는 것뿐이다.

      1. XformEAR을 오른쪽 클릭하고 Import > war file을 선택한다.
      2. 파일 시스템을 검색하여 SOAPResolution.war 파일을 선택한다. 웹 프로젝트 이름은 아래 나타난 대로 자동 채우기를 실행한다. 이것이 기존 XFormEAR 프로젝트에 추가되었는지를 확인한다.

그림 7. SOAPResolution WAR
SOAPForwarding Servlet 임포트

      1. Click Finish를 클릭하여 서블릿을 가져온다.
  1. RAD의 빌트인 웹 서비스 익스플로러를 사용하여 웹 서비스 테스트 하기
    1. 애플리케이션을 성공적으로 전개 및 시작했다면, 이제 전개된 서비스들을 테스트 할 차례이다.
    2. RAD에서 생성된 FormServices.wsdl을 오른쪽 클릭하고 Test with Web services explorer를 선택한다.
    1. 정확한 포트 넘버로 엔드 포인트를 지정하고, *AsString. 으로 끝나는 메소드를 실행해 본다. 이 샘플에는 이스케이프 스트링으로서 XML을 리턴하는 *AsString 으로 끝나는 세 개의 메소드가 있다. 대부분의 브라우저들은 이스케이프 스트링으로서의 XML을 선호한다. ("<" 대신 &lt;) 하지만, XForms는 실제 XML 값을 좋아한다. 다른 세 개의 메소드(*AsString 제외)는 *AsString과 기능면에서 동일하지만, 이들은 실제 XML 데이터를 리턴한다.

그림 8. 웹 서비스 익스플로러를 사용하여 *AsString 서비스 테스트 하기
Test the Web services using Web services Explorer

  1. XForms를 사용하여 XML 웹 서비스 테스트 하기
    1. 데모에 제공된 XForms를 시작한다.

      xmlcustomer.xhtml 파일을 오른쪽 클릭하고 Open with Firefox를 선택한다. 이 단계는 본 글의 사전 조건 섹션에 지정된 대로 XForms 플러그인을 설치한 것으로 간주한다. 아래 스크린 캡쳐와 같은 XForms를 볼 수 있다.

    2. 고유 "Id Val"을 지정하고 이름에 /modify를 입력한다.
    3. xmlcustomer Form을 사용하여, Id Val 필드에 고유 ID를 지정하고 Submit을 누른다.

      지정된 Id Val은 DB2의 XMLCUSTOMER의 CID 컬럼 고유의 것이어야 한다.

    4. Submit을 누르면, XForm은 insertFormData 서비스로 웹 서비스 호출을 하고 이 폼의 사용자 데이터를 XML 인스턴스로서 DB2에 삽입한다.

      에러가 생기거나 어떤 것도 발생하지 않으면, "문제 해결 팁" 섹션을 참조하여 필요한 조치를 취한다.


문제 해결 팁

XForms:

"Submit"을 눌러도 아무것도 발생하지 않을 때:

  • Firefox에서 Tools > Java script console을 선택하여 스타일스트 에러 외에 다른 에러가 있는지를 확인한다.
  • If you see the XForms Error (14): Security check failed! Trying to submit data to a different domain than document 에러의 경우:

    Mozilla의 XForms 확장은 기본적으로 크로스 도메인 제출을 허용하지 않는다. 상세한 내용은 url 을 참조하라. 크로스 도메인 제출을 실행하려면, "hostperm.1" 파일을 찾고 이 라인을 "host xforms-xd 3 scheme:file" 파일에 추가한다. (이와 비슷한 다른 라인도 볼 수 있다.) 필자의 hostperm.1은 C:\Documents and Settings\Administrator\Application Data\Mozilla\Firefox\Profiles\m6g6ho0d.default 디렉토리에 있었지만, 여러분의 경로는 다를 수 있다. 브라우저를 재시작 한다.

WebSphere Application Server:

XForm.war 애플리케이션이 시작하지 않으면, 시스템 로그를 검사해 보라. Microsoft® Windows 시스템의 경우, 기본 위치는 C:\Program Files\IBM\SDP70\runtimes\base_v61\profiles\AppSrv01\logs\server1 이다.

고급 문제 해결:

여러분이 서버 문제를 다루고 있는지, 아니면 클라이언트 문제를 다루고 있는지를 파악하는 좋은 방법은 와이어를 통해 xform에서 WebSphere Application Server로 무엇이 보내지는지를 확인하는 것이다. https://tcpmon.dev.java.net/ 같은 TCP 모니터를 사용하여 이를 수행할 수 있다.

XForms 제출 액션을 TCP 모니터가 실행되는 새로운 포트 넘버로 리다이렉션 하고 TCP 모니터가 인커밍 메시지를 서버로 보내도록 한다.

예제:

localhost:9081을 가리키는 서버에서 localhost:8080에서 TCP 모니터를 실행한다. localhost:8080에 제공된 샘플 xform에 localhost:9081의 모든 현상들을 수정한다. 이러한 방식으로, 모든 제출은 TCP 모니터를 통해 보내지고, 이 모니터는 무엇이 보내지는지를 디스플레이 한다.

방화벽이 통신을 차단하고 있지는 않은지를 확인한다.


그림 9. xform을 사용하여 insert 서비스 테스트 하기
xform을 사용하여 insert 서비스 테스트 하기

    1. 에러가 없다면 검색 폼을 보게 될 것이다. Insert에서 지정된 것과 같은 ID를 지정하고 Retrieve를 누른다.
    2. 이번에는, xform이 retrieveFormData 서비스로 웹 서비스 호출을 하여 XML 인스턴스로서 DB2에서 사용자 데이터를 검색하고 이를 xform으로 매핑한다.

그림 10. xform을 사용하여 retrieve 서비스 테스트 하기
xform을 사용하여 retrieve 서비스 테스트 하기




위로


결론

DB2 pureXML에 있는 XML 데이터를 위한 Bottom-Up 웹 서비스를 생성하는 방법을 살펴보았다. 이러한 서비스들은 SOAP over HTTP 웹 서비스를 사용하여 DB2 9에 XML 데이터를 저장하고 검색할 수 있다. 이 서비스들은 이스케이프 스트링 또는 실제 XML로서 XML을 삽입 및 검색할 수 있다. 자신의 필요에 맞게 자바 소스를 수정할 수 있고 그러한 메소드들은 웹 서비스로서 노출될 수 있다. 이러한 웹 서비스들은 SOAP over HTTP 호출을 하여 데이터를 데이터베이스에 저장 및 검색할 수 있는 클라이언트에 대한 엔드포인트로서 작동한다.




위로


감사의 말

이 글을 검토해 준 Michael Schenker, Keith Wells, Jan Kratky, Cindy Saracco, Sal Ledezma, Matthias Nicola에게 감사의 말을 전하고 싶다.





위로


다운로드 하십시오

설명이름크기다운로드 방식
샘플 자바 코드와 Xformjavaxformsample.zip10KBHTTP
다운로드 방식에 대한 정보


참고자료

교육

제품 및 기술 얻기

토론


필자소개

V. Bommireddipalli photo

Vijay Bommireddipalli는 IBM 실리콘밸리 연구소(캘리포니아)의 데이터 서비스 솔루션 팀에서 일하고 있다. 이 곳에서, DB2 기반 솔루션을 개발하고 있다. 이 팀으로 옮기기 전, Warehouse Manager 개발 팀의 개발자로 있었다. 2000년 7월에 IBM에 입사했으며, 매사추세츠주립대 - Dartmouth에서 전기 공학 및 컴퓨터 엔지니어링 석사 학위를 받았다.




기사에 대한 평가


보다 나은 서비스를 제공하기 위함이오니 잠시 짬을 내어 이 양식을 제출하여 주십시오.



아니오잘 모르겠음
 


 


12345
 



위로


developerWorks 콘텐트를 다른 사이트에 전재하기:
developerWorks 콘텐트에 대한 저작권은 IBM에 있습니다. IBM의 서면 허가나 원본 저자의 허락이 없이는 전재를 금합니다. 저희 콘텐트를 전재하시려면 IBM developerWorks 담당자 에게 문의하십시오.
    IBM 소개 개인정보 보호정책 문의