본문 바로가기
교재 실습/자바 웹 개발 워크북

111. mybatis 설정 파일 (3)

by Jint 2022. 9. 9.

# <environment> 엘리먼트

environment는 트랜잭션 관리 및 데이터 소스를 설정하는 태그이다.

 

- 트랜잭션 관리 방식 설정

트랜잭션(Transaction)이란, 여러 개의 데이터 변경 작업(insert, update, delete)를 하나의 작업으로 묶은 것이다. mybatis에서 트랜잭선을 관리하는 방식에는 두 가지가 있다. 다음 표를 확인한다.

트랜잭션 관리 유형 설명
JDBC 직접 JDBC의 커밋(commit), 롤백(rollback) 기능을 사용하여 mybatis 자체에서 트랜잭션을 관리
MANAGED 서버의 트랜잭선 관리 기능을 이용, 즉 Java EE 애플리케이션 서버(jBoss, WebLogic, WebSphere 등)나 서블릿 컨테이너(톰캣 서버 등)에서 트랜잭션을 관리

다음과 같이 <transactionManager> 태그를 사용하여 트랜잭션 관리 유형을 설정한다. type 속성에 트랜잭션 관리 유형(JDBC 또는 MANAGED)을 지정한다.

<transactionManager type="JDBC"/>

예제에서는 mybatis가 트랜잭션을 관리할 것이므로 JDBC로 설정했다.

 

# 데이터 소스 설정

mybatis는 JDBC 표준 인터페이스인 javax.sql.DataSource 구현체를 이용하여 DB 커넥션을 다룬다. mybatis에서 사용 가능한 데이터 소스 유형은 다음 세 가지가 있다.

데이터 소스 유형  설명
UNPOOLED DB 커녁션을 요청할 때마다 매번 커넥션 객체를 생성한다. 높은 성능을 요구하지 않는 단순한 애플리케이션에 적합하다.
POOLED 미리 DB 커넥션 객체를 생성해 두고, 요청하면 즉시 반환한다. 데이터베이스에 연결하는 과정, 즉 연결을 초기화하고 사용자를 인증하는 과정이 없기 때문에 속도가 빠르다.
JNDO Java EE 애플리케이션 서버나 서블릿 컨테이너(예: 톰캣 서버)에서 제공하는 데이터 소스를 사용한다.

데이터 소스를 설정하려면 <dataSource> 엘리먼트를 사용해야 한다. 다음 코드를 보면 <dataSource> 태그의 type 속성이 'POOLED'로 되어 있다. 즉 mybatis 자체의 DB 커넥션풀을 사용하겠다는 의미이다.

<dataSource type="POOLED">
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
</dataSource>

<property> 태그의 value 값을 보면 ${}로 되어 있다. 프로퍼티를 가리키는 문법이다. <properties> 태그에서 설정한 파일(db.properties)로부터 프로퍼티 값을 가져온다.

 

# <mappers> 엘리먼트

<mappers> 태그는 SQL 맵퍼 파일들의 정보를 설정할 때 사용한다. 각각의 SQL 맵퍼 파일의 정보는 <mapper> 태그로 정의한다.

 

- SQL 맵퍼 경로 설정

<mapper> 태그에서 SQL 맵퍼 파일의 경로를 설정할 때, 두 가지 방법이 있다. 자바의 클래스 경로를 사용하는 방법과 운영체제의 파일 시스템 경로를 사용하는 방법이다. 클래스 경로를 사용하여 맵퍼 파일을 지정할 경우, 다음과 같이 resource 속성을 사용한다.

<mappers>
    <mapper resource="spms/dao/MySqlProjectDao.xml"/>
</mappers>

만약 파일 시스템 경로를 사용한다면, 다음과 같이 url 속성을 사용해야 한다. MySqlProjectDao.xml 파일이 c:/dao 폴더에 있다고 가정한다.

<mappers>
    <mapper url="file:///c:/dao/MySqlProjectDao.xml"/>
</mappers>

 

# mybatis에서 JNDI 사용하기

기존의 mybatis 설정 정보를 보면 데이터 소스 유형이 'POOLED'로 되어 있다. 즉 mybatis에서 직접 DB 커넥션을 관리하겠다는 의미이다. 이제 다시 예전처럼 톰캣 서버에서 제공하는 데이터 소스를 사용하도록 변경한다.

spms.dao 패키지에 있는 mybatis-config.xml 파일을 열고, <dataSource> 태그 부분을 다음과 같이 변경한다.

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="JNDI">
            <property name="data_source" value="java:comp/env/jdbc/studydb"/>
        </dataSource>
    </environment>
</environments>

<dataSource> 태그의 type 값이 JNDI로 되어 있다. 데이터 소스를 JNDI로 설정할 경우, data_source 속성을 지정해야 한다. 톰캣 서버에 정의된 대로 이 속성의 값을 'java:com/env/jdbc/studydb'로 지정하였다.

mybatis에서 DBMS 연결을 관리하지 않기 때문에 db.properties 파일을 참조할 일이 없다. 설정 파일에서 제거한다.

<configuration>
    <!-- <properties resource="spms/dao/db.properties"/> -->

    <typeAliases>
        <typeAlias type="spms.vo.Project" alias="project"/>
        <typeAlias type="spms.vo.Member" alias="member"/>
    </typeAliases>

    ...

톰캣 서버를 재시작한 뒤, 웹 브라우저에서 http://localhost:9999/web07/project/list.do를 요청한다. 프로젝트 목록 뿐 아니라 등록, 변경, 삭제도 테스트한다.

가능한 애플리케이션에서 데이터베이스 정보를 설정하지 않도록 한다. 톰캣 서버의 경우처럼 애플리케이션 서버에서 제공하는 데이터 소스를 사용하면 유지 보수 측면에서 유리하다. 즉 웹 애플리케이션 서버에서 제공하는 데이터 소스를 사용하면 유지 보수 측면에서 유리하다. 즉 웹 애플리케이션은 데이터베이스 서버와 무관해지기 때문에 고객의 다양한 DB 환경에 대응할 수 있다.

 

참고도서 : https://freelec.co.kr/book/1674/

 

[열혈강의] 자바 웹 개발 워크북

[열혈강의] 자바 웹 개발 워크북

freelec.co.kr

'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글

113. 로그 출력 켜기 (2)  (0) 2022.09.14
112. 로그 출력 켜기 (1)  (2) 2022.09.13
110. mybatis 설정 파일 (2)  (0) 2022.09.07
109. mybatis 설정 파일 (1)  (0) 2022.09.06
108. SQL 맵퍼 파일 (2)  (0) 2022.09.03

댓글