Hibernate 설정

Hibernate 2008.01.18 16:03
이 글은 Hibernate 래퍼런스 3장을 참고하여 정리 했습니다.

SessionFactory 초기화

Hibernate를 초기화 한다는 것은 SessionFactory를 초기화 한다는 것과 같습니다.
SessionFactory는 DB 커넥션, Transaction, SQL, 매핑파일, Session 범위 등의 정보를 가지고 있습니다.
이런 정보들은 property파일이나 XML파일에 설정하는데 보통 XML을 많이 사용 합니다.
XML파일을 이용할 경우 SessionFactory 생성 방식은 이렇습니다.
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Configuration.configure() 메소드는 ClassPath 루트에서 hibernate.cfg.xml 파일을 읽어 들입니다.
설정 파일이 다른 경로에 있다면 아래 3가지 메소드를 이용할 수 있습니다.
- configure(String resource) : ClassPath 자원으로부터 설정 파일 로딩
- configure(File configFile) : 지정한 파일로부터 설정 파일 로딩
- configure(URL url) : 지정한 URL로부터 설정 파일 로딩

상세 설정
JDBC 프로퍼티
- hibernate.connection.driver_class : JDBC 드라이버 클래스
- hibernate.connection.url : JDBC URL
- hibernate.connection.username : DB 사용자
- hibernate.connection..password : DB 사용자 암호
- hibernate.connection.pool_size : 커넥션풀 크기
Hibernate 자체적인 커넥션 풀링은 아주 기본적인 기능만 있습니다.
퍼포먼스와 안정성을 위해서 제 3의 커넥션풀 라이브러리인 C3P0을 사용 할 수 있습니다.
C3P0를 설정하는 방법은 다음과 같습니다.
<property name="hibernate.c3p0.min_size">5</property>
<property name="hibernate.c3p0.max_size">20</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">50</property>

DataSource 프로퍼티
Hibernate는 J2EE 환경에서 JNDI에 등록된 DataSource을 얻을 수 있습니다.
- hibernate.connection.datasource : DataSource의 JNDI 이름
- hibernate.jndi.url : JNDI 프로바이더의 URL(옵션)
- hibernate.jndi.clas : JNDI InitialcontextFactory의 클래스(옵션)
- hibernate.connection.username : DB 사용자(옵션)
- hibernate.connection.password :  DB 사용자 암호(옵션)
간단한 예
<property name="hibernate.connection.datasource">java:/comp/env/jdbc/TestDB</property>
JNDI에 등록된 DataSource로부터 얻어진 커넥션들은 컨테이너에 의해 관리되는 트랙잭션에 자동 참여됩니다.
그리고 ConnectionProvider 인터페이스를 구현하여 hibernate.connection.provider_class 프로퍼티에 설정하면 hibernate.connection 으로 시작하는 임의의 프로퍼티들도 사용 할 수 있습니다.

SQL Dialect
사용하는 데이터베이스에 최적화된 SQL을 생성하도록 Dialect를 설정 합니다.
org.hibernate.dialect 패키지에 각 데이터베이스 마다 최적화된 Dialect가 있습니다.
Dialect는 hibernate.dialect 프로퍼티를 사용하여 설정 합니다.
<property name="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</property>

SQL 출력
Hibernate가 생성하고 수행하는 SQL을 출력 할 수 있습니다.
이 설정은 로깅설정의 org.hibernate.SQL 를 대신 할 수 있습니다.
<property name="show_sql">true</property>
좀더 깔끔한 출력을 원한다면 아래 설정을 추가 합니다.
<property name="format_sql">true</property>

로깅
Hibernate는 자카르타 Common-Logging API를 이용해 로그를 출력 합니다.
Hibernate가 사용하는 로그 카테고리 입니다.
- org.hibernate.SQL : SQL DML 쿼리를 로깅
-
org.hibernate.type : 모든 JDBC 파라미터를 로깅
-
org.hibernate.tool.hbm2ddl : SQL DLL 쿼리를 로깅
-
org.hibernate.pretty : flush를 수행 할 때 세션에 저장된 모든 엔티티들(최대 20개)의 상태를 로깅
-
org.hibernate.cache : 2차 캐시의 활동을 로깅
-
org.hibernate.transaction : 트랜잭션 관련 활동을 로깅
-
org.hibernate.jdbc : 모든 JDBC 자원 요청을 로깅
-
org.hibernate.hql.ast.AST : 쿼리를 파싱하는 동안 HQL AST와 SQL AST를 로깅
-
org.hibernate.secure : 모든 JAAS 인증 요청을 로깅
-
org.hibernate : 모든 정보를 로그(많은 정보지만 문제해결에 유용)

트랜잭션 매니저
Hibernate Session API는 JDBC API를 이용하여 트랜잭션을 사용 할 수 있고 J2EE 서버에서 제공하는 트랜잭션 기능을 사용 할 수 있습니다. 두 가지 모두 org.hibernate.Transaction 구현체에 의해 포장 됩니다.
hibernate.transaction.factory_class 프로퍼티를 이용해 다음 3가지 트랜잭션 매니저를 설정 할 수 있습니다.
- org.hibernate.transaction.JDBCTransactionFactory
JDBC 트랜잭션을 사용(기본값)
- org.hibernate.transaction.JTATransactionFactory
컨테이너가 관리하는 JTA 트랜잭션을 사용
- org.hibernate.transaction.CMTTransactionFactory
기존의 트랜잭션이 진행 중일 경우에 container-managed transaction을 사용하고,
그 밖의 경우 새로운 트랜잭션이 시작되고 bean-managed transaction을 사용
hibernate.transaction.factory_class 프로퍼티를 설정하지 않으면 기본값이 설정 됩니다.

Hibernate Session이 JTA를 사용할 경우 몇몇 기능 때문에(2차 캐시, JTA를 가진 컨텍스트 상의 세션들,  등) JTA TransactionManager에 대한 접근을 필요로 합니다. J2EE 서버마다 JTA TransactionManager에 접근하는
방법이 다르므로 hibernate.transaction.manager_lookup_class 프로퍼티를 설정 해야 합니다.
org.hibernate.transaction 패키지에 각 J2EE 서버를 위한 TransactionManagerLookup 구현체가 있습니다.

JBOSS를 사용할 경우
<property name="hibernate.transaction.factory_class">
    org.hibernate.transaction.JTATransactionFactory
</property>
<property name="hibernate.transaction.manager_lookup_class">
    org.hibernate.transactionJBossTransactionManagerLookup
</property>

'Hibernate' 카테고리의 다른 글

Hibernate에서 HSQL 사용과 스키마 자동 생성  (0) 2008.02.05
Hibernate 기본 매핑 설정  (0) 2008.01.23
영속 클래스  (0) 2008.01.18
Hibernate 설정  (0) 2008.01.18
Hibernate 간단한 예제2  (2) 2008.01.17
Hibernate 간단한 예제  (1) 2008.01.17
Posted by 째코

댓글을 달아 주세요