리눅스/Window10 Arch Linux

Window 10 Intellij Maven으로 생성한 SpringBoot 프로젝트 캐시 사용 설정

차세대 IT 리더 비공자 2024. 8. 20. 15:49

 

목록

1. application.properties 캐시 사용 설정

2. MyBatis 캐시 관리 개념

3. 캐시 무효화( Cache Invalidation )

4. 캐시 사용 시 주의사항

5. 최종 정리


1. application.properties 캐시 사용 설정

# =====================
# = 캐시 사용 설정
# =====================
mybatis.configuration.cache-enabled=true

이 설정은 MyBatis의 2차 캐시 기능을 활성화하는 설정입니다.

MyBatis에서 2차 캐시는 SQL 쿼리의 결과를 메모리에 저장해두고,

동일한 쿼리가 반복될 때 캐시에 저장된 결과를 사용하여 데이타베이스에

불필요한 쿼리를 줄여주는 역할을 합니다.

이 설정이 활성화(true)되면 동일한 쿼리에 대해 캐시된 결과를 반환하므로

성능이 크게 향상될 수 있습니다. 하지만, 캐시를 사용할 경우, 데이터 변경이

발생했을 때, 캐시가 갱신되지 않으면 부정확한 데이터를 반환할 수 있으므로

캐시 갱신 정책을 적절히 관리해야 합니다.

 

 

2. MyBatis 캐시 관리 개념

MyBatis에서 캐시는 두 가지 수준에서 관리됩니다.

1차 캐시 ( Per-SQLSession Cache )

1. 각 SQL 세션에서 발생하는 쿼리 결과를 캐싱합니다.

2. 같은 SQL 세션 내에서 동일한 쿼리를 여러 번 실행할 때, 데이터베이스를

    다시 조회하지 않고 캐시에 저장된 데이터를 변환합니다.

3. 이 캐시는 기본적으로 활성화되어 있으며, 세션이 닫히거나 종료될 때,

    캐시가 사라집니다.

 

2차 캐시( Per-Mapper Cache )

1. 각 Mapper 수준에서 발생하는 쿼리 결과를 캐싱합니다.

2. 같은 Mapper 내에서 동일한 쿼리를 여러 번 실행할 때, 2차 캐시에 저장된

    데이터를 반환합니다.

3. 2차 캐시는 영속적이고, 같은 Mapper를 사용하는 여러 SQL세션 간에

    캐시를 공유합니다.

4. "mybatis.configuration.cache-enabled=true"설정을 통해

    2차 캐시를 활성화할 수 있습니다.

 

3. 캐시 무효화( Cache Invalidation )

자동 캐시 무효화

MyBatis는 기본적으로 "INSERT", "UPDATE", "DELETE"와 같은 데이터 수정 작업이

발생할 때, 해당 Mapper에 대한 2차 캐시를 자동으로 무효화합니다.

즉, 데이터가 변경될 때 캐시된 결과는 자동으로 제거되어, 다음 쿼리에서는

최신 데이터를 가져오게 됩니다.

 

수동 캐시 무효화

특정 상황에서는 개발자가 수동으로 캐시를 무효화하거나 캠시된 데이터를

갱신해야 하는 경우가 있을 수 있습니다. 예를 들어,

명시적으로 "flushCache" 옵션을 사용하여 쿼리가 실행될 때마다 캐시를

비우도록 할 수 있습니다.

<select id="findUser" resultType="User" flushCache="true">
  SELECT * FROM users WHERE id = #{id}
</select>

"flushCache=true" 옵션은 쿼리 실행 시마다 캐시를 비웁니다. 이 옵션을 사용하면

캐시에 남아있는 오래된 데이터가 문제를 일으키지 않도록 할 수 있습니다.

 

 

4. 캐시 사용 시 주의사항

주의사항 설명
데이터 일관성 캐시된 데이터가 오래된 상태가 되지 않도록 적절한 캐시 무효화 정책을
설계해야 합니다.
캐시 크기 및 메모리 관리 캐시가 차지하는 메모리를 관리하기 위해 캐시의 크기를 제한하거나,
특정 시간 후, 자동으로 무효화하는 정책을 사용할 수 있습니다.
성능 테스트 캐시 사용이 실제로 성능 향상에 기여하는지 확인하기 위해, 
캐시를 사용한 경우와 사용하지 않은 경우의 성능을 비교하는 테스트가 필요

 

 

캐시 관리에 대한 예시

mapper.xml파일에서 설정
<cache
  eviction="LRU"
  flushInterval="600000" ( 제한시간 10분 , 예제에서는 60초 )
  size="512"
  readOnly="true"/>


eviction="LRU"
Least Recently Used 방식으로 캐시에서 오래된 항목을 제거합니다.

 flushInterval="600000" ( 제한시간 10분 )
캐시를 10분마다 자동으로 플러시(무효화) 합니다.

 size="512"
캐시의 최대 항목 수를 512개로 제한합니다.

readOnly="true"
읽기 전용 캐시로 설정하여, 여러 스레드에서 안전하게 캐시를 공유할 수 있습니다.

 

 

5. 최종 정리

<cache> 태그는 MyBatis Mapper XML 파일에서 사용되며,

이 파일에서 정의된 쿼리에 대해 2차 캐시를 관리하는 설정을 제공합니다.

이를 통해 특정 Mapper에 대한 캐시 정책을 세부적으로 조정할 수 있습니다.

각 Mapper XML 파일마다 개별적으로 <cache>태그를 설정할 수 있으며

캐시가 필요한 경우에만 설정하면 됩니다.