Hibernate와 Transaction 관리

2024. 5. 3. 03:16Spring Data/Hibernate

반응형

들어가며

트랜젝션(Transaction)은 작업의 한 단위를 의미한다.

트랜젝션 단위로 묶인 일련의 작업 수행 도중 하나의 과정이 실패한다면 전체 트랜젝션 작업이 실패하는데, 이것을 원자성(Atomicity)이라 한다.

트랜젝션의 원칙은 ACID로 설명될 수 있다.

  • Atomicity
  • Consistency
  • Isolation
  • Durability

Hibernate의 트랜젝션은 주로 JPA, JDBC에 구현된 트랜젝션 관리 메서드들을 통해 동작한다.

Hibernate의 Transaction Interface

트랜젝션은 세션 안에서 일어나며, Hibernate에서는 session.beginTransaction() 메서드를 통해 시작된다.

주요 메서드는 다음과 같다.

  • void begin()  : 새로운 트랜젝션 단위 시작
  • void commit()  : 트랜젝션 커밋 (반영)
  • void rollback()  : 트랜젝션 강제 롤백
  • void setTimeout(int seconds)  : 트랜젝션 단위 실행시간 제한 (제한시간내로 완료되지 않으면 롤백)
  • boolean isAlive()  : 트랜젝션의 현재 상태 출력
  • void registerSynchronization(Synchronization s)  : 트랜젝션과 외부 콜백 동기화
  • boolean wasCommited()  : 트랜젝션이 성공적으로 커밋되었는지 여부 체크
  • boolean wasRolledBack()  : 트랜젝션이 성공적으로 롤백되었는지 여부 체크

Hibernate의 트랜젝션 관리 예시

Session session = null;  // 세션 생성
Transaction tx = null;  // 트랜젝션 객체 생성
  
try {  // 트랜젝션
	session = sessionFactory.openSession();  // 세션 시작
	tx = session.beginTransaction();  // 트랜젝션 시작
	
	// 비즈니스 로직
	...  
  
	tx.commit();  // 트랜젝션 커밋 (반영)
  
} catch (Exception ex) {  // 예외 발생시
	ex.printStackTrace();  // 예외 출력
	tx.rollback();  // 트랜젝션 롤백
} finally { // 트랜젝션 결과와 상관없이 수행
	session.close(); // 세션 종료
}  

Resources

반응형