캐시란 동일한 요청이 들어오면 복잡한 작업을 수행해서 결과를 만드는 대신 이미 보관된 결과를 바로 돌려주는 방식을 말한다.
일반적으로 사용자가 만드는 데이터 보다는 서비스에서 제공하는 컨텐츠(뉴스,허브,실시간 검색어 등)에 대부분 적용해서 사용 중이다.
캐시의 경우 모든 상황에서 쓸 수 있는 것은 아니다. 아래의 조건을 만족한다면 캐시 사용을 한번 고려해보는 것이 좋다.
예제 코드는 SpringBoot + Gradle + Ehcache 2.x + Logback 환경이다.
캐시기능에 집중하기 위해서 불필요한 설정은 제외하기 위해 선택하였다.
build.gradle
plugins {
id 'org.springframework.boot' version '2.4.2'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compile('org.projectlombok:lombok')
compile('org.springframework.boot:spring-boot-starter-cache')
compile('net.sf.ehcache:ehcache:2.10.3')
}
test {
useJUnitPlatform()
}
spring-boot-starter-cache는 캐시관련 설정을 편리하게 지원해주는 패키지 이다. 덕분에 CacheManager, EhCacheManagerFactoryBean 등의 bean 생성을 직접 안할수 있게 되었다.spring-boot-starter-cache는 기본 CacheManager로 ConcurrentHashMap을 사용하고 있어서 Ehcache 2.x 로 교체하기 위해 직접 의존성을 추가하였다.여기서 DB를 사용하지 않기 때문에 추가적인 starter 패키지는 없다.
혹시나 SpringBoot 환경이 아니라면 mykong님의 포스팅을 따라 설정하면 된다.
CacheManagerCheck.java