Skip to content

Commit 316ced1

Browse files
authored
Merge pull request #17 from hykim02/main
학식 데이터, 캠퍼스별 식당 데이터 Cache 처리
2 parents 435d7e7 + 01ba11f commit 316ced1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+351
-397
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ jar {
4141
dependencies {
4242
// 캐싱 redis 설정
4343
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
44+
implementation 'org.springframework.boot:spring-boot-starter-cache'
4445
implementation 'org.springframework.boot:spring-boot-starter-web'
4546
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
4647

src/main/java/com/example/Jinus/config/RedisCacheConfig.java

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.example.Jinus.config;
2+
3+
import org.springframework.cache.CacheManager;
4+
import org.springframework.cache.annotation.EnableCaching;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.data.redis.cache.RedisCacheConfiguration;
8+
import org.springframework.data.redis.connection.RedisConnectionFactory;
9+
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
10+
import org.springframework.data.redis.serializer.RedisSerializationContext;
11+
import org.springframework.data.redis.serializer.StringRedisSerializer;
12+
13+
import java.time.Duration;
14+
import java.util.HashMap;
15+
import java.util.Map;
16+
17+
@Configuration
18+
@EnableCaching
19+
public class RedisCacheManager {
20+
@Bean
21+
public CacheManager contentCacheManager(RedisConnectionFactory cf) {
22+
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<>();
23+
24+
// 1. 식당 리스트 캐시 (불변 데이터, 7일 유지)
25+
cacheConfigurations.put("cafeteriaList",
26+
RedisCacheConfiguration.defaultCacheConfig()
27+
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) // Key Serializer
28+
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) // Value Serializer
29+
.entryTtl(Duration.ofDays(7)) // 7일 유지
30+
.disableCachingNullValues()); // null 캐싱 방지
31+
32+
33+
// 2. 식단 데이터 캐시 (하루 단위로 갱신)
34+
cacheConfigurations.put("dietList",
35+
RedisCacheConfiguration.defaultCacheConfig()
36+
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) // Key Serializer
37+
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) // Value Serializer
38+
.entryTtl(Duration.ofHours(12)) // 12시간 유지
39+
.disableCachingNullValues());
40+
41+
// 3. 캠퍼스 이름별 캠퍼스 id 캐시 (불변 데이터, 7일 유지)
42+
cacheConfigurations.put("campusName",
43+
RedisCacheConfiguration.defaultCacheConfig()
44+
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) // Key Serializer
45+
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) // Value Serializer
46+
.entryTtl(Duration.ofDays(7)) // 7일 유지
47+
.disableCachingNullValues()); // null 캐싱 방지
48+
49+
// 3. 식당별 식당 id 캐시 (불변 데이터, 7일 유지)
50+
cacheConfigurations.put("cafeteriaId",
51+
RedisCacheConfiguration.defaultCacheConfig()
52+
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) // Key Serializer
53+
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) // Value Serializer
54+
.entryTtl(Duration.ofDays(7)) // 7일 유지
55+
.disableCachingNullValues()); // null 캐싱 방지
56+
57+
58+
return org.springframework.data.redis.cache.RedisCacheManager.RedisCacheManagerBuilder
59+
.fromConnectionFactory(cf)
60+
.withInitialCacheConfigurations(cacheConfigurations) // 캐시별 설정 적용
61+
.build();
62+
}
63+
}

src/main/java/com/example/Jinus/config/RedisConfig.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
1010
import org.springframework.data.redis.core.RedisTemplate;
1111
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
12+
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
1213
import org.springframework.data.redis.serializer.StringRedisSerializer;
1314

1415
@Configuration
@@ -29,17 +30,22 @@ public class RedisConfig {
2930
public RedisConnectionFactory redisConnectionFactory() {
3031
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(host, port);
3132
configuration.setPassword(RedisPassword.of(password));
32-
3333
return new LettuceConnectionFactory(configuration);
3434
}
3535

36-
// redis 데이터에 접근
36+
// redis에 접근
3737
@Bean
3838
public RedisTemplate<String, Object> redisTemplate() {
3939
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
40-
// spring-redis간 데이터 직렬화를 위해 설정, 설정하지 않아도 동작에 문제는 없음.
40+
41+
// key를 문자열로 저장
4142
redisTemplate.setKeySerializer(new StringRedisSerializer());
42-
redisTemplate.setValueSerializer(new StringRedisSerializer());
43+
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
44+
45+
// value를 JSON 형태로 저장 (Integer도 가능)
46+
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
47+
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
48+
4349
redisTemplate.setConnectionFactory(redisConnectionFactory());
4450
return redisTemplate;
4551
}

src/main/java/com/example/Jinus/config/RestTemplateConfig.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,26 @@
33
import org.springframework.boot.web.client.RestTemplateBuilder;
44
import org.springframework.context.annotation.Bean;
55
import org.springframework.context.annotation.Configuration;
6+
import org.springframework.http.client.BufferingClientHttpRequestFactory;
7+
import org.springframework.http.client.SimpleClientHttpRequestFactory;
8+
import org.springframework.http.converter.StringHttpMessageConverter;
69
import org.springframework.web.client.RestTemplate;
710

11+
import java.nio.charset.StandardCharsets;
12+
813
@Configuration
914
public class RestTemplateConfig {
1015
@Bean
1116
public RestTemplate restTemplate(RestTemplateBuilder builder) {
1217
return builder
13-
.defaultMessageConverters() // 기본 메시지 컨버터 설정
14-
.build();
18+
.requestFactory(
19+
() -> new BufferingClientHttpRequestFactory(
20+
new SimpleClientHttpRequestFactory()
21+
)
22+
).additionalMessageConverters(
23+
new StringHttpMessageConverter(
24+
StandardCharsets.UTF_8
25+
)
26+
).build();
1527
}
1628
}

src/main/java/com/example/Jinus/controller/CafeteriaController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public String cafeteriaResponse(List<Object[]> cafeteriaList, String campusName)
115115
ComponentDto cardTypeDto = new ComponentDto(carouselComponent);
116116
outputs.add(cardTypeDto);
117117

118-
TemplateDto template = new TemplateDto(outputs);
118+
TemplateDto template = new TemplateDto(outputs, null);
119119
ResponseDto responseDto = new ResponseDto("2.0", template);
120120

121121
return JsonUtils.toJsonResponse(responseDto);
@@ -144,7 +144,7 @@ public String campusResponse(List<CampusEntity> campusList) {
144144
ComponentDto cardTypeDto = new ComponentDto(carouselComponent);
145145
outputs.add(cardTypeDto);
146146

147-
TemplateDto template = new TemplateDto(outputs);
147+
TemplateDto template = new TemplateDto(outputs, null);
148148
ResponseDto responseDto = new ResponseDto("2.0", template);
149149

150150
return JsonUtils.toJsonResponse(responseDto);
Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,22 @@
11
package com.example.Jinus.controller.v2;
22

33
import com.example.Jinus.dto.request.RequestDto;
4-
import com.example.Jinus.dto.response.*;
5-
import com.example.Jinus.entity.cafeteria.CampusEntity;
64
import com.example.Jinus.service.v2.cafeteria.CafeteriaServiceV2;
7-
import com.example.Jinus.service.v2.cafeteria.CampusServiceV2;
85
import com.example.Jinus.service.v2.userInfo.UserServiceV2;
9-
import com.example.Jinus.utility.JsonUtils;
10-
import com.example.Jinus.utility.ListCardResponse;
6+
import lombok.RequiredArgsConstructor;
117
import org.springframework.web.bind.annotation.PostMapping;
128
import org.springframework.web.bind.annotation.RequestBody;
139
import org.springframework.web.bind.annotation.RequestMapping;
1410
import org.springframework.web.bind.annotation.RestController;
1511

16-
import java.util.ArrayList;
17-
import java.util.HashMap;
18-
import java.util.List;
19-
import java.util.Map;
20-
2112
@RestController
13+
@RequiredArgsConstructor
2214
@RequestMapping("/api/spring")
2315
public class CafeteriaControllerV2 {
2416

2517
private final UserServiceV2 userServiceV2;
26-
private final CampusServiceV2 campusServiceV2;
2718
private final CafeteriaServiceV2 cafeteriaServiceV2;
2819

29-
public CafeteriaControllerV2(
30-
UserServiceV2 userServiceV2,
31-
CampusServiceV2 campusServiceV2,
32-
CafeteriaServiceV2 cafeteriaServiceV2) {
33-
this.userServiceV2 = userServiceV2;
34-
this.campusServiceV2 = campusServiceV2;
35-
this.cafeteriaServiceV2 = cafeteriaServiceV2;
36-
}
37-
3820
// 사용자 존재 여부에 따라 응답
3921
@PostMapping("/v2/cafeteria")
4022
public String responseCafeteriaOrCampusListCard(@RequestBody RequestDto requestDto) {
@@ -45,4 +27,5 @@ public String responseCafeteriaOrCampusListCard(@RequestBody RequestDto requestD
4527

4628
return cafeteriaServiceV2.campusOrCafeteria(campusId, sysCampusId);
4729
}
30+
4831
}

src/main/java/com/example/Jinus/controller/v2/DietControllerV2.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ public class DietControllerV2 {
1818
public String handleRequest(@RequestBody RequestDto requestDto) {
1919
return dietServiceV2.requestHandler(requestDto);
2020
}
21+
2122
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.example.Jinus.dto.data;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
7+
@Getter
8+
@AllArgsConstructor
9+
@NoArgsConstructor
10+
public class CafeteriaDto {
11+
private String cafeteriaNameKo;
12+
private String thumbnailUrl;
13+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.example.Jinus.dto.data;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import lombok.NoArgsConstructor;
6+
7+
@Getter
8+
@AllArgsConstructor
9+
@NoArgsConstructor
10+
public class DietDto {
11+
private String dishCategory;
12+
private String dishName;
13+
private String dishType;
14+
}

0 commit comments

Comments
 (0)