Backend Development/SPRING

[Spring] Spring Cache

foreverWon 2025. 10. 21. 09:38
목차

    1. Spring Cache 주요 어노테이션

    • @Cacheable
      • 캐시가 없을 경우 메서드를 실행하고 그 결과를 캐시에 저장
      • 캐시가 있으면 메서드를 실행하지 않고 캐시의 데이터 반환
    • @CachePut
      • 캐시를 조회하지 않고 항상 메서드를 실행하여 메서드 결과로 캐시 업데이트
    • @CacheEvict
      • 특정 키를 가진 캐시 데이터 제거

    2. @Cacheable

    목적

    • 데이터 조회 및 저장
    • 데이터 조회 시, 반복적으로 DB에 접근하는 것을 피하고 캐시를 활용하여 성능 향상

    동작 방식

    1. 메서드가 호출되면 key에 해당하는 캐시가 있는지 확인
    2. 캐시 데이터 O: DB 접근 없이 캐시 데이터 즉시 반환
    3. 캐시 데이터 X: 메서드를 실행 → 반환된 결과를 key와 함께 캐시에 저장 → 반환

    사용 시점

    • 자주 변경되지 않는 데이터 조회
      • 메뉴, 카테고리 등 자주 변경되지 않는 정적 데이터 조회 시 유용
    • 성능 향상
      • DB 조회 빈도가 높은 경우, 캐시를 활용하여 성능 개선 가능

    3. @CachePut

    목적

    • 캐시 업데이트
    • 데이터가 변경되었을 때 캐시를 무조건 업데이트하여 최신 상태 유지
    • @Cacheable과 함께 사용되어 조회와 업데이트를 동시에 처리할 때 유용

    동작 방식

    1. 항상 메서드 실행 + DB 조회
    2. 메서드 실행 후 반환된 값으로 해당 key의 캐시 값 업데이트

    사용 시점

    • 데이터 업데이트
      • 데이터가 변경될 때마다 캐시된 값도 최신 데이터로 갱신해야 하는 경우 사용
    • @Cacheable과 함께 사용 시 @CachePut이 실행되면 캐시에 새로운 데이터가 존재하게 되어 다음 @Cacheable 호출 시 DB 조회 X

    4. @CacheEvict

    목적

    • 캐시 삭제
    • 특정 데이터가 삭제되거나 변경되었을 때, 캐시에서 해당 데이터를 즉시 제거하여 다음 요청 시 DB에서 데이터를 다시 가져오도록 강제

    동작 방식

    1. 지정된 key에 해당하는 캐시 항목 삭제
    2. beforeInvocation 속성을 사용하여 호출 전에 캐시를 비울지, 메서드 실행 후에 비울지 제어 가능
    3. allEntries = true 옵션을 사용하여 해당 캐시의 모든 데이터 삭제 가능
    4. 캐시가 비워진 후 같은 데이터를 요청하면 Cacheable 동작을 통해 다시 DB에서 가져와 캐시를 채움

    사용 시점

    • 데이터 삭제 또는 변경 후 캐시 무효화
      • 데이터가 삭제되거나 변경될 때, 관련된 캐시를 무효화하여 다음 조회 시 신규 데이터를 가져오도록 함
    728x90