web developer

[egov] 트랜잭션 서비스 본문

Framework/Egovframework [spring]

[egov] 트랜잭션 서비스

trueman 2024. 9. 12. 21:58
728x90
728x90

트랜잭션 서비스


eGovFramework에서 제공하는 트랜잭션 서비스는  Spring 트랜잭션 서비스를 채택하여 가이드하고 있다. 트랜잭션 서비스인 DataSource Transaction Service, JTA Transaction Service, JPA Transaction Service은 요약하면 다음과 같다.

  1. DataSource Transaction Service: 단일 데이터베이스에서 트랜잭션을 관리하며, JDBC를 통해 직접 데이터베이스와 상호작용.
  2. JTA Transaction Service: 여러 자원 관리자 간의 트랜잭션을 관리하는 분산 트랜잭션 서비스.
  3. JPA Transaction Service: JPA 기반 ORM으로 객체 지향적으로 트랜잭션을 처리.

(1) DataSource Transaction Service


DataSource 트랜잭션 서비스는 JDBC를 통해 데이터베이스와 직접 상호작용하는 경우에 사용되는 트랜잭션 관리 방식입니다. 이 방식에서는 다음의 주요 특징이 있습니다.

  1. 단일 자원 트랜잭션: 보통 하나의 데이터베이스에 대한 트랜잭션을 처리할 때 사용합니다.
  2. 간단한 트랜잭션 관리: Spring의 DataSourceTransactionManager를 통해 관리되며, 트랜잭션 시작, 커밋, 롤백 등을 자동으로 처리합니다.
  3. 동기화: 트랜잭션 컨텍스트는 현재 쓰레드와 동기화되며, 트랜잭션이 완료되면 자동으로 커밋 또는 롤백됩니다.

이 방식은 성능이 우수하고, 단일 데이터베이스에 대해서만 트랜잭션을 처리하는 경우 매우 효율적입니다.

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
   <property name="dataSource" ref="dataSource"/>
</bean>
 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
   <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
   <property name="url" value="dbc:mysql://db2:1621/rte"/>
   <property name="username" value="rte"/>
   <property name="password" value="xxx"/>
   <property name="defaultAutoCommit" value="false"/>
</bean>

 

위의 설정을 보면 transactionManager의 property로 dataSource를 지정하고, 그에 필요한 driver정보, Url정보등을 지정한 것을 확인 할 수 있다. 설정한 dataSource 기반 하에서 트랜잭션 서비스를 제공한다. 사이트 환경에 맞추어 driverClassName, url, username, password는 변경해서 적용한다.

PROPERTIES 설 명
driverClassName jdbc driver
url db url
username 사용자명
password 패스워드
defaultAutoCommit 자동commit 설정

(2) JTA Transaction Service


JTA(Java Transaction API) 트랜잭션 서비스분산 트랜잭션을 관리하는데 사용됩니다. 여러 자원 관리자(예: 여러 데이터베이스나 메시징 시스템) 간의 트랜잭션을 관리할 때 필요합니다. 주요 특징은 다음과 같습니다.

  1. 분산 트랜잭션: 여러 자원 간의 트랜잭션을 관리할 수 있습니다. 예를 들어, 두 개의 데이터베이스에 동시에 데이터를 업데이트하는 트랜잭션을 처리할 수 있습니다.
  2. XA 프로토콜: JTA 트랜잭션은 보통 XA 트랜잭션을 기반으로 하며, XA 트랜잭션 매니저가 트랜잭션을 조정하고, 자원 간의 일관성을 보장합니다.
  3. 글로벌 트랜잭션: 단일 쓰레드뿐만 아니라 여러 애플리케이션 서버 간에도 트랜잭션을 확장할 수 있습니다.

JTA는 복잡한 분산 환경에서 사용되며, 트랜잭션의 범위가 여러 자원으로 확장될 때 매우 유용하다. 사용법은 DataSource Transaction Service와 동일하다.

<tx:jta-transaction-manager/>
<jee:jndi-lookup id="dataSource" jndi-name="dbmsXADS" resource-ref="true">
  <jee:environment>
     java.naming.factory.initial=weblogic.jndi.WLInitialContextFactory
     java.naming.provider.url=t3://was:7002
  </jee:environment>
</jee:jndi-lookup>

 

위의 설정예에서 jndi-name과 java.naming.factory.initial, java.naming.provider.url은 사이트 환경에 맞추어 변경해야 한다. DataSource Transaction Service와는 달리 transationManager에 대해서 따로 bean 정의하지 않아도 된다.


(3) JPA Transaction Service


JPA(Java Persistence API) 트랜잭션 서비스ORM(Object-Relational Mapping) 방식으로 데이터베이스와 상호작용할 때 사용됩니다. JPA는 엔티티(Entity) 객체와 데이터베이스 테이블 간의 매핑을 통해 객체 지향적으로 데이터베이스 트랜잭션을 처리합니다. 주요 특징은 다음과 같습니다:

  1. 엔티티 중심 트랜잭션: 데이터베이스의 테이블과 매핑된 엔티티 객체를 통해 데이터를 처리합니다.
  2. Spring과의 통합: Spring에서 제공하는 JpaTransactionManager를 통해 JPA 트랜잭션을 관리합니다.
  3. 동기화 관리: JPA의 EntityManager와 데이터베이스 트랜잭션을 동기화하여 일관된 상태를 유지합니다.

또한, JPA Transaction 서비스는 JPA EntityManagerFactory를 이용하여 트랜잭션을 관리한다. JpaTransactionManager는 EntityManagerFactory에 의존성을 가지고 있으므로 반드시 EntityManagerFactory 설정과 함께 정의되어야 한다. 아래에서 예를 들어서 설정 방법을 설명한다. 사용법은 DataSource Transaction Service와 동일하다.

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
   <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
 
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
   <property name="persistenceUnitName" value="OraUnit"/>
   <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
   <property name="dataSource" ref="dataSource"/>
</bean>	
 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
   <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
   <property name="url" value="dbc:mysql://db2:1621/rte"/>
   <property name="username" value="rte"/>
   <property name="password" value="xxx"/>
   <property name="defaultAutoCommit" value="false"/>
</bean>

 

위의 설정을 보면 transactionManager의 property로 entiyManagerFactory로 지정하고 entityManagerFactory의 property로 dataSource를 지정하고 그에 필요한 driver정보, Url정보 등을 지정한 것을 확인할 수 있다. 설정한 dataSource 기반 하에서 트랜잭션 서비스를 제공한다. 사이트 환경에 맞추어 driverClassName, url, username, password는 변경해서 적용한다. 또한 persistenceUnitName과 persistenceXmlLocation 정보를 지정하는 것을 알 수 있다.


출처 : https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:psl:transaction

728x90
728x90