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

MyBatis는 많은 개발자들이 선호하는 ORM(Object-Relational Mapping) 프레임워크입니다. 하지만 MyBatis의 성능을 최적화하기 위해서는 데이터베이스 쿼리의 결과를 캐싱하는 것이 중요합니다. 이번에는 MyBatis에서 Redis를 캐시로 사용하는 방법에 대해 알아보겠습니다.

1. Redis 설정

먼저 Redis를 설치하고 실행해야 합니다. Redis를 설치하려면 Redis 공식 웹사이트에서 다운로드하여 설치합니다. Redis가 실행 중인지 확인하기 위해 다음과 같이 명령을 실행합니다.

redis-cli ping

만약 Redis가 실행 중이라면 “PONG”이라는 응답을 받을 수 있습니다.

2. Redis 의존성 추가

MyBatis에서 Redis를 사용하기 위해서는 Redis 의존성을 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음과 같이 의존성을 추가합니다.

<dependencies>
    ...
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.3.0</version>
    </dependency>
    ...
</dependencies>

Gradle을 사용하는 경우, build.gradle 파일에 다음과 같이 의존성을 추가합니다.

dependencies {
    ...
    implementation 'redis.clients:jedis:3.3.0'
    ...
}

의존성을 추가한 후, 프로젝트를 다시 빌드해야 합니다.

3. RedisCache 설정

Redis 캐시를 사용하기 위해 MyBatis에서 제공하는 Cache 인터페이스를 구현해야 합니다. Redis 캐시를 구현한 RedisCache 클래스는 Jedis라는 Redis 클라이언트를 사용하여 Redis 서버와 통신합니다.

import org.apache.ibatis.cache.Cache;
import redis.clients.jedis.Jedis;

public class RedisCache implements Cache {
    private final String id;
    private Jedis jedis = new Jedis("localhost");

    public RedisCache(String id) {
        this.id = id;
    }

    @Override
    public String getId() {
        return id;
    }

    @Override
    public void putObject(Object key, Object value) {
        jedis.set(key.toString(), value.toString());
    }

    @Override
    public Object getObject(Object key) {
        return jedis.get(key.toString());
    }

    @Override
    public Object removeObject(Object key) {
        return jedis.del(key.toString());
    }

    @Override
    public void clear() {
        jedis.flushDB();
    }

    @Override
    public int getSize() {
        return Integer.parseInt(jedis.dbSize().toString());
    }
}

위의 예제에서는 Redis 서버의 주소를 "localhost"로 설정하고, putObject(), getObject(), removeObject(), clear(), getSize() 메서드를 구현하였습니다.

4. MyBatis 설정

마지막으로, MyBatis 설정 파일(mybatis-config.xml)에서 Redis 캐시를 사용할 수 있도록 설정해야 합니다. Redis 캐시를 사용하려면 <cache/> 엘리먼트를 추가하고 type 속성에 RedisCache 클래스를 지정해야 합니다.

<configuration>
    ...
    <cache type="com.example.RedisCache"/>
    ...
</configuration>

위의 예제에서는 com.example.RedisCache는 RedisCache 클래스의 패키지 경로입니다. 실제 패키지 경로는 프로젝트에 맞게 수정해야 합니다.

마무리

이제 MyBatis에서 Redis를 캐시로 사용하는 방법에 대해 알아보았습니다. Redis를 캐시로 사용하면 MyBatis의 성능을 향상시킬 수 있습니다. 또한 Redis를 사용함으로써 좀 더 효율적인 캐싱 전략을 구현할 수 있습니다.

더 많은 정보를 원하는 경우, MyBatis 공식 문서Redis 공식 문서를 참고하시기 바랍니다.