Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자 되버리기

Springboot 캐시 핸들링 하기(한번에 지우기) 본문

카테고리 없음

Springboot 캐시 핸들링 하기(한번에 지우기)

구본익 2021. 1. 4. 12:04

반복적인 파라미터에 응답을 해줄 경우가 있다거나 조회가 빈번히 일어나는 API의 경우에는 

캐싱 기능을 이용하면 정말 좋습니다.

40ms 걸리던 것도 (혹은 1초 이상이더라도) 10ms 이내로 응답을 반환할 수 있기에 DB 커넥션을 불필요하게 사용하지 않고 리소스를 덜 잡아 먹으며 동일한 응답을 할 수 있습니다.

 

 

해당 포스트에서는 게시글을 조회하거나 저장할 때를 예시로 하여 포스팅을 하도록 하겠습니다.

 

 

우선 캐싱 설정을 해주어야 합니다.

build.gradle에 해당 라이브러리를 추가해줍니다.

implementation 'org.springframework.boot:spring-boot-starter-cache'

 

캐시 설정 bean을 주입해줍니다.

@Configuration
@EnableCaching
public class CachingConfig {
    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(Arrays.asList(
                new ConcurrentMapCache("cache1"),
                new ConcurrentMapCache("cache2")
                ));
        return cacheManager;
    }
}

 

 

이후에는 게시글을 조회하는 함수를 추가하는데 추가적으로 캐시저장 코드도 추가해줍니다.

@Caching(cacheable = {
            @Cacheable("cache1"),
            @Cacheable("cache2")
    })
public Object getPost(String name){
	// 디비 조회하는 코드
    return 디비조회한 결과값;
}

굳이 두개를 써주지 않아도 되지만 한번에 여러개의 캐시도 설정 가능하다는 것을 보여드리고 싶었습니다.

 

 

게시글은 크게 여러 목록을 조회하는 게시글과

게시글을 하나 클릭했을 때 상세한 게시글 데이터를 불러옵니다.

만약에 페이징 처리에 대한 캐시와

단일 게시글 조회에 대한 캐시를 따로 관리한다면

게시글 테이블에 변화가 일어났을 경우에는 캐시를 지워주어야 합니다.

 

@Caching(evict = {
            @CacheEvict(value="cache1", allEntries = true, cacheManager = "cacheManager"),
            @CacheEvict(value="cache2", allEntries = true, cacheManager = "cacheManager")
    })
    public void savePost(Object object
        repository.save(object);
    }

위와같이 여러개의 캐시를 한번에 지울수도 있습니다.

 

 

Comments