본문 바로가기

Development/Tools

넷빈즈netbeans 와 iBATIS

JDBC 작업의 악몽이나 공포가 있다면 iBATIS SQL매핑 라이브러리를 한번 사용해보라는 말이 거짓말은 아닙니다. iBATIS는 데이터베이스 관계지향 매핑 프레임워크는 아니고... 사용하는 법 자체도 그저 라이브러리를 추가하는 정도의 수고만 있을 뿐이지요.

나의사랑 너의사랑 넷빈즈를 통해 iBATIS를 사용하는 법을 알아봅시다. (저는 자바IDE를 이클립스가 아닌 넷빈즈로 시작한 탓인지 이클립스보다 넷빈즈가 여러모로 편하더군요. 뭔가 좀더 인티그레이티드한 환경이 맘에 들고 이클립스의 방대함과 그 구조는 적응하기가 좀 어렵더라구요. 넷빈즈 만세)

우선 관련 라이브러리를 다운로드 합니다. iBATIS 메뉴얼에서 권고하는 방법은 공유폴더에 넣지 않는 방법을 사용하라고 하더라구요. 이말은 즉 톰켓의 공유폴더 같은 곳에 넣지 말라는 말입니다. 넷빈즈를 사용하면 위 폴더들을 제외한 어느 곳에 두어도 쉽게 클래스패스를 링크할수 있기 때문에 어렵지 않은 방법으로 iBATIS라이브러리를 임포트 할수 있죠.

작업을 함에 있어 중요한 점을 살펴보겠습니다.
  • XML파일의 경로 관련 문제. 컴파일시 배포되는 XML 파일의 위치에 따라 리소스파일을 적어주어야함
  • JDBC 드라이버 작동 확인
  • iBATIS 라이브러리 임포트

첫번째를 제외하곤 크게 어려운 문제가 아닙니다. 작업 순서를 한번 정리해볼까요?

  1. 넷빈즈 프로젝트 생성
  2. JDBC 라이브러리 등록 및 임포트
  3. JDBC 작동 확인
  4. iBATIS 라이브러리 임포트
  5. 소스 코드 작성
  6. XML 코드 작성
  7. XML 코드 컴파일 포함 경로 추가
  8. 코드 런~

이제 그림으로 한번 알아보아요.
넷빈즈 버전은 현재 최신버전인 6.7.1 버전을 사용합니다. 개인적으로 6.5 버전의 훌륭함이 인상 깊었구요. 또한 6.8 버전의 신기능이 기대됩니다. 6.8 에서 SQL 작성시 인텔리센스를 지원하게 되었습니다. 올해 11월에는 릴리즈 될 예정이니 얼마 안남았네요. 그땐 6.8 버전으로 갈아타게 되겠군요.

우선 프로젝트를 HELLO 라는 이름으로 생성합니다.

위 화면은 최종 완성된 프로젝트라 여러가지가 보이지만 우선 화살표 부분을 중점적으로 보시면 이해하시기 편할 겁니다.
프로젝트를 생성할 때 나오는 다음 화면들을 쭉 무시하고 (JDBC 라이브러리나 iBATIS 라이브러리가 등록되어 있지 않다고 가정하고 진행하겠습니다.) 프로젝트를 생성 완료합니다.

자 이제 iBATIS 라이브러리 등록하는 법을 알아보겠습니다. 그리고 JDBC 라이브러리로 MS SQL 드라이버를 사용하겠습니다. MS 사이트에서 JDBC 드라이버를 다운로드 하고 특정 경로에 설치 또는 풀어둡니다. 마찬가지로 iBATIS 관련 파일도 특정폴더에 풀어두세요.


프로젝트 프로퍼티 창입니다. 라이브러리 카테고리를 선택하고 ADD Library ... 버튼을 선택하여 Creat 버튼을 클릭합니다.


이미 등록된 많은 라이브러리들이 있지만 우리가 사용할 iBATIS 는 없습니다. 아래 화면처럼 라이브러리 이름과 관련 JAR 파일을 등록하고 소스파일과 도큐멘트 파일이 있는 곳을 지정해줍니다.


글로벌 라이브러리로 등록했기 때문에 다른 프로젝트에서도 쉽게 넷빈즈 등록 라이브러리로 사용할 수 있습니다. 위의 위에 그림에 이제 iBATIS 라는 라이브러리가 등록된 것을 확인할 수 있습니다.


ADD LIBRARY 버튼을 선택하여 현재 프로젝트에 라이브러리로 등록합니다.

JDBC 드라이버는 라이브러리로 등록하지 않고 JAR파일을 임포트 하는 방법으로 사용하도록 하겠습니다.
이 방법은 JAR 파일만 제공되고 관련 도큐멘트나 소스파일이 없이 그저 일회성으로 사용될 만한 또는 프로젝트마다 달라지는 또는 개발자 마음대로 ... 아무튼 그렇습니다.


하단에 BUILD PROJECT ON CLASSPATH 를 체크해주셔야 프로젝트 빌드 후 러닝타임때 에러가 발생하지 않습니다.

데이터베이스 접속 상태를 확인해 봅니다.
넷빈즈에서 할 수 있습니다.


서비스 탭을 보면 데이터베이스 라는 트리가 있습니다. 열어보면 기본적인 아파치 더비와 기본 등록된 드라이버가 있습니다.


드라이버 트리를 선택하고 오른 버튼을 클릭하면 새로운 드라이버를 선언할 수 있습니다.


ADD 버튼을 통해 해당 드라이버를 등록해주세요. (2005 버전은 SQLJDBC4.JAR 파일을 등록해야합니다. 구버전 SQL 서버는 SQLJDBC.JAR 을 사용하지만 아마 2000 버전 이상의 SQL 서버는 SQLJDBC4.JAR 파일을 사용합니다.)
FIND 버튼을 누르면 해당 JAR 파일에 등록된 드라이버의 클래스를 찾아옵니다.
그 아래 드라이버 명은 임의로 선언할 수 있습니다.


등록을 완료하면 위 그림처럼 해당 드라이버가 추가된 것을 볼 수 있습니다. 여기에서 해당 드라이버에 오른 버튼을 클릭하여 CONNECT USING ... 항목을 선택합니다.


사용하는 DB 환경에 따라 해당 정보를 입력합니다. DATA INPUT MODE 에 따라 접속 파라미터가 달라지니 확인하시고 아는 정보를 선택하여 입력합니다. 이 정보가 정확하지 않을 때에는 해당 DB 서버에 접속할 수 없습니다.


접속이 성공하게 되면 해당 아이콘이 찟어진 모양에서 완전한 모양으로 변하게 됩니다. 그리고 해당 트리를 열면 접속된 서버의 데이터베이스가 나타납니다.
간단한 쿼리를 사용해 테스트해 보겠습니다. 쿼리 실행 단축키는 CTRL+SHIFT+E 키 입니다.


두개의 쿼리는 두개의 탭으로 구성되어 결과를 보여줍니다.

자 이제 소스 코드를 작성해봅니다.

- Main.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hello;

import com.ibatis.sqlmap.client.*;
import com.ibatis.common.resources.Resources;

import java.io.Reader;
import java.util.List;

public class Main
{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception
    {
        // TODO code application logic here
        String resource = "SqlMapConfig.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
        List list = sqlMap.queryForList("getAllNames");
        System.out.println("Selected " + list.size() + " records.");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}

실행될 메인 파일 입니다.
중요한 부분은 위 코드에서 밑줄 친 부분입니다. 관련 경로를 제대로 삽입해주어야합니다. 위 코드에서는 컴파일 된 파일이 위치하는 파일과 동일한 패스에 SqlMapConfig.xml 파일이 존재하는 상황입니다.

이 시점에서 중요한 점이 있습니다.
넷빈즈에서 추가로 선언하지 않는다면 java 을 제외한 파일은 컴파일 타임에 같은 폴더에 있더라도 함께 컴파일 폴더로 이동하지 않습니다. 즉 java 파일이 아닌 파일은 컴파일 되지 않습니다.
관련 코드를 다 작성하고 해결 방법에 대해 알아보겠습니다.

- SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMapConfig
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
      <property name="JDBC.ConnectionURL" value="jdbc:sqlserver://456.789.123.456;databaseName=123123"/>
      <property name="JDBC.Username" value="123123"/>
      <property name="JDBC.Password" value="456456"/>
    </dataSource>
  </transactionManager>

  <sqlMap resource="Name.xml"/>

</sqlMapConfig>

위 코드에서도 밑줄친 부분을 유심히 확인해 주세요.

- Name.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap>
    <select id="getAllNames" resultClass="hashmap">
        SELECT * FROM goods
    </select>
</sqlMap>

위 3 파일이 이번 프로젝트의 모든 것 입니다. 넷빈즈에서 보이는 화면은 다음과 같을 것입니다.


이 상태에서 컴파일 후 실행하면 런타임 에러가 발생합니다. 이유는 해당 xml 파일이 컴파일 파일 패스에 없기 때문입니다. 넷빈즈의 파일 탭을 보면 알 수 있습니다.


소스파일에는 관련 xml 파일이 있지만 컴파일 후 빌드된 패스에는 해당 파일이 없기 때문입니다. 컴파일할 때 프로젝트에 포함될 소스 파일을 추가하는 방법을 알아보겠습니다.


프로젝트 프로퍼티 패널에서 Add Folder 를 선택하여 해당 xml 파일이 있는 곳을 추가해줍니다. 현재는 소스파일과 같은 폴더에 있기 때문에 현제 src/hello 폴더를 추가하기로 했습니다. 또한 소스파일에서 다른 경로가 아니라 현재 폴더에 관련 xml 파일이 있는 것으로 선언했기 때문이기도 합니다.


이제 프로젝트를 빌드하고 실행해봅니다.


넷빈즈 윈도우 하단의 출력Outout 패널의 hello(run) 탭에 실행된 코드의 결과가 나타납니다.

다음에는 웹 프로젝트에 적용하는 예제를 한번 알아볼까 합니다.