WebRowSet 을 이용한 JDBC 활용하기 1부

RDBMS는 Data 질의와 갱신에을 위해 가장 광범위하게 이용되는 영구 저장 메카니즘(persistance storage mechanism) 입니다. Java Database Connectivity (JDBC) 는 Java 프로그램이 RDBMS 상의 데이터를 SQL을 이용하여  조작할 수 있게끔 해주는 프레임워크의 API 모임입니다.

Java 프로그램에서 데이터베이스의 데이터를 조회하거나 갱신하는데는 일련의 순서가 있습니다.
첫째로, 프로그램은 접속하고자하는 DataBase에 커넥션이 맺어져야 합니다.
이 커넥션을 맺는데는 몇 가지 다른 방법이 있습니다.. 관습적인 방법으로는 벤더에서 제공하는 JDBC드라이버를 로딩한 후 java.sql.DriverManger 클래스의 getConnection() 메소드를 호출하는 방법이 있을수 있습니다.
또 다른 한가지 방법은 접속하고자하는 데이터베이스를 개발한 회사에서 제공해 주는 java.sql.Connection 인터페이스를 구현한 클래스를 이용하는 방법이 있을수 있고,  Java EE 컨테이너에서처럼 JNDI (Java Naming Direvtory Interface) lookup을 통해 커넥션을 맺는 방법도 있겠네요.
어느 방법을 이용하든 Java 프로그램은 java.sql.Connection 인터페이스를 이용하여 데이터베이스와 커넥션을 맺게됩니다.
둘째로, 위에서 얻어온 Connection 객체로부터 Query를 DataBase로 전송하기위한 java.sql.Statement 인터페이스를 생성합니다.
마지막으로 Statement의 실행 결과를 java.sql.ResultSet 인스턴스로 돌려 받습니다.

본 포스팅에서는 JDBC version 3.0을 지원하는 JDK version 5.0에서 새로이 등장한 WebRowSet을 이용하는 방법을 알아보겠습니다.  
JDBC 3.0은 데이터의 생성과 변형을 손쉽게 해 낼 수 있는 몇 가지 기능을 제공합니다.


WebRowSet 계층구조


본격적인 WebRowSet의 이야기에 앞서 WebRowSet 인터페이스의 상속 계층 구조를 먼저 살펴 보도록 하겠습니다.
WebRowSet Hierarchy

WebRowSet inheritance Hierarchy(출처:OnJava)


상속관계에서 Root는 java.aql.ResultSet 인터페이스 입니다. 이 인터페이스의 인스턴스는 데이터베이스가 해석할수 있는 query를 포함하는 java.sql.Statement 인스턴스를 실행함으로써 얻어지는 표 형식의 데이터입니다. 기본적으로 result set은 앞으로만 탐색할 수 있고 업데이트를 할 수 없습니다. default result set을 가지고는 임의의 위치에 있는 데이터를 다룰 수 없다는 말이 됩니다.

자. result set에 담아진 임의의 위치에 있는 테이터를 제어하려면 어떤 방법이 있을까요? result set으로 무엇을 하길 원하는지에 따라 달라집니다. 예를들어 JavaBeans component model을 지원하기위해서는 java.sql.ResultSet의 서브인터페이스인 javax.sql.RowSet 인터페이스를 이용할 필요가 있겠죠.

자바프로그램에서 데이타베이스를 액세스하는것은 꽤나 무거운 오퍼레이션이기 때문에 이런 경우 메모리에 올라와있는 데이타 캐시는 성능의 주요한 key factor가 되는데요. 메모리에 적재된 데이타를 이용하기위해서 javax.sql.RowSet의 서브인터페이스인 javax.sql.rowset.CachedRowSet을 이용할 수 있습니다.CachedRowSet인터페이스의 인스턴스는 원하는 데이터를 가져오기위해 항상 데이터 베이스에 접속하지 않고 이미 메모리 상에 올라온 데이터를 통하여 원하는 결과를 가져올 수있능 능력이 있습니다. 이에 더해  CachedRowSet은 스크롤, 데이터 변경이 가능하고, serializable 합니다. 또한 스프레드시트와 같은 표형식의 데이터 소스에도 잘 작동 합니다.

위에 기술한 모든 기능들과, 거기에 더해 result set의 출력을 XML로 한다든지 하는 기능이 필요하다면 javax.sql.rowset.WebRowSet이 적절한 해답일 수 있습니다. WebRowSet인터페이스에 대해 썬에서는 JDK 5.0에 이미 reference implementation클래스로 com.sun.rowset.WebRowSetImpl 클래스를 제공하고 있습니다.

javax.sql.rowset 패키지의 마지막 서브인터페이스인 javax.sql.rowset.JoinRowSet은 result set 내의 object를 대상으로 SQL JOIN문과 같은 조작을 수행 할 수 있는 기능을 제공합니다.

다음편으로 계속..

2008/11/09 13:59 2008/11/09 13:59
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다