본문 바로가기
DevLog/Redis

[Redis] Redis 정리 #3 - 캐시 적용과 @Cacheable 사용법

by sunsetk 2025. 7. 20.

📖 이 글은 Redis 공식 문서 및 Spring Data Redis 문서를 기반으로 작성되었습니다.
💡 Java 기반 실무 개발 관점에서 캐시 전략과 @Cacheable 사용법을 정리합니다.

 


🔹 왜 Redis 캐시를 사용하는가?

이유 설명
속도 향상 DB 호출을 줄여 응답 속도 개선
부하 분산 자주 조회되는 데이터는 Redis에 저장해 DB 부하 감소
TTL 설정 가능 데이터 만료를 설정해 메모리 사용을 제어 가능
비동기 연산 캐싱 계산 결과, AI 응답 등 캐싱 가능
 

🔹 캐시 적용 방식 비교


 

방식 설명 실무 사용
RedisTemplate 수동 설정 직접 key-value로 캐시 처리 커스터마이징 필요할 때
@Cacheable 어노테이션 스프링 추상화 기반 캐시 처리 가장 보편적 방식
@CacheEvict, @CachePut 캐시 삭제/갱신 처리 데이터 변경 시 사용
 

🔹 @Cacheable 기본 사용법

@Cacheable(value = "user", key = "#userId")
public UserDto getUserById(Long userId) {
    // 실제 DB 호출
    return userRepository.findById(userId);
}
  • value: Redis에서 사용할 캐시 이름 (prefix처럼 사용됨)
  • key: 캐시 키
  • 첫 실행 시 DB 조회 → Redis 저장 → 이후에는 Redis에서 조회

🔹 캐시 TTL 설정 방법

# application.yml
spring:
  cache:
    type: redis
  redis:
    time-to-live: 600000  # milliseconds → 10분

 

또는 직접 설정:

@Bean
public RedisCacheConfiguration redisCacheConfiguration() {
    return RedisCacheConfiguration.defaultCacheConfig()
        .entryTtl(Duration.ofMinutes(10))
        .disableCachingNullValues();
}

🔹 캐시 삭제 & 갱신

@CacheEvict(value = "user", key = "#userId")
public void deleteUser(Long userId) {
    // 삭제 시 캐시도 제거
}
@CachePut(value = "user", key = "#user.id")
public UserDto updateUser(UserDto user) {
    // 업데이트된 결과를 캐시에 바로 반영
    return userRepository.save(user);
}
 

🔹 실무에서 자주 쓰는 패턴

  • 읽기 많은 데이터는 캐시로 관리
    • ex) 상품 상세정보, 유저 프로필, 공지사항 등
  • 쓰기/수정이 잦은 데이터는 캐시보다 DB 우선
    • 캐시 무효화 전략 필요
  • TTL은 필수!
    • 실시간성이 필요 없으면 10분~1시간 캐싱 적절

🔹 Java에서 캐시 키 관리 전략

  • 단순 키: "user" + #id
  • 복합 키: "user:" + #id + ":" + #type
  • 자동 키 생성 전략: SimpleKeyGenerator, 직접 커스터마이징 가능

 마무리

@Cacheable은 Redis를 실무에서 가장 쉽게 적용하는 방법 중 하나다.
Spring과의 연동이 잘 되어 있고 TTL, 무효화 처리도 유연하다.