Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ public List<DietDto> getDietList(HandleRequestDto parameters, int cafeteriaId) {


// Redis에서 조회 (없으면 DB에서 가져옴)
// cache-warming 적용
@Cacheable(value = "cafeteriaList", key = "#campusId", cacheManager = "contentCacheManager")
public List<CafeteriaDto> getCafeteriaList(int campusId) {
return cafeteriaRepositoryV2.findCafeteriaListByCampusId(campusId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,10 @@ public List<ButtonDto> mappingButtonDto() {
}


// @Cacheable(value = "cafeteriaId", key = "#cafeteriaName", // key 값을 'campusId + cafeteriaName' 조합으로 수정할 필요가 있음.
// unless = "#result == -1",
// cacheManager = "contentCacheManager")

@Cacheable(value = "cafeteriaId", key = "#campusId + '::' + #cafeteriaName",
unless = "#result == -1",
cacheManager = "contentCacheManager")
// 캠퍼스에 식당이 존재한다면 cafeteriaId 찾기
public int getCafeteriaId(String cafeteriaName, int campusId) {
return cafeteriaRepositoryV2.findCafeteriaId(cafeteriaName, campusId).orElse(-1);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.example.Jinus.service.cafeteria;

import com.example.Jinus.config.RedisCacheManager;
import com.example.Jinus.dto.data.CafeteriaDto;
import com.example.Jinus.repository.v2.cafeteria.CafeteriaRepositoryV2;
import com.example.Jinus.service.v2.cafeteria.CacheServiceV2;
Expand All @@ -10,15 +11,18 @@
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.verify;
import static org.springframework.test.web.client.ExpectedCount.times;

@ExtendWith(MockitoExtension.class)
@SpringBootTest
Expand All @@ -27,6 +31,8 @@ public class CafeteriaServiceV2Test {
@Autowired
private CafeteriaServiceV2 cafeteriaServiceV2;
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private CacheServiceV2 cacheServiceV2;
@MockBean
private CafeteriaRepositoryV2 cafeteriaRepositoryV2;
Expand All @@ -48,4 +54,40 @@ public void checkUserCafeteriaList() {
// then
assertThat(result).usingRecursiveComparison().isEqualTo(resultList);
}

// @Test
// @DisplayName("campusId, cafeteriaName을 키값으로 캐싱하여 cafeteriaId 값을 찾는다.")
// public void checkCacheData() {
// // given
// int campusId = 1;
// String cafeteriaName = "교직원식당";
// int expectedCafeteriaId = 4;
// String expectedCacheKey = "cafeteridId::" + campusId + "::" + cafeteriaName; // 캐싱 키 예상값
//
// // Mock 설정: DB 조회 시 특정 값 반환하도록 설정
// Mockito.when(cafeteriaRepositoryV2.findCafeteriaId(cafeteriaName, campusId)).thenReturn(Optional.of(expectedCafeteriaId));
//
// // when: 첫 번째 호출 (DB 조회 발생 후 Redis에 캐싱됨)
// int cafeteriaId = cafeteriaServiceV2.getCafeteriaId(cafeteriaName, campusId);
//
// // then: DB에서 가져온 값이 기대한 값과 같은지 확인
// assertThat(cafeteriaId).isEqualTo(expectedCafeteriaId);
//
// // Redis에서 직접 키 조회하여 확인
// ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
// String cachedValue = valueOps.get(expectedCacheKey);
//
// assertThat(cachedValue).isNotNull(); // 캐시가 존재해야 함
// assertThat(Integer.parseInt(cachedValue)).isEqualTo(expectedCafeteriaId); // 저장된 값이 예상한 값과 같은지 확인
//
// // 캐시가 적용되었는지 검증: 두 번째 호출에서는 DB 조회가 발생하면 안 됨
// int cachedCafeteriaId = cafeteriaServiceV2.getCafeteriaId(cafeteriaName, campusId);
//
// // 두 번째 호출은 캐시에서 가져와야 하므로 DB 호출이 한 번만 발생해야 함
// verify(cafeteriaRepositoryV2, Mockito.times(1)).findCafeteriaId(cafeteriaName, campusId);
//
// // 캐시된 값과 두 번째 조회한 값이 같은지 확인
// assertThat(cachedCafeteriaId).isEqualTo(expectedCafeteriaId);
//
// }
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ public void checkUserCampusName() {
// when
Mockito.when(campusRepositoryV2.findCampusNameByCampusId(campusId)).thenReturn(campusName); // Mocking
String result = campusServiceV2.getUserCampusName(campusId);
System.out.println("result:" + result);

// then
assertThat(result).isEqualTo(campusName);
Expand Down