[java] MyBatis에서 캐시 사용하기

MyBatis는 많은 쿼리를 실행할 때 데이터베이스 부하를 줄이기 위해 캐시를 사용할 수 있는 기능을 제공합니다. 캐시는 반복적으로 실행되는 쿼리 결과를 메모리에 저장하여 다음에 동일한 쿼리가 실행될 때 데이터베이스에 접근하지 않고 바로 결과를 반환합니다. 이를 통해 쿼리의 성능을 향상시킬 수 있습니다.

MyBatis에서 캐시를 사용하기 위해서는 다음과 같은 단계를 수행해야 합니다.

캐시 설정하기

먼저, MyBatis 설정 파일에 캐시 관련 설정을 추가해야 합니다.

<configuration>
    <!-- ... -->
    
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>
    
    <!-- ... -->
</configuration>

위의 예제에서는 cacheEnabled 속성을 true로 설정하여 캐시를 사용하도록 합니다.

Mapper에서 캐시 사용하기

캐시를 사용할 Mapper에 다음과 같이 useCache 속성을 추가합니다.

<mapper namespace="com.example.MyMapper">
    <!-- ... -->
    
    <select id="getUsers" resultType="com.example.User" useCache="true">
        SELECT * FROM users
    </select>
    
    <!-- ... -->
</mapper>

위의 예제에서는 getUsers 쿼리를 실행할 때 캐시를 사용하도록 설정했습니다. useCache 속성을 true로 설정하면 해당 쿼리 결과가 캐시에 저장되고, 동일한 쿼리가 실행될 때는 캐시에서 결과를 반환합니다.

캐시 옵션 설정하기

캐시에 대한 상세한 옵션을 설정하려면 cache 요소를 사용합니다. cache 요소에는 다음과 같은 속성을 설정할 수 있습니다.

예를 들어, 다음과 같이 캐시를 구체적으로 설정할 수 있습니다.

<cache type="org.mybatis.caches.ehcache.EhcacheCache">
    <property name="size" value="100"/>
    <property name="flushInterval" value="30000"/> <!-- 30초마다 캐시 비우기 -->
</cache>

위의 예제에서는 EhcacheCache를 캐시 구현체로 사용하고, 캐시의 크기는 100으로 설정하고 30초마다 캐시를 비우도록 설정했습니다.

참고 자료