티스토리 뷰

여러가지 비지니스에서 넘어온 정보를 DB에 처리할 업무가 많은 경우 DAO에선 preparedStatment를 받아 반복문을 통해 계속 쿼리를 보내는 패턴을 사용한다. 물론 트랜잭션으로 묶어 처리 한다.

예를들어 한번에 100명의 정보가 들어오는데 100명중 단 1명이라도 처리도중 문제가 발생해 정상처리 되지 않는다면 나머지 99명의 데이터도 처리되어선 안되고 이전상태로 되돌려야 할 경우가 그렇다. 이런경우 흔히 사용하는게 Connection.autoCommit(false);를 이용해 자동으로 커밋되는것을 해제. 처리 후 정상처리 되었을 경우  Connection.commit();하고 그렇지 않고 에러가 나거나 할 경우 Connection.rollback();하여 처리하는 경우다.

iBATIS에서도 이러한 트렌잭션을 지원하는데 방법을 구현하기 위해 기존에 사용한 Manager를 조금 수정하고 작성했다.

DBManager.java

TransactionBiz.java

StartApp.java

트렌잭션 시작과 종료(커밋하지 않으므로 롤백. 적용안함.) 적용(commit)를 위해 외부에 호출하는 메소드를 추가했다. 평소 DAO에서 많이 사용해온 방식대로 트랜잭션을 시작하고 처리가 정상적으로 끝나면 트랜잭션 커밋을 수행 한다. 단, 예외적 상황이 발생할 경우 트랜잭션을 커밋하지 않고 종료 한다.

이번엔 좀 더 일괄처리에 유용한 방법을 말하고자 한다. 바로 일괄처리(배치) 부분인데 .. 흔히 알고있는 배치라 함은 메인과 별도로 백단에서 작업을 처리하고, 처리완료 후 결과를 알려주는 방식이다. 보통 처리량이 많을 경우. 혹은 사용자가 오래걸리는 작업을 수행하고 계속 완료되길 기다릴 수 없는 경우에 이러한 방법을 많이 사용 한다.

이와 조금 다르게 iBATIS에선 별도로 백단에서 수행되는 것은 아니다. 하지만 데이터 량이 많은 정보를 하나의 트랜잭션을 물고 일일이 누적시키는게 아니라 실제 쿼리 수행은 하지 않고 작업을 준비하다 executeBatch();를 수행하면 이때 작업을 일괄적으로 수행 한다.

따라서 배치를 처리하는 중에는 실제 sql을 수행하지 않으므로 작업 내용의 SQLException등이 발생하지 않는다.(실제 db에 수행하지 않는다.) 처리 후 executeBatch()를 만나 배치를 수행할때 실제 쿼리가 수행되는 것이다. 코드는 다음과 같다.

TransactionBiz.java

그외의 코드는 위와 같아 별도로 작성하지 않았다. 단순히 트랜잭선 내부에서 블럭을 이루듯 배치를 시작하고, 배치를 실행하는 두개의 문장만 추가 되었다. 배치를 통해 성능향상이 어느정도 되었는지 확인하기위해 결과값을 보면 다음과 같다.

 배치작업 적용 전
9702 ms
 배치작업 적용 후
2546 ms

시스템에 따라 약간의 차이는 있을 수 있겠지만 1만건을 기준으로 이정도의 성능 차이라면 대단히 큰 차이라 할 수 있다. 데이터 량이 많은 경우 배치작업은 필수라 할 수 있다. iBATIS에선 그것마저 두줄의 코드로 구현이 가능하다.
댓글
  • 프로필사진 해적이 iBATIS 관련된 내용이 많은 도움이 되네요^^ 고맙습니다~ ^^
    질문이 하나 있는데요.. 올려져 있는 DBManager.java를 그대로 적용해 보았습니다.
    그런데 적용해서 컴파일을 하면 문제없이 되는데요.. Runtime을 하게 되면 java.lang.NullPointerException이 떨어지더군요.. startTransaction()에서요...
    왜 이렇게 NullPointerException이 떨어지는지 아무리 생각해도 잘 모르겠어서 이렇게 질문을 남깁니다~
    좋은 자료 내용 감사합니다~
    2009.06.08 19:47
  • 프로필사진 Pupustory 음~ 글쎄요~
    코드는 문제 없어을텐데;
    소스를 제가 볼수 있을지요~
    2009.06.08 22:18 신고
댓글쓰기 폼
Total
515,785
Today
56
Yesterday
85
«   2019/05   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
글 보관함