저자: 『Java Programming with Oracle SQLJ』의 저자 제이슨 프라이스, 역 김대곤
SQLJ는 자바 프로그램에서 임베디드 SQL를 사용, 데이터베이스에 접속하여 작업할 수 있도록 하는 기술이다. 독립 실행형 애플리케이션, 서블릿, JSP, EJB등 여러 형태의 자바 프로그램안에서 임베디드 SQL를 사용할 수 있다. 이 기사는 연재 기사 형식으로 전개될 "SQLJ 배우자"의 첫 번째를 장식할 컬럼으로 SQLJ를 소개하고, SQLJ을 사용할 때 필요한 요구사항 및 컴퓨터 설정에 대해 설명할 것이다. 또한 전형적인 Hello World 프로그램을 보여줄 것인데 여기서는 SQLJ 프로그램에서 데이터 베이스에 접속하는 방법을 예제 프로그램을 통하여 살펴볼 것이다.
이 기사를 쓰고 있는 필자는 오라일리에서 출간된
『Java Programming with Oracle SQLJ』의 저자이다. 이 책은 강력한 기능을 제공하는 SQLJ를 효과적으로 사용하는 방법을 제시하고 있다. 앞으로 계속될 "SQLJ를 배우자" 기사에서는 오라일리 웹사이트에서 모두 다운로드 받을 수 있는 여러 가지 SQL 스크립트, 소스코드를 비롯한 기타 파일들을 참고할 것이다. 이 자료들은
오라일리 웹사이트에서 다운 받을 수 있으며, 하나의 Zip파일 (
SQLJ_samples.zip)에 모두 포함되어 있다. 다운 받은 다음 Winzip 프로그램으로 파일을 열어볼 수 있으며, Action 메뉴에서 Extract기능을 사용하여 압축을 풀 수 있다. Zip파일은 세 개의 하위 디렉토리(소스 코드가 있는
programs, 데이터베이스 스키마를 생성할 수 있는 SQL*Plus 스크립트가 있는
sql, 두 개의 샘플 파일이 있는
sample_files)가 있다.
SQLJ 사용을 위한 요구사항
SQLJ는 translator와 Runtime 라이브러리와 같은 두 개의 요소로 구성되어 있으며 translator는 임베디드 SQL이 포함된 자바 소스 코드를 Runtime 라이브러리에 대한 호출 형태로 변환하고 변환된 자바 소스 파일을 컴파일한다. Runtime 라이브러리 호출은 실제적인 데이터베이스 작업을 수행하게 된다. SQLJ는 오라클, 썬 마이크로시스템즈, IBM, 컴팩, 인포믹스, 사이베이스 등을 포함한 대규모 기업들이 개발한 ISO, ANSI 표준이다.
SQLJ.org 웹사이트에서 SQLJ 표준의 최신 버전을 확인해 볼 수 있다.
SQLJ를 사용하기 위해서는 몇 가지 소프트웨어가 필요하다. SQLJ8i 또는 그 이상의 버전을 수행하기 위하여 설치되어야 하는 소프트웨어는 다음과 같다.
- 오라클 SQLJ translator
- 오라클 JDBC 드라이버
- 썬 마이크로시스템즈의 JDK
- Jserver가 실행되는 오라클 데이터베이스 (8i 또는 상위버전)
- 오라클 Net8 또는 상위버전
SQL translator, JDBC 드라이버, JDK는 SQLJ 프로그램 개발에 사용할 컴퓨터에 설치해야 한다. 오라클 데이터베이스와 Net8은 사용 가능한 네트워크 상에 있어 접속할 수만 있으면 충분하다. 오라클 소프트웨어는 오라클사의
Technet 웹사이트에서 다운로드 받을 수 있으며, JDK는 썬의
자바 웹사이트에서 다운로드 할 수 있다. 개발용 컴퓨터에 오라클 데이터베이스를 설치할 경우에는 별도의 설치과정 없이 SQLJ Translator와 JDBC를 함께 설치할 수 있다.
위에서 살펴본 소프트웨어 버전은 중요한 요소이다. 특정 SQLJ 버전은 특정 버전의 JDK 및 오라클 제품 위에서만 실행할 수 있다. 따라서 소프트웨어 구성을 올바르게 해주는 것뿐만 아니라 각 소프트웨어 버전을 올바르게 구성하는 것도 중요하다. SQLJ 8.1.6 및 8.1.7 버전은 JDK 1.1.x와 JDK1.2.x버전과 호환되며, SQLJ9i는 JDK1.2.x 상위버전과 호환된다. 필자가 사용한 JDK의 버전은 1.2.2이다. 다른 버전의 SQLJ 프로그램을 사용하고자 한다면 오라클의 Release Note를 보고 더 자세한 사항을 참조하기 바란다.
이 기사에서 제시된 모든 예제는 오라클 JDBC 드라이버 8.1.6과 오라클 SQLJ버전 8.1.6를 사용하였다.
앞에서 제시한 필수적인 소프트웨어 요소 외에, 오라클 Jdeveloper는 자바 프로그램을 개발할 때 유용하다. Jdeveloper는 윈도우NT에서 실행되며, 통합 개발 환경을 제공한다. 그러나 Jdeveloper는 SQLJ프로그램을 사용하는데 필수적인 요소는 아니다. 오라클 소프트웨어에서 제공하는 실행명령어를 통해 SQLJ프로그램을 실행할 수 있으며, 이러한 명령어는 운영체제와 무관하게 동일한 문법과 옵션을 제공한다.
컴퓨터 환경 설정
여기에서는 SQLJ 프로그램 개발과 실행을 위한 컴퓨터 환경설정에 대해 살펴볼 것이다. 세 개의 환경변수인
ORACLE_HOME,
PATH,
CLASSPATH가 설정되어야 한다.
ORACLE_HOME은 오라클 소프트웨어가 설치된 디렉토리를 나타낸다.
PATH 환경변수는 각 실행 명령어들이 있는 디렉토리를 포함해야 한다.
CLASSPATH 환경변수는 자바 클래스 라이브러리와 여러 자바 유틸리티에서 사용되는 디렉토리를 포함해야 한다.
ORACLE_HOME 환경 변수
시스템 설정 대화창에서 시스템 환경변수에
ORACLE_HOME를 추가할 수 있다.
ORACLE_HOME 환경변수는 오라클 소프트웨어가 설치된 디렉토리로 지정한다. 많은 오라클 애플리케이션과 유틸리티들은 오라클 소프트웨어 설치 디렉토리를 지시하는
ORACLE_HOME 환경변수를 참조한다.
원도우NT 4.0에서
ORACLE_HOME 환경변수는 제어판의 시스템 설정 대화창을 사용하여 지정할 수 있다. [그림 1]은
ORACLE_HOME 환경변수가 설정된 시스템 설정 대화창을 보여주고 있다. (윈도우 2000도 유사한 사용자 인터페이스를 가지고 있다.
[그림 1] 윈도우 NT 4.0에 ORACLE_HOME 환경변수 설정하기
리눅스 배시 셸에서
ORACLE_HOME 환경변수를 설정하고자 한다면
.bash_profile 파일에 아래와 같이 라인 두 개를 추가한다.
ORACLE_HOME=installation_directory
Export ORACLE_HOME
이 때
installation_directory은 오라클 소프트웨어가 설치된 디렉토리를 나타낸다.
PATH 환경변수
PATH 환경변수에는 아래와 같은 두 개의 디렉토리가 추가되어야 한다.
- JDK_HOME/bin
JDK_HOME은 썬의 JDK가 설치된 디렉토리를 나타낸다. 이 디렉토리에는 자바 실행명령어가 들어 있다.
- ORACLE_HOME/bin
ORACLE_HOME은 오라클 소프트웨어가 설치된 디렉토리를 나타낸다. 이 디렉토리는 오라클 실행명령어가 들어 있다.
윈도우 NT4.0에서 PATH 환경변수를 설정하는 방법은 제어판의 시스템 환경 대화창을 이용하는 것이다. 리눅스 배시 셸에서 PATH 환경변수의 설정은
.bash_profile에 다음과 같이 두 개의 라인을 추가하면 된다.
PATH=$PATH:/usr/local/jdk1.2.2/bin:$ORACLE_HOME/bin
Export PATH
CLASSPATH 환경변수
오라클 소프트웨어를 설치하면
ORACLE_HOME 디렉토리 아래에
jdbc 디렉토리가 만들어진다. 이 디렉토리에는 샘플 프로그램, 문서자료, 오라클 JDBC 라이브러리가 들어 있다. JDBC라이브러리는 zip파일 안에 있으며, JDBC 라이브러리가 들어 있는 zip파일은
CLASSPATH에 등록되어 있어야 한다.
사용하는 JDK의 버전이 1.2.x 이상이면
ORACLE_HOME\jdbc\lib\classes12.zip을
CLASSPATH에 등록하여야 하며, 1.1.x 버전을 사용한다면
ORACLE_HOME\jdbc\lib\classes111.zip을
CLASSPATH에 등록해야 한다.
JDBC 디렉토리 뿐만 아니라
ORACLE_HOME 디렉토리 아래에는
sqlj 디렉토리가 만들어진다. 이 디렉토리에는 샘플 프로그램, 문서자료, 오라클 SQLJ 라이브러리가 들어 있다. SQLJ 프로그램을 사용하기 위해서는
CLASSPATH에 ORACLE_HOME\sqlj\lib\translator.zip 파일을 등록해야 한다.
ORACLE_HOME\sqlj\lib\translator.zip
추가적으로 SQLJ Runtime 파일을
CLASSPATH에 등록해야 한다. 등록해야 하는 Runtime 파일은 사용하는 JDK 버전에 따라 결정된다. JDK1.1.x 버전을 사용한다면
ORACLE_HOME\sqlj\lib\runtime11.zip을, JDK1.2.x 버전을 사용한다면
ORACLE_HOME\sqlj\lib\runtime12.zip을, JDK1.2.x Enterprise Edition를 사용한다면
ORACLE_HOME\sqlj\lib\runtime12ee.zip를 등록해야 한다. 모든 JDK 버전과 호환되는
ORACLE_HOME\sqlj\lib\runtime.zip 파일이 있지만 이 파일을 사용하면 JDBC 2.0타입 사용시 ISO 표준과 호환되지 않는다.
또한 점(.)으로 표시되는 현재 작업 디렉토리를
CLASSPATH에 추가해야 한다.
윈도우NT 4.0에서는 시스템 설정 대화창을 통해
CLASSPATH를 설정할 수 있다. 리눅스 배시 셸에서
CLASSPATH를 설정하려면
.bash_profile 파일에 아래와 같은 내용을 추가하면 된다.
CLASSPATH=$CLASSPATH:.:$ORACLE_HOME/sqlj/lib/translator.zip:
$ORACLE_HOME/sqlj/lib/runtime.zip:$ORACLE_HOME/jdbc/lib/classes12.zip
export CLASSPATH
SQLJ를 위한 "Hello World" 프로그램
대부분의 프로그램 관련 서적에서 "Hello World" 프로그램을 통해 새로운 언어를 소개한다. 전형적인 "Hello World" 프로그램은 화면에 "Hello World"를 출력하는 단순한 목적을 가지고 있다. 필자가 작성할 "Hello World" 프로그램은 SQLJ 문장을 사용하여 데이터베이스에 접속하고 현재 날짜를 조회하여 그것을 화면에 출력하는 작업을 수행할 것이다. 먼저 이러한 작업을 수행하는 "Hello World" 프로그램 소스를 살펴 본 후 컴파일하고 실행하는 방법을 살펴볼 것이다. SQLJ 프로그램은 파일 확장자로
.sqlj를 사용하도록 정의되어 있다. 따라서 "Hello World" 프로그램의 이름은
HelloWorld.sqlj가 될 것이다.
[예제 1-1]의
HelloWorld.sqlj은 다음과 같은 작업을 수행할 것이다.
- 데이터베이스에 연결한다
- 데이터베이스에서 현재 날짜를 조회한다
- 이전 단계에서 얻은 현재 날짜가 포함된 메시지를 화면에 출력한다
- 데이터베이스 연결을 종료한다
예제 1-1. HelloWorld.sqlj
/*
The program HelloWorld.sqlj illustrates how to
connect to a database, and display the words
"Hello World" along with the current date.
*/
// import required packages
import java.sql.Date;
import java.sql.SQLException;
import oracle.sqlj.runtime.Oracle;
public class HelloWorld {
public static void main(String [] args) {
java.sql.Date current_date;
try {
// connect to the database
Oracle.connect(
"jdbc:oracle:thin:@localhost:1521:orcl",
"scott",
"tiger"
);
// get the current date from the database
#sql { SELECT sysdate INTO :current_date FROM dual };
// display message
System.out.println("Hello World! The current date is " +
current_date);
} catch ( SQLException e ) {
System.err.println("SQLException " + e);
} finally {
try {
// disconnect from the database
Oracle.close();
} catch ( SQLException e ) {
System.err.println("SQLException " + e);
}
}
} // end of main()
}
HelloWorld.sqlj 컴파일 및 실행
HelloWorld.sqlj 파일은 SQLJ 프로그램 문장 안에 임베디드 SQL를 포함하고 있다. 프로그램 소스를 작성한 후 다음 작업은
HelloWorld.sqlj 파일에 포함된 SQL문장을 SQLJ Runtime 라이브러리 호출로 변환하는 것이다. SQLJ Runtime 라이브러리는 JDBC를 사용하여 실제적으로 데이터베이스 작업을 수행한다. 이러한 변환은
SQLJ 실행명령어로 수행되며, 이 명령어는
.sqlj 파일을 자바 파일로 변환하고, 자바 컴파일러를 사용하여 변환한
.java 파일을
.class 파일로 컴파일한다.
아래 문장은
HelloWorld.sql 파일을 변환하고 컴파일하기 위한 명령어이다.
sqlj HelloWorld.sqlj
sqlj 라인 명령어는
HelloWorld.sqlj 파일을
HelloWorld.java 파일로 변환하고,
HelloWorld.java로
HelloWorld.class를 생성하도록 자바 컴파일러를 호출한다. 최종적으로 생성된
HelloWorld.class는 자바 실행명령어인
java로 실행할 수 있다.
java HelloWorld
프로그램 실행 결과는 아래 줄과 같아야 한다(날짜는 다르겠지만).
Hello World! The current data is 2001-11-10
이것은 첫번째 SQLJ 프로그램이 성공적으로 컴파일되어 실행되었음을 알려준다. 프로그램에서 데이터베이스 접속에 실패했다면 데이터베이스 URL이 올바른지 확인해보면 된다.
필자는 "SQLJ를 배우자"의 첫번째 컬럼이 독자들에게 유익하고 재미있는 기사가 되기를 바란다. 다음 기사에서는 SQLJ를 사용하여 자바 프로그램 안에서 데이터베이스에 접속하고, 임베디드 SQL문장을 수행하는 방법에 대해 살펴볼 것이다.
Jason Price는 현재 오라클 제품 관리자로 재직하고 있으며, 데이터베이스 서버, 애플리케이션 서버, 몇몇 CRM 애플리케이션을 포함한 많은 오라클 제품 개발에 참여하고 있다.