본문 바로가기
Lecture/Mybatis

[본격 게시판짜기 Part2.5 Model2 MVC패턴] Model 구성2 - i-batis의 사용

by cusmaker 2012. 7. 16.
반응형

2012/06/13 - [Lecture/HTML] - [본격 게시판짜기 Part1.1 - 게시판도 HTML부터] 게시글 리스트

2012/06/13 - [Lecture/HTML] - [본격 게시판짜기 Part1.2 - 게시판도 HTML부터] 글입력폼

2012/06/13 - [Lecture/Javascript-기초] - [본격 게시판짜기 Part1.3 - Dom 맛보기 ] 글입력폼 검사

2012/06/13 - [Lecture/Jsp] - [본격 게시판짜기 Part1.4 - HTML-> JSP] form 파라미터 받기

2012/06/26 - [Lecture/SQL / Oracle] - [본격 게시판짜기 Part1.5 JSP > Oracle] 게시판 DB 테이블 생성

2012/06/26 - [Lecture/Jsp] - [본격 게시판짜기 Part1.6 Oracle > JSP] Database 접속 및 Select

2012/07/05 - [Lecture/Jsp] - [본격 게시판짜기 Part1.7 JSP, SQLDeveloper] 게시글 입력 및 리스트조회기능

2012/07/08 - [Lecture/Jsp] - [본격 게시판짜기 Part1.8 JSP 게시글 조회] 게시글 조회기능 및 게시글 삭제

2012/07/10 - [Lecture/Jsp] - [본격 게시판짜기 Part2.1 Model2 MVC패턴] 뷰(View) 코드 분리

2012/07/10 - [Lecture/Jsp] - [본격 게시판짜기 Part2.2 Model2 MVC패턴] Entity Beans의 사용

2012/07/12 - [Lecture/Jsp] - [본격 게시판짜기 Part2.3 Model2 MVC패턴] Controller구성

2012/07/13 - [Lecture/Jsp] - [본격 게시판짜기 Part2.4 Model2 MVC패턴] Model 구성


안녕하세요 cocy입니다.


오늘은 저번시간에 구성한 Model을 i-batis를 사용하여 재구성 해 보도록 하겠습니다.

※ i-batis는 비영리 개발단체인 aphache에서 개발한 오픈소스 ORM(Object Relational Mapping) 프레임워크입니다.

   현재 구글로 넘어가 my-batis라 불리고 있으며 포스팅시점에서는 i-batis를 사용합니다. 다른 ORM으로는 하이버네이트가 있음.


기존에 사용한 JDBC와 i-batis의 차이점을 비교하자면


기존의 JDBC에서는 실제로 사용되는 DB 드라이버 로드부터 커넥션 객체를 생성하고 

실제 DB에 접근하여 해당 결과값을 받아오는데요,

현재 구현된 소스에서는 하나하나의 커넥션을 관리해주는 커넥션 풀을 사용하지않고, 

모든 사용자에게 커넥션을 허용하였기때문에, 사용자가 몰릴경우 DB에 과도한 무리를 주어, 

성능상의 문제를 야기할 수 있습니다.


i-batis는 이러한 커넥션 생성부터 관리까지의 일련의 db연결과정을 정형화시켜놓은 라이브러리입니다.

XML파일에 맵핑정보와 쿼리들을 기술하고,

데이터베이스의 테이블과 자바 객체를 맵핑하여,

코딩의 단순화와 jdbc를 사용할때 불편했던 작업들을 대신 수행해주므로써,

코드의 분량을 기존대비 60%정도 만으로도 프로그램의 작성이 가능해집니다.


그럼 i-batis의 사용을 위해 라이브러리를 추가해봅시다. 

경로는 WebContent > WEB-INF > lib 폴더입니다.


ibatis-common-2.jar


ibatis-dao-2.jar


ibatis-sqlmap-2.jar


추가가 끝나셨으면 이제 이 라이브러리들을 사용하기위해 패키지를 만듭시다.

접속정보를 설정할 파일들을 담을 패키지입니다.


new > package > com.board.db.sqlconfig


그리고 이곳에 CommonDao.java에 적었던 접속정보들을 적기위한 properties파일을 하나 만듭시다.


 com.board.db.sqlconfig > new  > file > SqlMapConfig.properties


내용은 다음과 같이 채워주세요 (※ properties파일의 주석은 #입니다.)


※ 주의!!! 이부분에서 에러가 많이 발생하는데요, 

SqlMapConfig.properties파일에서 필요한 문자외의 공백이 들어가면 안됩니다.

#driver=oracle.jdbc.driver.OracleDriver            # 기존의 오라클 드라이버입니다.

driver=core.log.jdbc.driver.OracleDriver           # 로그를 찍기위해 사용하는 오라클 드라이버입니다.

url=jdbc:oracle:thin:@localhost:1521:XE           # 데이터베이스에 접속 정보입니다.

username=board                                           # 데이터베이스 계정명

password=board                                           # 데이터베이스 암호

※ 그대로 복사해서 붙여넣으시는 분들은 

아래의 주석과 공백을 제거한 구문을 넣어보시기 바랍니다.

driver=core.log.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
username=board
password=board


작업이 끝나셨으면 방금 작성된 파일을 읽어서 사용할 i-batis의 설정파일을 만듭니다.

                                         com.board.db.sqlconfig > new  > file > SqlMapConfig.xml


내용은 다음과 같습니다.


<?xml version="1.0" encoding="UTF-8"?>
 
 
 
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
 
<sqlMapConfig>
 
    <properties resource="com/board/db/sqlconfig/SqlMapConfig.properties" />
 
    <!-- 접속정보를 저장한 properties파일을 지정합니다. -->
 
    <settings
 
        cacheModelsEnabled="true"
 
        enhancementEnabled="true"
 
        lazyLoadingEnabled="true"
 
        maxRequests="20"
 
        maxSessions="10"
 
        maxTransactions="10"
 
        useStatementNamespaces="false"
 
    />
 
     
 
    <transactionManager type="JDBC">
 
        <dataSource type="DBCP">
 
            <property name="JDBC.Driver" value="${driver}"/>
 
            <property name="JDBC.ConnectionURL" value="${url}"/>
 
            <property name="JDBC.Username" value="${username}"/>
 
            <property name="JDBC.Password" value="${password}"/>
 
            <property name="Pool.MaximumActiveConnections" value="10"/>
 
            <property name="Pool.MaximumIdleConnections" value="10"/>
 
            <property name="Pool.MaximumWait" value="60000"/>
 
            <property name="Pool.ValidationQuery" value="select 1 from dual"/>
 
            <property name="Pool.LogAbandoned" value="false"/>
 
            <property name="Pool.RemoveAbandoned" value="false"/>
 
            <property name="Pool.RemoveAbandonedTimeout" value="60000"/>
 
        </dataSource>
 
    </transactionManager>
 
 
 
    <sqlMap resource="com/board/db/sqlmaps/Board.xml"/>
 
         
 
</sqlMapConfig>


소스를 간략히 설명하자면,

sqlMapConfig 태그로부터 시작해서

접속정보를 저장한 properties파일의 경로를 지정해주고,

db접속에 관련된 셋팅을 합니다. 

그리고 불러온 접속정보를 매치해줍니다. 많이보던 표현식이 들어있네요.

각 속성에 관해서는 따로 설명 안드리겠습니다. ※ 검색해보세요!


눈여겨 보셔야 할 부분은 

빨갛게 표시한 sqlMap resource 부분입니다.

바로 쿼리가 들어가게될 xml파일을 지정하는 부분인데요,

저런식으로 쿼리별 xml을 늘려서 추가하는 것이 가능합니다.


명시를 해줬으니 만들어줘야겠죠?

역시 패키지를 만들어 추가합니다.


                                         com.board.db.sqlmaps > new  > file > Board.xml


Board.xml파일에 들어갈 내용은 분량이 많은 관계로 다음 포스팅에서 다루도록 하겠습니다.


그럼 이제 지금까지 설정한 파일들을 Java에서 사용하기위해 IBatisDBConnector.java 라는 파일을 만들어 보겠습니다.


                                         com.board.db.sqlconfig > new  > file > IBatisDBConnector.java


내용은 다음과 같습니다.


package com.board.db.sqlconfig;
 
 
 
import java.io.Reader;
 
import com.ibatis.common.resources.Resources;
 
import com.ibatis.sqlmap.client.SqlMapClient;
 
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
 
 
 
public final class IBatisDBConnector {
 
    private static SqlMapClient mySQLMap;
 
     
 
    static
 
    {
 
        try
 
        {   // 접속설정파일로드
 
            String resource = "com/board/db/sqlconfig/SqlMapConfig.xml";   
 
            Reader reader = Resources.getResourceAsReader(resource);
 
            mySQLMap = SqlMapClientBuilder.buildSqlMapClient(reader);
 
        }
 
        catch(Exception e)
 
        {
 
            e.printStackTrace();
 
        }      
 
    }
 
    public static SqlMapClient getSqlMapInstance()
 
    {   // 인스턴스 반환 메서드
 
        return mySQLMap;
 
    }
 
}


소스는 간단합니다.
접속설정파일을 로드하고, 읽을 준비를 하고,
인스턴스를 반환하는 메서드를 구현하였습니다.




여기까지 하셨으면 이제 아이바티스쪽의 설정은 모두 끝났습니다.
다음은 현재 구현한 DAO를 방금 작성한 IBatisDBConnector를 사용할 수 있도록 수정하고,
Board.xml에 내용을 채우는 일입니다.

허나 이 작업들을 다하려면 이번포스팅의 분량이 너무 많아지기때문에
기존 소스동작에 영향이없는 현재까지만 작업을 하고,
다음포스팅에서 못다한 나머지 설정들과
아이바티스의 사용법을 배워보도록 하겠습니다.

수고하셨습니다.

다음장으로 >> http://cusmaker.tistory.com/93