[4th Seoul Workshop]Database and Java

박 재 범
120-031, 서울특별시 서대문구 충정로3가 32-11 충정빌딩 2층
제이씨현시스템(주) 엘림네트
E-mail : jbpark@elim.net
URL : http://www.elim.net/~jbpark/
Abstract:
Database는 컴퓨터에서 다루는 모든 정보를 어떻게 다룰 것인가에 대한 논의가 이뤄낸 컴퓨터 기술의 한 분야이다. 월드와이드웹이라는 개방된 환경이 새로운 컴퓨팅 환경으로 떠오르면서 모든 서비스 개발 기술 또한 새로운 변화를 요구하게 되었고, Database또한 예외는 아니다.

다시 말해, 현재의 Database 기술로는 개방된 환경을 지원하기에는 무리가 따른다는 것이다. 이에 95년중반부터 새로운 이슈로 떠오르고 있는 Java 기술에서 지원하고 있는 JDBC 기술을 개방 환경이라할 수 있는 새로운 컴퓨팅 환경의 신Database 기술로 소개하고자 한다.

Database기술에 대한 새로운 요구를 정리해 보고, JDBC 기술에 대한 소개와 이용에 대해 살펴보고, 이를 통해 앞으로의 Database 기술로써 JDBC 기술을 제안해보고자 한다.

Keywords:
Database, Java, DBMS, ODBC, JDBC, SQL OQL, RDB, ORDB, OODB

1. 서론

1.1 데이터베이스에 대하여...

Database(데이터베이스)는 컴퓨터에서 다루는 모든 정보를 어떻게 다룰 것인가에 대한 논의가 이뤄낸 컴퓨터 기술의 한 분야이다. 현재 새로운 컴퓨팅 환경으로 대두되고 있는 월드와이드 웹이라는 개방된 환경에서 정보가 그 어느 때보다도 중요한 의미를 가진 존재가 되어버렸다. 더우기 새로운 Database 기술마저 요구되고 있다.
현재 Database 기술에서 Database는 크게 세가지로 분류가 되는 데,
관계형 데이터베이스, 객체 관계형 데이터베이스, 객체 지향형 데이터베이스가 바로 그것이다.

1.1.1 관계형 데이터베이스

데이터베이스 모델을 구성요소의 관계 표현(Relationship)에 중점을 둔 데이터베이스 모델을 관계형 데이터베이스라고 한다.
Sybase, Informix, Oracle등과 같은 것들이 있으며, 일반적으로 많이 사용되어 왔던 데이터베이스이다.


[그림 1] 관계형 데이터베이스(Relational Database)

1.1.2 객체 관계형 데이터베이스

데이터베이스 모델을 객체 단위의 관계표현(Object Relationship)에 중점을 둔 데이터베이스 모델을 객체 관계형 데이터베이스라고 한다.
Illustra가 대표적인 데이터베이스이며, 멀티미디어 정보가 많아지면서 점차 이런 형태의 데이터베이스로 구축되고 있는 실정이다.

[그림 2] 객체 관계형 데이터베이스(Object Relational Database)

1.1.3 객체 지향형 데이터베이스

데이터베이스 모델을 객체수준의 질의(Object-level Query)표현에 중점을 둔 데이터베이스 모델을 객체 지향형 데이터베이스라고 한다.
ObjectStore, VERSANT와 같은 데이터베이스가 이에 속하며, 현재로써는 가장 진보된 형태의 데이터베이스라고 할 수 있겠다.

[그림 3] 객체 지향형 데이터베이스(Object Oriented Database)

1.2 사례로 본 데이터베이스에 대한 기술적 요구

웹 환경에서 Database 기술에 어떤 새로운 기술적 요구가 있는지 살펴보기 전에 요즘 인터넷의 이슈중에 이슈라고 할 수 있는 인트라넷 솔루션을 구축한 한 사례를 살펴보자.




[그림 4] 인트라넷 솔루션 구성도

[그림4]는 어느 신문사에서 구축한 인트라넷 솔루션의 구성도이다.
이 인트라넷 솔루션에 대한 요구사항은 다음과 같았다,

  1. Database에 대한 클라이언트(Client)를 멀티플랫폼으로 지원할 것. (Win95, WinNT, Mac, Solaris)
  2. 여러 서버에 분산되어 있는 Database를 효율적으로 관리할 수 있도록 하는 것.
  3. 모종의 처리에 대하여 병렬적인 처리또한 지원할 것.
  4. Database에 대한 정보검색 및 정보현황 서비스의 경우 실시간으로 지원할 것.
  5. 텍스트화된 기사정보와 2D 이미지 그리고, 향후 동화상까지도 Database화하여 직접 검색 및 열람할 수 있도록 할 것.
  6. 기존의 사내 MIS에 구축되어 있는 Database와 새롭게 구축되는 Database와도 자유롭게 연동가능 할 것.
  7. 모든 Database는 하나의 서버경로를 통하여 웹과 연동이 가능할 것.
  8. 사내의 모든 처리가 웹 브라우저상에서 가동될 것.
사실 이 정도의 요구는 웬만한 규모의 회사에서는 충분히 있을만한 요구사항이다.
그런데, 문제는 지금까지의 데이터베이스 기술로 이런 솔루션을 구축하기 위한 기술적인 뒷받침으로는 매우 어려운 점이 많다는 것이다.

새로운 Database 기술에 대한 요구를 일반적인 수준으로 정리를 해 보면 다음과 같다.

  1. Database Client의 멀티플랫폼 지원.
  2. 분산된 Database 환경을 위한 트랜잭션 처리 지원.
  3. 상호 독립된 트랙잭션들의 병렬처리 지원.
  4. 실시간 정보사용을 위한 실시간 Database 접근 지원.
  5. 이기종 Database 환경을 위한 통합적인 트랜잭션 지원.
  6. 멀티미디어 정보에 대한 지원.
그렇다면, 이런 다양한 요구사항을 만족시켜 줄 수 있는 Database 기술은 무엇일까?

2. JDBC - Java Database Connectivity

2.1 개요

"Standard SQL database Access interface in Java Technology"

이 말은 JDBC를 짤막하게 한 마디로 설명한 말이다.

JDBC는 다양한 관계형 데이터베이스들을 위한 일관된 인터페이스를 제공하며, Java API에는 java.sql 이라는 패키지로 정의되어 있다.
그 내용을 보면, Database Connection, SQL Statements, Result Sets, Database Metadata, 등등을 지원하고 있으며, 각기 다른 Database를 연결하고 있는 다중 드라이버를 지원하기 위한 Driver Manager를 통하여 구현되고 있으며, Java Applet이나 Java Application에 의해 구현되거나 사용될 수 있다.
또한, 자바이외의 C/C++과 같은 언어로 구현되어 있는 Database Access Libariey들과 Native Method를 사용하여 연결할 수 있다.

2.1.1 The JDBC Driver

이것은 API, Driver Manager, Driver Module 이렇게 3-tier 구조로 되어 있다. 실제로 이 3-tier 구조는 다시 다중 구조로 다단계화될 수가 있는 데, Driver Module이 그것인데 크게 세가지의 경우로 나누어 생각해 볼 수 있다.

  1. JDBC 드라이버를 직접 사용하여 Database에 연결하고자 할 경우
  2. JDBC-ODBC Bridge를 이용하여 ODBC 드라이버를 통해 Database에 연결하고자 할 경우
  3. JDBC-ODBC Bridge없이 직접 ODBC 각각의 OpenChannel Server와 연결후 ODBC Driver Manager로 연결하고자 할 경우

2.1.2 The JDBC-ODBC Bridge Driver

이것은 한마디로 말해서, JDBC의 Method 호출을 ODBC 함수 호출로 바꿔주는 드라이버라고 볼 수 있다. 다시 말해서, 기존에 ODBC를 통해 연결되도록 구축되어 있는 시스템의 경우에 새로운 개발없이 기존의 시스템을 이용하여 새로운 솔루션이나 시스템을 웹과 같은 개방된 환경과 연동하고자 한다면, JDBC를 이용할 수가 있다는 말이다. 이 JDBC-ODBC Bridge 부분은 JavaSoft사와 InterSolv Inc. 에서 공동 개발한다.



[그림 5] JDBC와 일반 Database 연결












[그림 6] JDBC와 ODBC와의 연결





[그림 7] OpenChannel Client/Server를 이용한 연결





2.2 이용 및 구현

2.2.1 이용에 대한 시나리오

[그림 8] Applet에서의 이용 시나리오

[그림 9] Application에서의 이용 시나리오

[그림 10] 특별한 경우의 이용 시나리오



2.2.2 JDBC를 사용한 구현

Database URLs

syntax
jdbc:<subprotocol>:<subname>
jdbc:odbc:<data-source-name>[;<attribute-name>=<attribute-value>]
Examples
jdbc:odbc:fred
jdbc:dbnet://wombet:356/fred
jdbc:odbc:wombat;CacheSize=20;ExtensionCase=LOWER
jdbc:odbc:employee;UID=jbpark;PWD=fooem

Sample Program - Using SELECT
    import java.net.URL;
    import java.sql.*;

    class Select {

         public static void main(String argv[]) {
            try {
                // Create a URL specifying an ODBC data source name.
                String url = "jdbc:odbc:employee";

                // Connect to the database at that URL.
                Connection con = DriverManager.getConnection(url, "jbpark", "");

                // Excute a SELECT statement
                Statement stmt = con.createStatement();
                ResultSet rs = stmt.excuteQuery("SELECT a, b, c, d, key FROM 
                                                 Table1");

                // Step through the result rows.
                System.out.println("Got result:");
                while (rs.next()) {
                    // get the values from the current row:
                    int a = rs.getInt(1);
                    Numeric b = rs.getNumeric(2);
                    char c[] = rs.getString(3).tocharArray();
                    boolean d = rs.getBoolean(4);
                    String key = rs.getString(5);

                    // Now print out the result:
                    System.out.print("   key=" + key);
                    System.out.print("   a=" + a);
                    System.out.print("   b=" + b);
                    System.out.print("   c=");
                    for (int i = 0; i < c.length; i++) {
                        System.out.print(c[i]);
                    }
                    System.out.print("   d=" + d);
                    System.out.print("\n");
                }

                stmt.close();
                con.close();
            } catch (java.lang.Exception ex) {
                ex.printStackTrace();
            }
         }
    }



2.3 JDBC Interface Definitions

  1. java.sql.CallableStatement
  2. java.sql.Connection
  3. java.sql.DataTruncation
  4. java.sql.Date
  5. java.sql.Driver
  6. java.sql.DriverManager
  7. java.sql.DriverPropertyInfo
  8. java.sql.Numeric
  9. java.sql.PreparedStatement
  10. java.sql.ResultSet
  11. java.sql.SQLWarning
  12. java.sql.Statement
  13. java.sql.Time
  14. java.sql.Timestamp
  15. java.sql.Types

3. 결론

JDBC는 ODBC와 같은 기존의 개방형 Database 연결세트의 상위개념으로써 지원된다.
1996년안 발표될 JDK 1.1에서는 최종 버젼이 발표가 될것으로 예정되어 있다.
Java 기술의 대부분이 그런만큼 아직은 더 주목해야할 기술이다. 그러나, JDBC가 새로운 기술로 자리매김하리라는 것에 대해서는 의심하 여지가 없다. 문제는 얼마나 빨리 사용자와 개발자 모두가 요구하고 있는 수준까지 안정적으로 지원하는 가에 있다. 그러기 위해서는 JDBC 기술에 대해 관여하고 있는 모든 분야에서 온힘을 기울여야 할 것이다. 그럴 수 있기를 기대하면서, 이 글을 가름한다.



참고 사이트(References)

[Javasoft96]
The JDBC(tm) Database Access API
URL: http://splash.javasoft.com/jdbc/
[ODMG96]
Object Database Management Group
URL: http://www.odmg.org/
[Javalist96]
Whang's Java List: JDBC
URL: http://www.sicc.co.kr/~sjwhang/javalist/lang/jdbc.htm
[News]
Java News Group
URL: news://comp.lang.java