[스프링 3.1 Cache] 테스트하기

캐시 기능을 테스트 하는 방법을 간단하게 소개합니다.

캐시에 들어있는지 없는지 확인하면 되겠죠. 쉽게, CacheManager라는 것을 사용하면 됩니다. 어차피 스프링 캐시를 사용하려면 등록해야 하는 빈입니다. CacheManager는 인터페이스이고, 사용하려는 캐시에 따라 다른 CacheManager 빈을 등록해야 하죠. EhCache를 사용한다면, EhCacheCacheManager를 등록해야 합니다.

스프링 레퍼런스에도 EhCache를 사용하는 경우의 예제 코드를 제공하고 있는데요. 지금 스프링 레퍼런스 문서에 있는 코드는 소소한 문제가 있습니다. 버그 리포팅을 했으니 조만간 고쳐질 겁니다.

[xml]
<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="ehcache"/>
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:/ehcache.xml"/>
[/xml]

이런식으로 빈을 등록하게 되지요. 여기서 cachaManager라는 빈 id는 cache:annotation-driven에서 사용하는 기본값이기 때문에 되도록이면 cacheManager라고 id를 적어주는게 좋겠습니다. 물론 원하는 이름을 적은 뒤에 cache:annotation-driven에 cache-manager라는 속성에 명시해주어도 됩니다.

그리고 테스트는 이렇게 할 수 있습니다.

[java]
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/applicationContext.xml")
public class MemberServiceImplTest {

@Autowired MemberService service;
@Autowired CacheManager cacheManager;

@Test
public void getMemberCache(){
//GIVEN
Cache memberCache = cacheManager.getCache("member");

//WHEN
service.getAMember(1);
//THEN
assertThat(memberCache.get(1), is(notNullValue()));

//WHEN
service.getAMember(2);
//THEN
assertThat(memberCache.get(2), is(notNullValue()));

//WHEN
service.getAMember(3);
//THEN
assertThat(memberCache.get(3), is(notNullValue()));
}
[/java]

참 쉽죠?

2 thoughts on “[스프링 3.1 Cache] 테스트하기”

  1. 최근에 EhCache 를 간단한 프로젝트에 적용하고 테스트 해보고 있는데 간단하면서도 흥미있더군요..

    근데 실제 필드에서는 이런 형태의 캐쉬프레임웍을 얼마나 많이 활용하고 있는지도 궁금해 집니다.
    대용량 시스템에서 퍼포먼스에 도움을 줄거라고 생각되면서도
    한편으로는 메모리나 다른 부분에서의 취약점에 있어서 어느정도까지 안정성을 제공해 주는지도 궁금하구요..

    아뭏든 결과가 좋다면 이런 캐쉬프레임웍을 앞으로도 많이 활용하고 싶습니다.

    1. 캐시는 많이 사용되고 있는 것 같습니다. 그 반증으로 여러 캐시 오픈소스를 볼 수 있죠. EhCache 뿐 아니라, Memcached도 많이 사용되구요. Redis같은 key-value DB를 캐시용으로 사용하기도 하죠. 대부분 DB로 몰리는 부하를 줄이는데 사용하고 있을 겁니다.

Leave a Reply

Your email address will not be published. Required fields are marked *