TIL
24_02_16TIL Cach
nakgopsae
2024. 2. 16. 21:34
반복리퀘스트를 받을때 캐시를 사용하여 동작하도록 프로젝트를 진행해보았다
dependencies {
implementation ("org.springframework.boot:spring-boot-starter-cache")//캐시 추가
}
//build.gradle.kts
디펜던시에 추가해주고 @Cacheabl을 사용 해보았다
@Transactional
@Cacheable("search")
override fun searchHotelPageList(name: String, page: Int,size:Int): Page<HotelResponse> {
historyService.saveKeyword(name)
return hotelRepository.searchByHotelNamePageList(name,page,size).map { it.toResponse() }
}
정상 작동하는척을 한다 검색을 누르고 결과값을 처음에 가져올때는 logging에서 쿼리문이 찍히지만 두번째 요청부터는 쿼리문이 발생하지 않고 캐시로 처리된다
여기서 @Transactional / @Cacheable 을 같이 사용하게 되면 문제가 생길수 있다 순서를 알수없다? 프록시개념에서 접근한다는데 조금 어려워서 일단은 미뤄놓고 @Cacheable을 레포지토리에 달아주었다
@Cacheable("search")
override fun searchByHotelNamePageList(name: String,page:Int,size:Int): Page<HotelEntity> {
val result = queryFactory.selectFrom(hotel)
.where(hotel.name.contains(name))
.offset(page.toLong())
.limit(size.toLong())
.orderBy(hotel.name.asc())//이름순 정렬 할꺼 요구사항에 따라 변화
.fetch()
return PageImpl(result)
}
적용만 해보았고 다른쪽도 적용을 해서 작동을 어느정도 되었으나 캐시를 관리해주는 부분에서 문제가 생겨서 지금 현재 작업중이다
데이터베이스의 정보가 수정 삭제 추가 되었을때 검색을 해서 조건에 맞다면 들고와야하는데 캐시에 올라간 변경이 없는 검색결과가 나온다던가
검색을할때 검색어를 다른 테이블에 저장하는 로직을 구현했는데 처음에는 저장이 잘되지만 나는 search_number (검색횟수) 가 올라가지 않는 문제가 발생했다
다른팀원분은 검색횟수가 올라갔다가 또 서버를 껏다켜보면 테이블에 중복된 검색어가 여러row로 찍혀있는 문제도 있었다
캐시를 삭제해주거나 핸들링 해주는게 필요해보인다 ! 시간이 없어서 오늘은 여기까지