📖 이 글은 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, 무효화 처리도 유연하다.
'DevLog > Redis' 카테고리의 다른 글
🚨 Docker로 Redis 실행 시 포트 충돌 에러 해결하기 (bind: address already in use) (2) | 2025.08.28 |
---|---|
🚨 Spring Boot + Redis 연결 오류: RedisConnectionFailureException: Unable to connect to Redis (0) | 2025.08.20 |
[Redis] Redis 정리 #2 - 자료구조와 명령어 (0) | 2025.07.20 |
[Redis] Redis 정리 #1 - 개념과 특징 (0) | 2025.07.20 |