개요
개인 프로젝트 중 사용자가 메인 페이지에 접속했을 때 보내줘야 하는 데이터가 있다. 데이터는 DB에서 데이터를 꺼내어 사용자에게 보내줘야 하는데 여러 사용자들이 요청된 경우 N개의 쿼리문이 나올 것이기에 반복된 api 요청에 대해서 어떻게 하면 쿼리문을 줄일 수 있을까 생각했고 그 결과 Spring에서 cache를 제공한다는 것을 알게 되었다.
의존성
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-cache
Maven Repository: org.springframework.boot » spring-boot-starter-cache
Starter for using Spring Framework's caching support VersionVulnerabilitiesRepositoryUsagesDate2.6.x2.6.7Central9Apr, 20222.6.6Central21Mar, 20222.6.5Central2Mar, 20222.6.4Central6Feb, 20222.6.3Central21Jan, 20222.6.2Central16Dec, 20212.6.1Central13Nov, 20
mvnrepository.com
테스트 코드
Controller :
@GetMapping("/test/ArgCache")
public String testArgCache() {
long id = 1;
String testEntity = service.testArgCacheService(id);
return testEntity;
}
Service :
key 값이 있는 경우
@Cacheable(value = "cacheStorage", key = "#no")
public String testArgCacheService(Long no) {
String test = testRepository.getById(no).getTest();
return test;
}
key 값이 없는 경우
@Cacheable(value = "cacheStorage")
public String testNoArgCacheService() {
long no = 1;
String test = testRepository.getById(no).getTest();
return test;
}
캐시가 없을 경우
캐시가 없을 경우 해당 url 요청 시마다 쿼리문을 DB에 보내줘야 한다.

캐시가 있을 경우
캐시가 있을 경우에는 최초의 1회 쿼리문을 DB에 보낸 후 결과 값을 Map 형태로 캐시가 관리를 해준다.

결론
캐시는 값이 자주 변하지 않고 호출이 많을 경우 유용하게 사용되지만 값이 자주 바뀔 경우에는 사용하는 것은 좋지 않다고 생각한다.
cache에 대한 자세한 내용은 나중에 다루기로...
'문제해결 및 코드 만들기' 카테고리의 다른 글
| [문제고민] 파일 저장 구조 리펙토링 및 개성방안 정리 (0) | 2022.05.25 |
|---|---|
| [문제 고민] jpa 쿼리 생성 기능에 따른 속도 차이 ? (0) | 2022.05.17 |
| [문제해결] AWS 스프링 빌드 중 발생한 문제점 (0) | 2022.05.13 |
| [문제해결] 회원 가입 시 동시성 문제가 발생하는가 (0) | 2022.05.11 |
| 서버 시작 전 더미 데이터 넣는 경우 발생 했던 문제점 (0) | 2022.05.11 |