홈 › 실무 확장 › 18 / 22

로컬 캐시와 @Cacheable

TTL, 크기 제한, 스탬피드 방지, 무효화, Caffeine 설정
섹션 7진행 0 / 22

로컬 캐시와 @Cacheable — TTL, 스탬피드 방지, 무효화 전략

코드 테이블·권한처럼 자주 읽고 거의 안 바뀌는 데이터를 메모리에 잠깐 담아 DB 부하를 줄이는 로컬 캐시를, JDK 만으로 직접 만들어 보고 Spring @Cacheable 대응까지 정리합니다.

1. 왜 배우는가

사내 업무 시스템에는 화면을 열 때마다 조회하지만 하루에 한두 번 바뀔까 말까 한 데이터가 많습니다. 부서 코드, 공통 코드 테이블, 메뉴 권한, 시스템 설정값이 대표적입니다. 이런 데이터를 매 요청마다 Oracle 에 SELECT 로 물어보면, 실제로 바뀌지도 않는 값 때문에 DB 커넥션 풀과 네트워크 왕복 시간을 낭비합니다.

로컬 캐시는 이 낭비를 없애는 가장 간단한 방법입니다. 애플리케이션 메모리(JVM 힙)에 값을 잠깐 담아 두고, 같은 키로 다시 조회하면 DB 대신 메모리에서 바로 돌려줍니다. Redis 같은 별도 서버 없이 라이브러리 하나(Caffeine)나 직접 만든 Map 으로도 충분한 경우가 많습니다.

이 레슨은 캐시를 직접 만들어 보면서 TTL, 크기 제한, 스탬피드 방지, 무효화 같은 핵심 개념을 익히고, Spring Boot 에서 @Cacheable 로 같은 일을 어떻게 선언적으로 하는지 정리합니다. 코드는 java-src/extension/18_cache 에 있고 Main·Cache 두 파일로 구성됩니다.