JDBC를 이용한 인터넷 DB연결

성정수

경기도 용인시 구성면 마북리 산1-1현대정보기술 기술사업본부 요소기술팀(인트라넷팀)

E-mail : sjs@hyundai.net

Abstract:

인터넷에서 데이타베이스의 접속이 점차 증가하고 있다. 각 기업체에서 사용하고 있는 그룹웨어의 웹 버젼화, 각종 검색 데이타베이스, 전자 상거래 등등 인터넷의 사용이 증가함에 따라 데이타베이스와의 연동은 필수요소가 되었다. 웹을 통한 서비스 또한 확대되면서 다양한 사용자들의 요구가 증대하고 있다. 다양한 '실험 정신의 집합체'인 인터넷 역시 모든 결과는 자료로서 데이타베이스에 저장된다. 그러므로 백 앤드(back-end)의 데이타베이스와 연동하는 기술로서 JDBC는 중요한 의미를 갖는 것이다.현재 Java는 무서운 속도로 기존의 질서에 도전을 하고 있다. 불과 1년여만에 사용자가 급증하고 있고 각 분야의 요소 기술에 많은 영향을 끼치고 있다. 분산 컴퓨팅 환경이 업계의 표준을 이끄는 현 시점에서 자바는 이에 대응하는 막강한 잠재력을 가지고 있다. JDBC역시 자바의 분산 컴퓨팅 환경을 지원하는 한 부분으로 인식할수 있을 것이다. JDBC를 살펴보고 , 웹에서의 다양한 DB연동 아키텍쳐를 비교해 보며 자신의 시스템에 최적인 솔루션을 찾는데 조금이나마 보탬이 되었으면 한다.

Keywords:

JDBC/ODBC Bridge , trusted applet , untrusted applet , tier , driverDBMS , CGI , Native-(something) , All-(something) , transaction

1. JDBC(Java Database Connectivity)란?

인터넷의 확장된 구성으로 인트라넷(Intranet)이나 익스트라넷(extranet)등을 거론하는데 이 경우 주된 관심사 중의 하나가 바로 데이터베이스와의 접속이다. CGI(common gateway interface)나 스크립트 언어의 이용, 웹 서버에서 제공하는 API의 이용, DBMS벤더에서 직접 제공하는 웹 버전의 API의 이용 등등 다양하다. 인터넷의 표준이 없듯이 자신의 확장 솔루션에도 특정적인 표준이 없다. JDBC역시 웹에서 실행되는 애플릿으로 하여금 데이터베이스를 이용할 수 있도록 제작된 것이다. 그 정의는 다음과 같다. '자바를 이용한 데이터베이스 접속과 SQL 문장의 실행, 그리고 실행 결과 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규약' 한 마디로 자바를 분산 컴퓨팅 환경에 적합한 데이터베이스 개발 언어로 탈바꿈하도록 하는 API로써, 97년 5월 현재 JDBC 1.1 버전이 공개된 상태이다. 순수 자바 언어로 개발되었기 때문에 바이트 코드(.class 확장자를 갖는다)로 제공되며, 유닉스나 윈도우 95/NT용이 따로 있지 않고 정해진 디렉토리를 만들어 적당히환경변수(CLASSPATH)만 셋팅해 주면 바로 사용이 가능하다. 물론 JDBC API를 이용하려면 먼저 드라이버가 선택되어 있어야 한다.순수한 자바 클래스 형태로 제공되는 JDBC API는 ODBC나 기존의 데이터베이스를 액세스하는 인터페이스보다 상위 레벨을 구현할 목적으로 고안되었다. 또한 브라우저에서 보안에 위배되지 않는 조건에서 다양한 데이터베이스 접근 방법을 제공함으로써 기존의 수동적인 데이터베이스 접근을 벗어나 보다 더 능동적인 데이터베이스의 이용이 가능하게 되었다.

1.1 JDBC 드라이버 (Javasoft 기준에 의거함)

* type은 '5. JDBC 드라이버 타입(1)' 을 참조할것

Vendor

Type

DBMSs supported

Agave Software Design

3

Oracle, Sybase, Informix, others via ODBC

Asgard Software

3

Unisys A series DMSII database

Borland

4

InterBase 4.0

Caribou Lake Software

3

Ingres

Connect Software

4

Sybase, MS SQL Server

DataRamp

3

Several dozen through ODBC drivers.*

Ensodex, Inc.

3

Several through ODBC.*

IBM

2/3

IBM DB2 Version 2

GWE Technologies

4

mysql

IDS Software

3

Oracle, Sybase, MS SQL Server, MS Access, Informix, Watcom, and others via ODBC

I-Kinetics, Inc.

3

Oracle, Informix, Sybase, and others via ODBC

Imaginary

4

mSQL

InterSoft

3

Essentia

Intersolv

2

Oracle and Sybase

Intersolv

3

DB2, Ingres, Informix, Oracle, Microsoft SQL Server, Sybase 10/11

JavaSoft

1

Several dozen through ODBC drivers.*

NetAway

3

Oracle, Informix, Sybase, MS SQL Server, DB2, others via ODBC

OpenLink

3

Oracle, Informix, Sybase, MS SQL Server, CA-Ingres, Progress,

Unify, and Postgress95

Oracle Corporation

2

Oracle

SAS

4

SAS, and via SAS/ACCESS, Oracle, Informix, Ingres, and ADABAS

SCO

3

Informix, Oracle, Ingres, Sybase, Interbase

StormCloud Development

3

Any DBMS that is accessible via ODBC

Sybase, Inc

3/4

Sybase SQL Server, SQL Anywhere, Sybase IQ, Replication Server and more than 25 enterprise and legacy datase servers via Sybase OmniCONNECT

Symantec

3

Oracle, Sybase, MS SQL Server, MS Access, Watcom and others via ODBC

Trifox, Inc.

3

ADABAS, DB2, Informix, Ingres, Oracle, Rdb, SQL Server, Sybase, and legacy systems via GENESIS.

Visigenic

3

Several dozen through ODBC drivers.*

WebLogic

2

Oracle, Sybase, MS SQL Server

WebLogic

3

Several dozen through ODBC drivers.*

XDB Systems, Inc.

1/3

Many databases through ODBC.*

Yard Software GmbH

4

YARD-SQL Database

2. 특 징

첫째, JDBC는 통합적인 SQL 데이터베이스를 이용할 수 있는 프레임워크로서 DBMS에 비종속적인 자바 애플리케이션을 구현하도록 고안되었다. 즉 JDBC와 연동 가능한 드라이버와 모듈을 번갈아 사용하면서 데이터베이스의 데이터 소스를 액세스할 수 있는데, 이 기술은 DLL 형태의 드라이버와 순수 자바로 만든 드라이버를 모두 지원한다.

둘째, JDBC는 SQL CLI(Call Level Interface)를 지원하기 위한 X/Open 정의에 기반을 두고 있다. 이는 기존의 ODBC 메카니즘을 연상하면 쉽게 이해할 수 있는데, JDBC는 ODBC보다 상위 레벨의 API를 지원한다. 다시 말해 JDBC는 여러 데이터 소스를 접근할 수 있는 단일 표준화(single standard-based)에 기반을 둔 인터페이스를 제공한다.

셋째, JDBC는 SQL을 사용해 데이터를 액세스할 수 있는 함수 라이브러리를 제공한다. 그리고 API와의 인터페이스를 위한 드라이버는 ANSI SQL-2 엔트리 레벨 이상을 지원할 수 있어야 한다. JDBC는 SQL 스트링을 DBMS에게 전달할 수 있는 수단을 제공하고 더불어, 실행될 SQL 스트링에 대한 올바른 표현에 대해 컴파일 단계에서 기본적인 검사가 이뤄 진다. 또한 각각의 데이터베이스에 종속적인 특정 함수에 대해서도 개발자가 이용할 수 있도록 다양한 통로를 제공한다.

3. JDBC의 구성

JDBC(Java DataBase Connectivity)는 ODBC(Open Database Connectivity)와 유사한 구조를 갖고 있으면서 ODBC를 포함하는 상위 레벨(highlevel)로 설계되었다. JDBC API와 이를 구동하는 드라이버로 구성되어 있고 어떠한 드라이버를 이용하느냐에 의해 시스템의 구성이 달라진다. JavaSoft에서 JDBC API를 발표하고 이를 지원하는 드라이버는 써드 파티(third party)에 분담함으로써 많은 벤더의 참여와 공동 개발의 효과를 기대하고 있다.

4. JDBC 드라이버 타입(1)

4.1 JDBC/ODBC BridgeJDBC function call

JDBC/ODBC BridgeJDBC function call을 ODBC function call로 바꾼다. 개발자가 작성한 application이나 applet을 현재 ODBC와 연결된 많은 솔루션으로 전환하고자 할 경우 용이하다.

4.1.1 장 점

JDBC를 이용하는 미들웨어 제품 지원이 미흡한데 기존의 시스템을 유지하면서 바로 개발가능하다. 다시말해 기존의 이미 개발된 시스템의 확장에 용이하다.

4.1.2 제약 사항

JDBC/ODBC Bridge는 C++로 작성된 DLL이나 shared library에 의해 구현되므로 런타임시 네트워 크를 통해 다운로드 되어질 수 없다. 모든 클라이언트는 JDBC/ODBC Bridge와 ODBC 드라이버를 가지고 있어야 하고 실행하고자 하는 application과 applet도 클라이언트에 있어야 하므로 웹 브라우져를 통해 구현할 수 없다. 주로 기존의 환경을 유지하며 자바 애플리케이션으로 개발하고자 할 경우 유리하다.

4.2 Native-API, Partly-Java DriversJDBC call

Native-API, Partly-Java DriversJDBC call을 특정 데이터베이스에서 사용하는 클라이언트 API로 바꾼다. 이 타입의 드라이버는 SQL*Net, I-Connect, OpenClient등의 프로토콜을 이용하고, DLL이나 shared library를 통하여 이러한 프로토콜과 인터페이스 한다. 애플릿의 수행에 필요한 파일들이 다운로드 될 수 없고, 아직까지 애플릿이 갖는 보안 제약 때문에 브라우져에서 수행시 보안위배(security violation)를 일으킨다.

4.2.1 장 점

기존의 DBMS 벤더에서 제공하는 미들웨어를 그대로 이용할 수 있다.

4.2.2 제약 사항

네트워크 클라이언트 모듈인 SQL*Net, I-Connect, OpenClient 역시 C나 C++로 작성된 DLL 혹은 shared library로 구성되어 있다. 네트워크를 통해 다운로드 되어질수 없으므로 여전히 클라이언트는 필요한 모든 구성요소를 갖추고 있어야 한다. 이 드라이버 역시 브라우져에서 이용할 수 없다. ( 참 고 : Native-API, Partly-Java 드라이버는 '로컬 시스템의 자원을 접근할 수 없다'는 애플릿의 규약에 제약을 받는다. 그렇지만 이를 극복하기 위한 일시 방편으로 브라우져에서 제공하는 Plug & Play기능을 이용하여 웹에서 이용할 수 있도록 만든 드라이버도 있다.)

4.3 Net-Protocol All-Java Drivers

Net-Protocol All-Java Drivers, 이 드라이버는 대개 서버 어플리케이션이 존재한다. 다운로드된 애플릿과 서버 애플리케이션은 DBMS와 무관한 프로토콜로 인터페이스하고 다시 서버 애플리케이션에서 DBMS를 액세스하기 위해 DBMS 전용 프로토콜로 변환한다. 이 솔루션에서 제공되는 드라이버는 주로 통합구성된 한 개의 드라이버를 이용하는데 이 드라이버를 이용하면 여러개의 DBMS를 동시에 사용할 수 있다. 다운로드된 애플릿은 서버에 있는 애플리케이션과 인터페이스하며 이 서버는 다시 클라이언트 애플릿과 DBMS사이의 중계역할을 수행하게 된다. 이것은 현재 애플릿이 갖는 보안 제약사항을 최소화시키며 확장성이 가장 우수하다.

4.3.1 장 점

위 드라이버는 아주 유연한 솔루션을 제공한다. 모두 순수 자바로 구성된 드라이버이므로 네트워크를 통해 다운로드될 수 있고, 서버에 있는 어플리케이션은 원거리 지역(서버 머쉰 외부)에 있는 DBMS와의 연결을 가능하게 해준다. 애플릿이 갖는 보안 제약사항을 그대로 적용한 구성이므로 안전한 애플릿(trusted applet)과 불안전한 애플릿(untrusted applet) 모두를 지원한다.

4.3.2 제약 사항

보안(security)사항에 많은 유연성을 제공하는 구성이므로 동시에 보안의 헛점을 노출시킬 수 있는 위험요소를 내포하고 있다. 방화벽을 이용할 경우 인터넷상에서 정상적인 작동을 하지 않을 수 있고, 만약 불안전한 애플릿(untrusted applet)일 경우 서버 애플리케이션과 DBMS는 같은 머쉰에 있어야 한다. 이러한 모든 제약사항이 이 제품을 제공하는 벤더에서 어떻게 설계했느냐에 의해 좌우되는데 여러 기능을 통제하는 수단이 많은 만큼 관리(administeration)가 다른 드라이버에 비해 비교적 힘들다.

* 참 고 : trusted, untrusted Applet

1) Trusted Applet :

안전한 소스라고 인증된 프로그램으로 주로 로컬 시스템에 미리 인스톨 되어진다. 로컬 하드 디스크에 있는 디렉토리에 저장된 형태로 실행시 CLASSPATH를 참조하여 수행된다. 아직까지 보안 문제로 로컬 하드 디스크에 저장되어진 애플릿만을 안전한 애플릿(trusted applet)이라고 하는데 앞으로 발표될 넷스케이프 브라우져에서는 ACL(Access Contril List)을 두어 어느 정도 사용자에게 그 권한을 이양하게 될것이다. 한마디로 인터넷을 통해 다운로드 되지 않은 사용자 로컬 시스템에 있는 애플릿을 의미한다. 브라우져의 'Open File'메뉴를 이용하여 사용한 경우이다.

2) Untrusted Applet :

인증되지 않은 지역으로 부터 다운로드된 애플릿으로 잠재적으로 위험요소를 내포하고 있다고 판단되는 소스이다. 현재 인터넷을 통해 다운로드된 애플릿은 브라우져의 차단으로 로컬시스템의 어떠한 자원도 핸들링할 수 없다. 이러한 부분은 넷스케이프와 JavaSoft가 아직 보안에 대한 권한 정의를 따로 결정하기 때문에 발생한다. 앞으로 브라우져에서 부분적으로 지원하게 되면 로컬 시스템에 저장하는 기능이 가능해질 것이다. 현재 인터넷을 건너온 불안전한 애플릿(untrusted applet)은 브라우져 내부에서만 수행될 뿐 로컬 시스템과의 인터페이스는 강력히 통제된다. 이러한 기능은 인터프리터에 있는 Bytecode Verifier가 담당하는데 아직까지 불안전한 애플릿은 오직 다운로드된 곳의 시스템과 연결가능하다.

Native-Protocol All-Java Drivers, 이 드라이버는 DBMS와 직접 인터페이스 하므로 클라이언트에서 요구한 JDBC call을 바로 DBMS가 사용하는 프로토콜로 전환한다. 주로 DBMS 클라이언트용 네트워크 모듈( SQL*Net, I-Connect 또는 OpenClient)을 순수 자바 프로그램으로 대체한 형태이다. 2-tier구조로 이루어졌기 때문에 여러개의 DBMS를 이용할 경우 각각의 해당 드라이버를 동시에 적재(load)하면 된다.

4.3.3 장 점

기존의 DBMS에서 사용하던 방식을 그대로 순수 자바로 재구현하여 사용할수 있다. 또한 모든 미들웨어 성격의 모듈들이 자바로 구현되었기 □문에 네트워크를 통해 이동되어 질 수 있다. 다시 말해 기존의 ODBC 클라이언트용 네트워크 모듈없이 서버에서 다운로드 받아 실행 할수 있다는 것이다.

4.3.4 제약 사항

이 드라이버의 최선두 공급자는 DBMS 벤더이다. 그러므로 써드 파트의 개발은 DBMS 벤더에 종속되어 진다. 쉽게 말해, DBMS 벤더에서 서버쪽의 네트워크 모듈을 고칠 경우 써드 파트 역시 해당 부분의 모듈을 고쳐야 하는 것이다. 기존의 CS(client-server)환경에서 이용되었던 네트워크 모듈을 이용하는 경우이므로 인터넷의 이용을 고려하지 않은 상태이다. 그러므로 프락시(proxy)나 방화벽을 통과할 경우 많은 문제가 발생하고, 시스템 구성시 옵션에 많은 제약이 뒤따른다.

위의 구분은 Sunsoft와 협력업체인 Intersolv의 정의를 따른 것이다. 그렇지만 JDBC가 버전 업(version up)되고 기타 드라이버 제공업체들이 개발을 추진해오면서 계속 위의 구분에 변형을 추가하고 있으므로 보다 포괄적인 방식으로 구분해 보고자 한다.

5. JDBC 드라이버 타입(2)

5.1 2-tierNative-Protocol All-Java

클라이언트로 다운로드된 애플릿이 DBMS에 직접 접속하는 방식으로 기존의 비주얼 툴에서 이용되었던 방식과 유사하다. 다만 실행 프로그램이 서버에 위치하여 실행시 클라이언트로 다운로드 되어 실행된다는 점이 다르다. 하나의 애플릿으로 여러 DBMS를 이용하려고 할 경우 각각의 DBMS에 해당하는 드라이버를 모두 적재하는 방식으로 구현한다.

5.2 3-tier Net-Protocol All-Java

보통 드라이버는 다수의 드라이버를 하나로 묶어 놓은 통합된 형태로 존재하고 서버에는 자바 서버 애플리케이션이 실행된다. 보통 이 서버를 경유하여 DBMS를 액세스하게 되는데 바로 이 서버의 존재 유무가 multi-tier의 구성을 가능하게 한다. 보통 미들웨어에서 거론되는 tier개념과 다른 것이, 미들웨어에서는 서버의 역할에 의해 tier가 분리되는 데 JDBC의 경우 몇단계의 서버를 거치는가에 의해 결정된다. 클라이언트 애플릿과 서버는 여러 DB를 액세스하기 위한 통합형 드라이버를 지원할 수 있는 프로토콜을 이용하고 서버에서 DBMS를 액세스할 때 비로소 DBMS용 전용 프로토콜로 전환된다. 클라이언트와 서버 그리고 서버와 DBMS는 각각 다른 프로토콜을 이용한다. 위의 2-tier구조에 비해 유연한 시스템 구성이 가능한데 DBMS와 웹 서버가 같은 머쉰에 위치하지 않아도 된다.

6. 웹과 JDBC

1) DB와의 연결 유지(connection oriented)

2) Portable Architecture구현(DB를 액세스 하기 위한 클라이언트용 프로그램이 필요 없다.)

3) 인터넷 상에서의 진정한 DB연결.(능동적인 서비스, transaction 처리 가능)

7. 결 론

자바의 모든 API는 변형을 거듭하며 보완되고 있지만 반면에 브라우져나 기타 써드 파티에서 제공되는 여러 애플리케이션들과 버전이 서로 맞지 않아 커다란 불편을 주고 있는 실정이다. JDK1.1에는 JDBC와 Java Beans가 추가되었지만 이를 지원하는 브라우져는 여전히 JDK1.0.2를 지원하고 있다. 이러한 점이 현재의 사용자를 당혹하게 하는 커다란 요인이기는 하지만, 개발 단계에서 거치는 일련의 과정일 뿐 보기 좋은 그림의 떡이라고 단정하기는 이르다. 그리고 현단계에서 자바를 실험버전이라고만 생각하기 보다는 적당한 업무에 적용시킬 경우 만족할만한 성능을 얻을 수 있다는 것이 사실이다.갈수록 자바와 라이센스를 체결하는 협력업체가 늘어가고 있다. 또한 이를 지원하는 구체적 계획과 결과물이 서서히 윤곽을 드러내고 있다. JDBC역시 인터넷에서의 능동적인 DB접속을 가능하게 하며 기존의 CS환경을 그대로 웹으로 전환시킬 수 있게 하였다. 현재 상용화된 드라이버만 해도 수십종에 이르는데 기존의 스크립트나 CGI에 비해, 성능/보안 등의 측면에서 향상된 기능을 제공한다. 많은 어플리케이션과 시스템이 웹으로 이동하고 있는 현 시점에서 앞으로 JDBC는 보다 더 다양한 사용자의 요구를 충족시켜줄 수 있으리라 본다.

참고 자료

1. JDBC : A Java SQL API (JavaSoft)

2. Java Security by Joseph A. Bank

3. Java Security : From Hotjava to Netscape and Beyond* by Drew Dean,

Edward W. Felten, Dan S. Wallach

4. http://www.sico.kr/~sjhwang/javalist/lang/jdbc.html

5. http://www.weblogic.com

6. http://splash.javasoft.com/jdbc

7. http://www.intersolv.com/programs/sweet_white.html

8. The java Programming Language by Ken Arnold, James Gosling