스크링 트랜잭션 관리..

534 views
Skip to first unread message

규우

unread,
Apr 1, 2010, 10:08:00 AM4/1/10
to Korea Spring User Group
DB를 2개 바라봐야 하는 상황이 발생하여 스프링에서 datasource 를 2개 만드려고 했는데
트랜잭션을 어떻게 해야 하는지를 모르겠네여..아래의 코드는 DB가 1개 있을때 사용했던 트랜잭션 코드인데 저걸 2개 만들자니..
뭔가 모양새가 안나오는거 같고..
혹시 이와 관련하여 좋은 솔루션이 있다면 답변 부탁드립니다. 감사합니다.
<!-- DataSource Transaction Manager -->
<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref="dataSource" />

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>

Sanghyuk Jung

unread,
Apr 1, 2010, 10:52:15 AM4/1/10
to ks...@googlegroups.com
JOTM으로 트랜잭션처리를 해야 하지 않을까요?

http://sslee05.egloos.com/4970203

2010년 4월 1일 오후 11:08, 규우 <lng...@gmail.com>님의 말:

--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.


kuwon Kang

unread,
Apr 1, 2010, 8:57:28 PM4/1/10
to ks...@googlegroups.com
안녕하세요?
강구원입니다.

대부분 2개 이상의 Resource Manager 가 트랜젝션에 참여하는 경우는 분산환경에서 발생하는데 지금 상황은 Tomcat서버에서 구동되는 Application이 2개의 Database를 사용하는 환경인것 같은데요.

이런 상황도 Transaction Management입장에서는 2개의 리소스 매니저가 존재하는 상황입니다.

따라서 반드시 데이터의 정합성을 보장(RI)하려면 JTA를 지원하는 Transaction Manager를 사용해야 합니다. 

JOTM이 JTA를 지원하는 Transaction Manager이고 자체적으로 XA Interface(XA JDBC Driver)를 지원한다고 하니 사용을 해도 괜찮을 것 같습니다.

다만 미션 크리티컬한 시스템이라면 데이터 접합성과 XAInterface처리에 대한 명확한 검증이 필요해 보입니다.

또한 분산 환경을 고려하신다면 더더욱 검증이 필요해 보입니다.

검증을 필요로 하는 Transaction Management의 주요 내용은 아래와 같습니다.

- commit
- rollback
- timeout 처리(Long transaction 지원).
- 트랜젝션 참여와 분리(REQUIRES_NEW, REQUIRED, NOT_SUPPORT, ETC).

위의 경우가 대부분 Application 개발시 발생할 수 있는 대부분의 상황입니다.

감사합니다.

2010/4/1 규우 <lng...@gmail.com>
--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.




--
Blessings.
Kuwon Kang
............................................................
IT specialist and architect.
Java technology engineer.
JavaEE architect/developer.
Solution developer.

- Model Driven Architecture.
- Test Driven Development.
- Refactoring Oriented Development.
- Practical design and modeling.
- Robust  Software Design and Engineering.
............................................................
Prever
http://www.prever.co.kr
Blog:
http://www.prever.co.kr/josh
............................................................

백기선

unread,
Apr 1, 2010, 9:13:50 PM4/1/10
to ks...@googlegroups.com
JOTM이 필요한게 아니라 (톰캣에서 돌리려면 어차피 필요하겠지만) JtaTransactionManager가 필요한 거 같네요.



2010년 4월 1일 오후 11:52, Sanghyuk Jung <ben...@gmail.com>님의 말:



--
좋은 하루 되세요~

kuwon Kang

unread,
Apr 2, 2010, 12:01:32 AM4/2/10
to ks...@googlegroups.com
둘다 필요하게 되겠죠. 스프링 기반의 개발을 하려면 TransactionManager를 써야 하는데
스프링이 제공하는 Tr Manager가 DataSourceTransactionManager와 JtaTransactionManager, WebloigcTransactionManager등이 있어요.

이 중에 JTA를 지원하지 않는 것이 스프링이 만든 DataSourceTransactionManager 입니다.

그런데 지금과 같은 JTA가 필요한 경우는 결국 스프링 JtaTransactionManager를 써야 하고 스프링은 일반적인 JTA를 구현한 TransactionManager를 Delegation하는 역할을 하죠.

따라서 tomcat이던 일반 J2ee Full spec을 갖추 WAS이던간에 스프링 입장에서는 JTA를 구현한 TransactionManager가 필요하게 됩니다.

실제 핵심은 JTA를 구현한 쪽에 있다고 보는게 좋을 것 같습니다.

2010/4/2 백기선 <whites...@gmail.com>



--

백기선

unread,
Apr 2, 2010, 12:17:51 AM4/2/10
to ks...@googlegroups.com
둘다 필요하게 되겠죠.

여기서 말씀하시는 둘 다가.. JOTM이랑 JtaTransactionManager 인 것 같은데요.

그 중에서 정상혁님이 주신 링크에서 소개되어 있는 글을 보니 JOTM은 http://jotm.ow2.org/xwiki/bin/view/Main/WebHome 이거 더군요.

그래서 WAS 차원에서 제공된다면 필요없다는 이야기 였습니다.

강구원님께서는 JOTM을 좀 더 일반적인 의미로 "JTA를 구현한 TM"을 말씀하시는 것 같네요.
제가 이해한게 맞나요?

아니면 톰캣 이던 WAS던 JtaTransactionManaegr를 쓰려면 JOTM(http://jotm.ow2.org/xwiki/bin/view/Main/WebHome)이 반드시 필요하다는 의견이신가요?

2010년 4월 2일 오후 1:01, kuwon Kang <preve...@gmail.com>님의 말:



--
좋은 하루 되세요~

kuwon Kang

unread,
Apr 2, 2010, 12:23:53 AM4/2/10
to ks...@googlegroups.com

당연히 어떤 서버에서 돌리냐에 따라 다르겠죠.

WebLogic에서는 WebLogic에서 제공하는 JTA를 써서 Spring 기반의 어플을 개발해야하고 tomcat은 JTA를 지원하지 않으니 JOTM같은 JTA라이브러리를 써서
개발해야 겠죠.



2010/4/2 백기선 <whites...@gmail.com>

kuwon Kang

unread,
Apr 2, 2010, 12:33:36 AM4/2/10
to ks...@googlegroups.com
물론 예를 들어 WebLogic에서도 반드시 Weblogic이 제공하는 JTA를 사용할 필요는 없습니다.
그냥 스프링 DataSourceTransactionManager를 쓰면 되죠.

단 Resource Manager가 반드시 하나이고 분산처리가 없다는 가정하에서 입니다.

더 나아가 이런 시도는 무의미 할 수 도 있지만 JOTM같은 것을 WebLogic의 JTA대신 사용할 수 도 있겠죠. 

그런데 이렇게되면 WebLogic을 돈주가 살 이유가 전혀 없습니다.

근데 사실 요즘 추세가 분산을 쓰지 않는 것을 추구하고 있지만 연전히 EJB를 안쓸 수 도 없는 상황입니다. 

지금 제가 있는 곳도 그렇구요.

따라서 여전이 대규모 J2ee환경은 상용 WAS를 찾고 있는 것 같기도 합니다.

하지만 머지않아 Tomcat에서 JOTM같은 것을 써서 프로젝트를 진행할 날이 멀지 않을 수 도 있을 거란 생각이 듭니다.



2010/4/2 kuwon Kang <preve...@gmail.com>

Sanghyuk Jung

unread,
Apr 2, 2010, 2:28:18 AM4/2/10
to ks...@googlegroups.com
저는 한동안 Tomcat만 쓰는 동네에 살다보니 JOTM부터 생각이 나서 링크하나 보내드렸었습니다 ^^;
 
뭐 제가 있는 곳에서도 JOTM 써봤다가 성능이 안 나와서 안 쓰는 곳도 있고.. 대세는 분산 Tx를 왠만하면 안 쓰는 것인거 같네요.
 
나름대로의 PlatformTrasactionManager를 만들어서 비슷한 사례를 해결한 경우도 봤습니다..


 
2010년 4월 2일 오후 1:33, kuwon Kang <preve...@gmail.com>님의 말:

kuwon Kang

unread,
Apr 2, 2010, 2:37:25 AM4/2/10
to ks...@googlegroups.com
아마도 JOTM만이 성능 문제가 있는 것은 아닐 것입니다.

대부분의 XA를 지원하는 WAS벤더의 동일한 문제이죠.

실제 XAInterface를 지원하기위한 비용은 상당히 큽니다.

성능 검증을 해보아도 XA vs Non-XA의 성능의 차이는 무척이나 큽니다.

저희가 수행한 케이스에서는 약 50%이상 XA가 느리죠.

금융과 같은 곳은 한번 트랜젝션이 무척 복잡하기 때문에 실제 50% 이상이라고 볼 수 있습니다.

저희는 내부적으로 이 문제를 해결하기 위해 여러가지 Architecture적인 방안과 여러 노력을 기울여 몇 가지 Tip을 적용하여 XA, NonXA를 구분하여 최대한 성능 최적화 하여 사용하고 있습니다.

하지만 가능한 XA를 사용하지 않으려고 합니다.

2010/4/2 Sanghyuk Jung <ben...@gmail.com>
Reply all
Reply to author
Forward
0 new messages