이번에 mybatis를 이용해서 디비에 데이터를 insert 하는 부분을 작성하고 있는데요.
public void insertList(List<Map<String, String>> list) {
for(Map<String, String> map : list) {
mapper.insertMap(map);
}
}
위의 메소드를 이용하여 200건의 데이터를 입력을 하면 3000ms정도 걸리는데요, 여기에 트랜잭션을 걸고 싶어 insertList메소드에 @Transactional 어노테이션을 걸면 속도가 200ms로 끝나버립니다.
로그를 보면 어노테이션이 안 붙어있을땐
쿼리
파라미터
쿼리
파라미터
형식으로 찍혀 한건한건 처리되고 커밋되는것처럼 보이는데, 어노테이션을 붙이면
쿼리
파라미터
파라미터
파라미터
파라미터
.....
로 찍히면서 마지 Mybatis의 batch 처럼 동작을 하게 되는데요,
왜 이렇게 동작하는것일까요?
처음에 제가 생각한 것은Transactional을 붙여주면 더 느려질것 같다 라는게 제 생각이었는데, 완전히 다른 결과가 나와버리니 신기하기도 하고 이상하기도 하고 하네요~^^;;