# <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 |
댓글