Transaction 질문
- 작성자 :
- 오*익
- 작성일 :
- 2013-07-08 11:23:59
- 조회수 :
- 5,348
- 구분 :
- 운영환경
- 진행상태 :
- 완료
Q
이전 질문에 이어 Transaction 에 대해 질문하려고 합니다.
context-transaction.xml에 아래와 같이 되어 있으면.
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
data처리 관련 모든 항목에 해당되기 때문에, db 응답 없을 시 thread가 쌓여
서버가 다운되는 것 같더라구요. db가 응답 없는 이유는 찾고 있구요ㅠ.ㅠ
톰캣 로그에서 아래와 같은 로그가 엄청 많이 나타나는데
DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] Cre
ating new transaction with name [egovframework.com.uss.olp.qri.service.impl.EgovQustnrRespondInfoSer
viceImpl.selectQustnrRespondInfoManageList]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
위의 코드로 보아 데이터처리 중 Exception이 그만큼 많이 발생한다는 얘긴가요?
<tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>에서 그냥 propagation을 not-supported로 해버린다면 어떤 문제들이 발생하나요?
아래와 같이 처리해 주는 것이 효율 적일까요?
<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" />
설문조사 페이지를 개설했는데,
서버가 금방 다운됩니다...
톰캣 로그 확인하였을 때, transaction 부분을 수정해야 좋을 듯해서,,
조언 부탁드립니다..
context-transaction.xml에 아래와 같이 되어 있으면.
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
data처리 관련 모든 항목에 해당되기 때문에, db 응답 없을 시 thread가 쌓여
서버가 다운되는 것 같더라구요. db가 응답 없는 이유는 찾고 있구요ㅠ.ㅠ
톰캣 로그에서 아래와 같은 로그가 엄청 많이 나타나는데
DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] Cre
ating new transaction with name [egovframework.com.uss.olp.qri.service.impl.EgovQustnrRespondInfoSer
viceImpl.selectQustnrRespondInfoManageList]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
위의 코드로 보아 데이터처리 중 Exception이 그만큼 많이 발생한다는 얘긴가요?
<tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>에서 그냥 propagation을 not-supported로 해버린다면 어떤 문제들이 발생하나요?
아래와 같이 처리해 주는 것이 효율 적일까요?
<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" />
설문조사 페이지를 개설했는데,
서버가 금방 다운됩니다...
톰캣 로그 확인하였을 때, transaction 부분을 수정해야 좋을 듯해서,,
조언 부탁드립니다..
A
안녕하세요. 오형익님.
DEBUG 로그는 transaction이 시작될 때에 표시되는 디버그성 로그입니다. 뒤쪽 "-Exception"은 Exception이 발생되면 rollback 시킨다는 transaction에 대한 설정 정보를 표시해 주는 것으로 실제 Exception이 발생하였다는 의미는 아닙니다.
Propagation을 "not-supported"로 무조건 transaction없이 호출되는 방식으로 기존 transaction 안에서 호출된 메소드가 종료될 떄까지 대기하는 방식입니다. (일반적으로 잘 적용하지 않는 방식)
read-only="true" 부분도 실제로 read-only로 처리하는 것이 아니라 JDBC Driver에서 read-only hint를 제공하는 것인데 실제 JDBC Driver에 따라 read-only 처리가 되지 않는 경우가 많습니다. (Oracle의 경우도 처리되지 않음)
이전에도 답변드렸듯이 최대한 transaction 자체를 호출하지 않도록 AOP의 pointcut 자체에 대해 메소드 단위로 insert*, delete*, update* 만 적용하시는 것이 좋으실 것 같습니다.
그럼, 즐거운 하루되십시오.
감사합니다.
DEBUG 로그는 transaction이 시작될 때에 표시되는 디버그성 로그입니다. 뒤쪽 "-Exception"은 Exception이 발생되면 rollback 시킨다는 transaction에 대한 설정 정보를 표시해 주는 것으로 실제 Exception이 발생하였다는 의미는 아닙니다.
Propagation을 "not-supported"로 무조건 transaction없이 호출되는 방식으로 기존 transaction 안에서 호출된 메소드가 종료될 떄까지 대기하는 방식입니다. (일반적으로 잘 적용하지 않는 방식)
read-only="true" 부분도 실제로 read-only로 처리하는 것이 아니라 JDBC Driver에서 read-only hint를 제공하는 것인데 실제 JDBC Driver에 따라 read-only 처리가 되지 않는 경우가 많습니다. (Oracle의 경우도 처리되지 않음)
이전에도 답변드렸듯이 최대한 transaction 자체를 호출하지 않도록 AOP의 pointcut 자체에 대해 메소드 단위로 insert*, delete*, update* 만 적용하시는 것이 좋으실 것 같습니다.
그럼, 즐거운 하루되십시오.
감사합니다.