엑스퍼넷-롤링 블로터공식블로그

생산적인 자바 기반 SQL 프로그래밍 툴, PureQuery

  db2관리자 2008. 02. 22 뉴스와 분석, 디지털라이프, 테크놀로지 |

생산적인 자바 기반 SQL 프로그래밍 툴, PureQuery

IBM은 자바컬렉션, 데이터베이스 캐시, 관계형 데이터베이스에 쿼리할 때 통합된 언어인 pureQuery로 JDBC 프로그래밍의 어려움을 해결한다. pureQuery와 데이터 웹 서비스(Data Web Services)는 일반 데이터베이스 애플리케이션 개발 및 관리 플랫폼인 IBM 데이터 스튜디오(IBM Data Studio)의 구성요소이다.
Rafael A.Coss, Stephen A.Brodsky, Vijay Bommireddipalli 저

JDBC(Java Database Connectivity)는 그간의 명성에도 불구하고, JDBC 프로그래밍 방법은 다소 덜 시뮬레이팅 된다. IBM은 자바 컬렉션, 데이터베이스 캐시, 관계형 데이터베이스에 쿼리할 때 통합된 언어인 pureQuery로 JDBC 프로그래밍의 어려움을 해결한다.
자바는 매우 보편적인 개발 언어이고, 대부분의 애플리케이션 개발자들은 자바로 애플리케이션을 개발한다. 그러나 자바를 이용해 개발하는 작업은 매력적이지 못하다.
JDBC를 사용해 애플리케이션을 만들 경우 자바 데이터 접근 객체(DAO) 레이어를 만들고, CRUD(만들기, 변경하기, 업데이트, 삭제하기) SQL 기능 처리 등 많은 단계를 필요로 한다. 더욱이 자바 개발에 필요한 도구와 데이터베이스 CRUD 기능에 필요한 두 가지 각각의 도구 세트들이 필요하다.
IBM은 pureQuery(이전 코드명 ‘JKINQ’)로 두 가지 도구세트를 하나의 도구 세트로 만족시키고 있다. PureQuery는 고성능 데이터 접근 플랫폼으로 개발도구, API, 자바 애플리케이션 개발과 자바 애플리케이션 위한 향상된 런타임을 포함한다. IBM는 데이터에 접근하는 애플리케이션 개발과 관리 업무를 간소화하기 위해 pureQuery를 고안했다.
PureQuery는 <그림 1>에서 나타나는 것과 같이 애플리케이션 수명 주기 개발, 배치, 관리 및 단계 조절 등을 커버한다.

<그림 1> preQuery 아키텍처 개요

pureQuery 도구, API, 런타임 환경은 데이터베이스 내에 있는 데이터와 인 메모리(in-memory) 자바 객체에 접근한다. pureQuery는 IBM의 일반 데이터베이스 애플리케이션 개발 및 관리 플랫폼인 IBM 데이터 스튜디오 툴셋의 구성요소로 자바 접근성을 향상시킨다. PureQuery가 자바와 쿼리언어를 통합하기 때문에 JDBC 프로그래밍을 필요로 하지 않는다.

데이터 접근 API의 문제
자바 개발자들은 JDBC에서부터 JPA(Java Persistence Architecture)까지 애플리케이션을 설치할 경우 다양한 자바 데이터 API를 선택해 사용한다. 이 경우 API는 크게 직접적인 SQL 접근과 관리된 객체(managed objects)로 분류한다. 각각의 분류에 대한 옹호자와 비판자들이 있으며 <그림 2>에서 각각의 장단점을 요약해 놓았다.

<그림 2> 자바 개발의 두 가지 접근

직접적인 SQL 접근은 이해하기 쉽다. 이 접근은 이미 발생된 SQL를 제어함으로써 성능을 향상시킨다. 그러나 JDBC 개발 과정에는 많은 시간이 소요된다. 직접적인 SQL 접근 방법을 사용하는 경우 자바 프로그래머들은 JDBC에서부터 자바 객체까지 결과 세트를 도출해야 하며, 구문을 만들고 매개변수를 통합해야 하기 때문이다. 개발자들은 최적의 성능을 위해 JDBC API와 배칭 등과 같은 기능을 마스터해야 한다. 어떤 개발자들은 JDBC 성능을 향상시키기 위해 SQLJ를 고려하지만 이 방법을 사용할 경우 개발자들은 데이터 접근 레이어를 재작성해야 한다.
JDBC 개발의 많은 시간 소요로 객체관계형 매핑(Object Relational Mapping) 프레임워크가 만들어졌다. 이 프레임워크는 데이터 접근 추상 레이어를 제공한다. ORM은 데이터 접근 레이어를 만들기 위한 초기 업무가 적다.
그러나 ORM는 문제가 발생한 SQL를 제한적으로 통제한다. 런타임 성능문제를 진단할 경우 또 다른 레이어를 추가해야 한다. 개발자들이 SQL를 데이터베이스에 보내는 것을 더 이상 통제할 수 없기 때문에 튜닝과 진단도 어렵다.
그 결과 SQL를 변화시키고 어떤 애플리케이션을 통해 SQL를 보낼지 결정의 어려움이 있다.
IBM은 pureQuery를 만들어 이런 접근법의 한계를 완화시켰다. PureQuery는 자바 편집기에 SQL 인텔리전스를 제공한다. PureQuery는 또 다른 SQL 언어가 아니라 자바 컬렉션, 데이터 캐시, 관계형 데이터베이스에도 단정적으로 쿼리할 수 있는 언어이다.
PureQuery를 포함한 자바 편집기는 개발자들에게 자바에서 갖고 있는 것과 같은 수준의 SQL 코드완성, 유효성, 실행 보조 능력을 갖고 있는 통합된 SQL 편집기이다. IBM은 PureQuery뿐만 아니라 JPA에도 지원을 강화하는 작업을 하고 있다.

PureQuery 전격 해부
PureQuery는 데이터 서버를 위한 자바 데이터 접근 애플리케이션 개발과 개발수명 주기(개발, 배치, 관리, 문제 해결) 전반에 관한 자바 객체를 단순화한다. PureQuery 런타임 작업은 JDBC 드라이버를 가진 데이터베이스에서 작동하고 모든 버전의 DB2와 IDS(INFMIX Dynamic Server)를 통합하는 도구를 추가했다. PureQuery와 JAP(J2EE 표준)나 Spring 및 iBatis 같은 오픈소스 프로젝트에서 선택해 사용할 수 있다. PureQuery는 최근 발표된 Project Zero 이니셔티브(http://projectzero.org)와 zero.data(http://www.projectzero.org/wiki/bin/view/Community/DataDesign)에 있는 기술을 기반으로 통합될 수 있다. PureQuery 기술은 SQL 편집을 자바개발환경에서 작동된다.
간단히 말하면, PureQuery는 자바관련 데이터 접근 프로그래밍 업무를 쉽게 한다. 개발수명 주기 초반에 문제를 발견할 수 있으며, 데이터베이스 뒷단에서부터 애플리케이션 소스까지 연결해 주는 환경을 제공한다. 똑같은 자바 API를 통해 정적이고 동적인 SQL를 사용할 수 있다. 정적 SQL 지원으로 런타임 문제 판별과 조절 기능을 향상시킨다. DB2 DBA는 애플리케이션 성능, 애플리케이션 관리, 애플리케이션 접근 보안 측면에서 정적 SQL 접근의 많은 장점을 갖고 있다. 
PureQuery는 어떤 데이터 접근 타입이든 구현을 단순화하고 통합한다. EJB2, JPA, Spring, Ibatis 등과 같은 특정 API를 사용하기 보다는 데이터에 접근하기 위해 현존하는 몇 개의 API를 사용해 구현을 용이하게 하다. PureQuery를 가지고 자바에서 직접 데이터 접근 코드를 기록할 수 있다. 쿼리를 승인하기 위해 디자인 타임 구조론, 스키마 확인, 코드 완성/도움 같은 더 나은 도구를 지원한다.
IBM 데이터 스튜디오 솔루션은 반복적인 JDBC와 객체 구조 작업을 자동화한다. 예를 들어 PureQuery의 SQL 인텔리전스는 개발 과정 중에 SQL 구문을 완성할 수 있다.

SQL 편집기 통합 <그림3>은 다음을 통해 의미와 구조의 유효성에 대한 포괄적인 지원을 한다.
?* 디자인 타임 컴파일
?* 인텔리전스 내용 지원
?* 구조론 채색(Syntax colorization)


<그림 3> PureQuery와 IBM 데이터 스튜디오에서 만들어진 SQL 인텔리전스 때문에 SQL 구문을 더 쉽게 완성할 수 있다

자바 편집기에서 SQL를 직접 테스팅하는 것은 생산성을 향상시킨다. 데이터베이스 서버에 의해 SQL를 더 빠르게 테스트 할 수 있으며 오류는 자바프로그래밍 오류와 같이 경고로 나타난다.
PureQuery를 가진 SQL 사이클은 자바 편집- 컴파일- 디버그 개발 주기에서 더욱 생산적이다. 쿼리 열이 제대로 갖춰졌는지, 에러가 발생하는지를 알기 위한 런타임 시간까지 기다릴 필요가 없다. <그림 4>는 이클립스 자바 퍼스펙티브(Eclipse Java Perspective)에서 PureQuery가 SQL 오류를 어떻게 표시하는지 보여주고 있다.
이 도구 통합은 자바개발자들이 코드를 작성할 때, 상호작용, 인텔리전스 코드 지원과 즉각적인 SQL 에러 인식 기능을 제공하기 때문에 자바 프로그래머들의 생산성을 향상시킨다. 또한 PureQuery는 개발자들이 관리되지 않은 인 메모리 객체를 쿼리할 수 있도록 한다. 복사나 저장 없이도 원래 객체를 쿼리 할 수 있다. 이들 객체는 데이터 서버 쿼리에서 가져온 결과와 임의로 합쳐질 수 있는데 이는 PureQuery가 완전한 표준 SQL을 사용하기 때문이다. 예를 들어

의 쿼리는 PureQuery의 인 메모리 쿼리의 기능을 사용하여 두 가지 자바 컬렉션(부서와 구매)에 결합한다.

<그림 4> 디자인 타임 SQL 오류 식별자

자바 인 메모리 객체와 같은 PureQuery API 질의하기

객체들은 관리되거나 복사하거나 변화되지 않는다. 객체들은 객체들이 존재했던 메모리에 접근했다. 매개변수 ‘?’는 WHERE 문장의 서술된 값을 식별하고, FROM 절의 자바 컬렉션을 식별하는데 사용됐다.
PureQuery 는 인 메모리 객체를 쿼리 하기 위해서 일반적으로 SQL를 사용한다. 이 기능은 미국 내 주(state)의 룩업(lookup) 테이블(이렇게 되면 다른 데이터와 결합되어 주의 완전한 이름을 보여주고 데이터베이스 서버에 불필요하게 왔다갔다할 필요가 없다)과 같이 일반적으로 접근된 고정된 데이터 세트의 캐시를 제공한다.
PureQuery의 또 다른 특징은 자바의 정적 및 동적인 SQL 데이터 접근을 위해 단일 API를 제공한다는 점이다. 이전에는 JDBC가 동적 SQL 데이터 접근을, SQLJ가 정적 데이터 접근을 제공했다.
PureQuery 의 정적 SQL 지원으로 런타임 성능 향상, 쉽게 문제 해결, 코드 오류 식별, 기능 관리 강화 등과 같은 혜택을 얻을 수 있다. 정적 SQL은 정적 SQL 패키지를 모니터링 함으로써 관리성을 향상시킨다. 정적 SQL은 신속한 데이터베이스 접근 방법뿐만 아니라 최종 사용자에게 만족을 줄 수 있는 서비스를 제공한다.
마지막으로 정적 SQL은 더 강력해진 승인 모델을 제공한다. 배치에 있어 같은 PureQuery 코드로 동적 SQL과 정적 SQL 상에서 런타임 구현이 바뀔 수 있다. 이를 통해 개발자는 개발 시간에 동적 SQL로 애플리케이션을 만들 수 있고 코드 변경 없이 배치 시에 정적 SQL로 바꿀 수 있다.

데이터 웹 서비스

IBM 데이터 스튜디오 솔루션은 PureQuery 외에도 더 많은 것을 포함한다. 그 중 하나가 데이터 웹 서비스이다. 데이터 웹 서비스는 코드 한 줄 없이도 데이터에 접근할 수 있는 웹 서비스를 생성하는 기능을 제공한다. 웹 서비스로 쿼리(SQL 혹은 XQuery)와 정해진 절차가 가능하다. 이 서비스는 서비스 지향 아키텍처(SOA) 솔루션의 기반을 형성한다.
점점 더 많은 기업들이 자사의 애플리케이션을 위해 SOA를 채택하고 있으며, 서비스 기반의 접근을 지향하고 있다. 데이터 접근 측면에서 지난 수년 넘게 회사들은 기존에 정해졌던 절차와 장치 등을 이용해 비즈니스 로직을 강화해 왔다. 이들 데이터 접근 기능과 기본 규칙을 갖고 웹 서비스로 만들게 되면 SOA를 채택하는데 도움이 된다. 최근에는 서비스를 통해 데이터베이스 접근을 가능하게 하기 위해서는 많은 애플리케이션 전문가들을 필요로 한다. 이는 애플리케이션 코드에 SQL기능이나 정해진 절차를 랩핑해야 하고 애플리케이션 서버에 이를 배치해야 하기 때문이다. 그러나 대부분의 웹 개발자들은 SQL 전문가가 아니며, SQL 전문가들 역시 웹 개발 전문가가 아니기 때문에 애플리케이션 개발 및 배치작업의 어려움이 있다.
데이터 웹 서비스는 모든 코딩작업을 배제한다. 드래그앤드롭(Drag-and-Drop)을 사용해 데이터베이스 기능을 웹 서비스에서 사용할 수 있다. 또한 GET, POST 데이터 능력과 함께 SOAP과 REST(Representational State Transfer) 스타일의 엔드포인트 모두를 생성할 수 있다.
따라서 어떠한 웹 서비스를 통해서든지 데이터에 접근할 수 있다. 데이터 웹 서비스는 클라이언트 측면에서 SOAP과 브라우저 기반의 클라이언트, Xform, HTML 형식 등의 서비스를 야기시킬 수 있는 옵션을 제공함으로써 다양한 엔드 포인트를 지원한다.
서비스 발생과정은 서비스를 서술하는 WSDL(Web Service Definition Language) 파일을 만든다. 데이터 웹 서비스 솔루션 결과는 기존 자바 애플리케이션 서버 인프라스트럭처에 배치된다. 주요 기능은 다음과 같다.
* 드래그 앤 드롭로 만든 웹 서비스
* 프로그래밍 없는 배치
* 전체 웹 서비스 인터페이스
* HTTP를 통한 SOAP와 WSDL 생성
* REST 스타일 서비스 인터페이스
* HTTP GET/POST 바인딩
* 웹 2.0 기능(JSON, XSLT, AJAX를 통한 피드백)
* 서비스로 레거시 애플리케이션 컴포넌트를 노출하는 능력

데이터 웹 서비스를 컴퍼넌트로 갖고 있는 IBM 데이터 스튜디오 솔루션은 이클립스 기반이며, 다른 이클립스 솔루션와 쉽게 통합할 수 있다.
데 이터 웹 서비스는 프로그래밍 작업을 생략함으로써 웹 서비스 개발을 간편화한다. 데이터 스튜디오 툴은 웹 서비스를 위해 마법사로 진행되는 개발 단계와 통합된 테스트 환경을 제공한다. 또한 XSLT를 서비스 형태에 맞추기 위해 입출력을 적용한다. WSDL 자동생성은 사용자들이 WSDL를 가질 수 있으며 어떠한 형태의 웹 서비스를 사용하는 사람들을 위해서 WSDL를 제공한다.

데이터베이스인가 애플리케이션인가?

데 이터베이스인가 애플리케이션인가? 만약 애플리케이션이 먼저라면, 시스템은 객체 도메인모델부터 탑 다운 방식을 고안해야 한다. PureQuery는 객체에서부터 테이블 정의를 만듦으로써 탑-다운 방식을 지원한다. 그리고 객체 도메인 모델을 형성하기 위한 자바 데이터 접근 모델(persistence model)을 만드는데 기여한다.
반대로 데이터베이스를 우선시 할 경우, 시스템은 기존에 갖고 있던 데이터베이스부터 버텀-업(buttom-up) 방식을 지원한다. PureQuery는 자바 데이터 접근 모델을 만들 수 있다.
그 러나 기존의 많은 시스템들이 데이터베이스와 객체들을 갖고 있어 이 두 가지를 아우르는 시나리오를 고려하게 된다. 이를 위해 PureQuery는 기존에 갖고 있는 객체를 자바 데이터 접근 모델에 그리고 자바 접근 모델을 기존에 갖고 있는 데이터베이스에 매핑하기 위해 사용되는 도구를 제공한다.
PureQuery는 달기식 방법(annotated-method)과 인라인 방법(inline-method)의 두가지 스타일로 SQL 실행을 지원한다.
달 기식 방법은 관계가 있는 객체들의 매핑 정의를 인터페이스에 자바 주석이나 XML 파일에 SQL를 사용한다. 또한 (CRUD에 정의된) 인터페이스, 인터페이스 구현, 데이터를 나타내는 자바 빈(bean)을 만든다. 이 방식은 자바 주석을 사용하여 인터페이스에 SQL 매핑을 요약한다.
반면 인라인 방법 스타일은 SQL을 직접 실행한다. 다음의 코드는 employee bean을 사용한 인라인 방법 스타일의 예다:
employee = db.queryFirst(”SELECT NAME,
ADDRESS, PHONE FROM EMP
WHERE NAME=:name”, Employee.class,
name);
도구들은 자바컬렉션 기반의 테이블, 뷰, 그리고 지정된 절차 결과 세트를 쉽게 생성한다.

가장 손쉬운 데이터 접근 방법

pureQuery 는 성능과 문제 해결뿐만 아니라 자바 데이터 접근을 위한 직접적인 프로그래밍 모델과 툴을 제공한다. JDBC의 맨 윗단의 레이어로서 기능하는 pureQuery는 자바 데이터 접근 개발에 관련된 기본적인 작업을 단순화시켜 JDBC 프로그램보다 빠르게 실행한다. PureQuery는 표준 API에서 얻을 수 있는 것 이상의 성능을 제공하기 위해 배치 업데이트, 데이터 베이스 특정한 API 등으로 개발자들이 최상의 JDBC 처리할 수 있도록 JDBC 옵션을 제공하기 때문이다.
pureQuery는 정적 SQL의 장점을 갖고 있고 데이터베이스 내에 자바 빈과 자바 지도를 저장하고, 검색하기 위한 지원을 제공한다. 또한 pureQuery는 패턴을 처리할 수 있는 장착형 맞춤 결과를 가진 확장 가능한 플랫폼이다. 결론적으로 pureQuery는 자바에서 SQL 프로그래밍을 자바 프로그래밍만큼 생산적으로 만든다.
pureQuery와 데이터 웹 서비스와 짝을 이루는 IBM 데이터 스튜디오는 개발자들에게 생산성을 향상시켜 주며 복잡한 작업을 단순화 하여 개발주기를 짧게 하는데 기여한다.
pureQuery와 IBM 데이터 스튜디오 솔루션에 대한 더 자세한 내용은 ibm.com/software/data/studio을 참조하면 된다.

Rafael A. Coss [rcoss@us.ibm.com]는 IBM 실리콘 밸리 랩에서 데이터 서버 솔루션 팀의 pureQuery 가능화 작업을 지휘하는 솔루션 아키텍트이다. IBM에서 pureQuery, DB2 pureXML, Information Integrator, DB2 Spatial Extender에 기여하고 있다.

Stephen A. Brodsky [sbrodsky@us.ibm.com]는 IBM 실리콘 밸리 랩의 수석 기술자로 데이터 애플리케이션 개발 도구, 런타임, SOA를 지휘하는 아키텍트이다. 지금까지 IBM 데이터 스튜디오, pureQuery, DB2 pureXML, SDO(Service Data Objects), JDBC XML 등을 포함, 다양한 소프트웨어 아키텍처, 제품, 표준에 기여하고 있다.

Vijay Bommireddipalli [vijayrb@us.ibm.com]는 IBM 실리콘밸리 랩에서 데이터 서버 솔루션의 고문 소프트웨어 엔지니어로 IBM 데이터베이스 서버와 데이터 웹 서비스를 사용하여 솔루션을 개발하는 고객과 파트너를 돕고 있다.

트랙백 : http://bloter.net/archives/3593/trackback

One Response to “생산적인 자바 기반 SQL 프로그래밍 툴, PureQuery”

  1. cuckoo03

    파이어폭스에서 가로로 스크롤바가 생겨 읽기가 불편하군요

댓글쓰기