반응형
# 목적
- mybatis 쿼리 캐싱에 대해 알아보기
❓ mybatis 쿼리 캐싱
- 거의 변경되지 않거나 고정된 값을
ex) 상품 카테고리
데이터베이스에서 자주 조회하는 경우, mybatis의 쿼리 캐싱 기능을 사용하면 데이터베이스 액세스 부하를 줄일 수 있다. - 다수의 사용자가 동시에 데이터를 조회할 때 효과적
쿼리 캐싱 적용하기
- SQL Mapper 파일에
<cache />
태그를 추가한다.- 해당 Mapper 파일에 정의된 모든
<select>
구문에 대해서 쿼리 캐싱이 적용된다. - 해당 Mapper 파일에 정의된
<insert>, <update>, <delete>
구문이 실행되면
그 Mapper 파일의 캐시가 전부 비워진다.
- 해당 Mapper 파일에 정의된 모든
📌 <cache />
태그의 주요 속성
```xml
<cache
eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>
```
1. eviction
- 캐시전략을 설정하는 속성
- 사용가능한 값
- LRU(Least Recently Used) : 가장 오랜시간 사용하지 않는 객체를 제거
- FIFO(First In First Out) : 캐시에 들어온 순서대로 객체를 제거
- SOFT(Soft Reference) : 가비지 컬렉터의 상태와 강하지 않은 참조(Soft References)의 규칙에 기초하여 객체를 제거
- WEAK(Weak Reference) : 가비지 컬렉터의 상태와 약한 참조(Weak References)의 규칙에 기초하여 점진적으로 객체 제거
2. flushInterval
- 캐시가 자동으로 비워지는 시간 간격을 밀리초 단위로 설정한다.
(기본값 : 없음)
- 숫자값은 반드시 양의 정수로 설정한다.
- 시간은 너무 길게 설정하지 않는 것이 좋다.
3. size
- 캐시의 크기를 지정한다.
(기본값 : 1024)
4. readOnly
- 읽기 전용 캐시여부를 설정한다.
(기본값 : false)
- true로 설정하면 모든 호출자에게 캐시된 객체의 같은 인스턴스를 리턴한다.
그 객체는 변경할 수 없다.
❗ 주의사항
- 테이블마다 Mapper를 따로 구현한다.
- 데이터를 추가/변경/삭제하는 SQL 구문은 그 테이블의 Mapper 파일에만 구현한다.
참고)
- 해당 매퍼파일에서 특정 구문에만 쿼리 캐싱을 적용하고 싶지 않다면
useCache 속성의 값을 "false"로 설정하면 된다.(자주 바뀌는 구문이라면 쿼리 캐싱을 적용하지 않는 게 나을 수 있다.)
- ex)
<select id="getAllCompanies"
resultType="com.sample.vo.Company"
useCache="false">
select
company_no as no,
company_name as name,
company_tel as tel,
company_zipcode as zipcode,
company_address1 as address1,
company_address2 as address2
from
shop_companies
order by
company_name asc
</select>
< 해당 글은 velog에서 이전하며 옮겨온 글로, 가독성이 좋지 않을 수 있는 점 양해 부탁드립니다. >
🔗 velog 버전 보기 : https://velog.io/@ryuneng2/Spring-mybatis-쿼리-캐싱
'BackEnd > Spring' 카테고리의 다른 글
[Spring] 게시판 등록 폼 기본 순서 정리(Feat. Builder 메소드 체이닝) (0) | 2025.01.17 |
---|---|
[Spring] 게시판 리스트의 모든 데이터 조회 기본 순서 정리 (1) | 2025.01.17 |
[Spring] mybatis의 동적 쿼리 (0) | 2025.01.17 |
[Spring] Spring MVC의 주요 컴포넌트(Model, View 전달 과정) (0) | 2025.01.17 |
[Spring] 코드 작성 순서 (0) | 2025.01.17 |