ibatis cacheModel 테스트

프로그래밍/iBatis 2009. 12. 13. 15:01

cacheModel 사용에 의한 성능향상을 파악해보기 위해 아래와 같은 테스트를 실시하였다.

<cacheModel id="person-cache" type="LRU">
	<flushInterval hours="24"/>
	<property name="size" value="100"/>
</cacheModel>

위 코드는 ibatis Person.xml 설정된 cacheModel 설정이다. 
그리고 테스트시 <SqlMapConfig> 내 <settings> 속성중 cacheModelEnabled 속성은 true 이어야 한다.
cacheModel 의 설정 및 적용 방법은 ibatis 매뉴얼을 참고...
		Example ex = new Example();
		// ex.insertPerson();
		Person person = null;
		long start = System.currentTimeMillis();
		for( int i=0; i < 1000; i++)
		{
			person = ex.getPerson(1);
			System.out.println( person.getId());
		}
		System.out.println( System.currentTimeMillis() - start);

위 코드는 ibatis 튜토리얼에 나와 있는 예제를 대상으로 테스트 하였다.
단순하게 db 에 저장된 데이터를 1000 번 가져오는 테스트이다.
테스트 결과 cacheModel 을 사용했을때 성능향상을 가져온다는 결과를 보여줬다. 그것도 많이....

[결과]
cacheModel 미적용 : 7558
cacheModel 적용 : 1366


거의 6배 정도의 향상을 보여줬다.
테스트 도중 알게된 사실인데 cacheModel 을 적용하게 되면 resultObjectFactory 가 호출되지 않는다.
결과적으로 ibatis 에 resultObjectFactory 가 설정되어 있을 경우 ibatis 는 resultObjectFactory 가 리턴한 객체를 캐시하는 것으로 보인다.

물론 실제 적용에서는 저렇게 1000번을 가져오는 사례는 존재하지 않겠지만 ibatis 를 적용하면서 cacheModel 을 사용하는것도 좋을 거라고 생각한다.
: