반응형
MyBatis는 효율적인 캐싱 메커니즘을 제공하여 데이터베이스 부하를 줄이고 성능을 개선할 수 있습니다. 오늘은 MyBatis에서 제공하는 1차 캐시와 2차 캐시를 활용하는 방법을 배워봅니다.
1. 캐싱의 필요성
데이터베이스에서 같은 데이터를 반복적으로 조회하는 경우, 캐싱을 활용하면 다음과 같은 이점이 있습니다:
- 응답 시간 단축: 동일한 요청 시 캐시 데이터를 반환하여 빠른 응답을 제공합니다.
- 데이터베이스 부하 감소: 중복 쿼리를 줄여 데이터베이스 부하를 경감합니다.
2. MyBatis의 캐시 종류
MyBatis는 두 가지 수준의 캐시를 지원합니다:
1차 캐시 (Session Cache)
- 범위: SQL 세션(SqlSession) 범위에서 유효.
- 동일한 세션 내에서 실행된 쿼리 결과를 캐싱.
- 자동으로 활성화됨.
2차 캐시 (Mapper Cache)
- 범위: Mapper 단위에서 여러 세션 간에 공유.
- 수동으로 설정해야 활성화됨.
- 더 넓은 범위에서 캐싱 효과를 제공.
3. 1차 캐시 활용
(1) 기본 동작
1차 캐시는 기본적으로 활성화되어 있으며, 동일한 SqlSession 내에서 동일한 쿼리를 수행하면 캐시된 결과를 반환합니다.
(2) 예제 코드
SqlSession session = sqlSessionFactory.openSession();
try {
Employee employee1 = session.selectOne("findEmployeeById", 1);
Employee employee2 = session.selectOne("findEmployeeById", 1); // 캐시 사용
System.out.println(employee1 == employee2); // true
} finally {
session.close();
}
4. 2차 캐시 활성화
(1) Mapper 설정
Mapper XML 파일에서 <cache> 태그를 추가합니다.
<mapper namespace="com.example.mapper.EmployeeMapper">
<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>
</mapper>
- eviction: 캐시 제거 정책(LRU, FIFO 등).
- flushInterval: 캐시 갱신 간격(ms).
- size: 캐시 객체 수 제한.
- readOnly: 읽기 전용 여부 설정.
(2) MyBatis 설정 파일
mybatis-config.xml에서 2차 캐시를 활성화해야 합니다.
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
5. 주의점
- 1차 캐시 무효화: INSERT, UPDATE, DELETE를 실행하면 1차 캐시가 무효화됩니다.
- 2차 캐시 무효화: Mapper 레벨에서 변경이 발생하면 캐시가 갱신됩니다.
- 캐싱 적합성 판단: 캐싱이 모든 상황에서 유효하지 않을 수 있으므로 사용 시 주의가 필요합니다.
6. 실무 적용 사례
(1) 자주 조회되는 데이터
- 코드 테이블, 공통 데이터 등 변경 빈도가 낮고 조회 빈도가 높은 데이터.
(2) 읽기 전용 데이터
- 읽기 전용 데이터를 캐싱하면 성능을 더욱 극대화할 수 있습니다.
반응형
'개발 > 전자정부프레임워크' 카테고리의 다른 글
JDBC 배치 처리와 성능 최적화 (0) | 2025.01.02 |
---|---|
JDBC를 사용한 트랜잭션 처리 심화 학습 (0) | 2025.01.02 |
MyBatis에서 1:N 관계 매핑 (3) | 2025.01.01 |
MyBatis ResultMap 활용하기 (0) | 2025.01.01 |
MyBatis 동적 SQL 활용하기 (0) | 2025.01.01 |