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
7 changes: 6 additions & 1 deletion server/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,16 @@ dependencies {
//local용 db
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'

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

//redis
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.3'

//caffeine
implementation 'com.github.ben-manes.caffeine:caffeine'

//smtp 메일 전송
implementation 'org.springframework.boot:spring-boot-starter-mail'

Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@


import com.greenroom.server.api.domain.greenroom.entity.Diary;
import com.greenroom.server.api.global.config.PropertiesHolder;
import com.greenroom.server.api.global.properties.PropertiesHolder;

import java.time.LocalDate;
import java.time.LocalDateTime;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.greenroom.server.api.domain.greenroom.dto.out;

import com.greenroom.server.api.domain.greenroom.entity.Diary;
import com.greenroom.server.api.global.config.PropertiesHolder;
import com.greenroom.server.api.global.properties.PropertiesHolder;
import lombok.Data;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.greenroom.server.api.domain.greenroom.dto.out;

import com.greenroom.server.api.domain.greenroom.entity.*;
import com.greenroom.server.api.global.config.PropertiesHolder;
import com.greenroom.server.api.global.properties.PropertiesHolder;

import java.time.LocalDate;
import java.time.LocalDateTime;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.greenroom.server.api.domain.greenroom.entity.GreenRoom;
import com.greenroom.server.api.domain.greenroom.entity.Todo;
import com.greenroom.server.api.global.config.PropertiesHolder;
import com.greenroom.server.api.global.properties.PropertiesHolder;

import java.time.LocalDate;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,8 @@

import com.greenroom.server.api.domain.greenroom.entity.Activity;
import com.greenroom.server.api.domain.greenroom.entity.GreenRoom;
import com.greenroom.server.api.domain.greenroom.entity.Item;
import com.greenroom.server.api.global.config.PropertiesHolder;
import lombok.AllArgsConstructor;
import lombok.Data;
import com.greenroom.server.api.global.properties.PropertiesHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;

import java.util.List;
import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
package com.greenroom.server.api.domain.greenroom.dto.out;

import com.greenroom.server.api.domain.greenroom.entity.Plant;
import com.greenroom.server.api.global.config.PropertiesHolder;
import org.springframework.beans.factory.annotation.Value;
import com.greenroom.server.api.global.properties.PropertiesHolder;

public record PlantInfoDto (Long plantId, String name, String scientificName, String description, String imageUrl){

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class ItemCachedService {
//repository
private final ItemRepository itemRepository;

@Cacheable(cacheNames = {"items"},key = "#category+'_'+#subCategory",cacheManager = "itemCacheManager")
@Cacheable(cacheNames = {"items"},key = "#category+'_'+#subCategory")
public List<Item> getItems(Integer category, Integer subCategory){
return(itemRepository.findAll()
.stream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public List<PlantResponseDto> getPlantListWithKeyword(String keyWord, Integer si
throw new CustomException(ResponseCodeEnum.FAIL_TO_SEARCH_WITH_ELASTICSEARCH,e.getMessage());
}
}
@Cacheable(cacheNames = {"plants"},key = "#size",cacheManager = "basicCacheManager")
@Cacheable(cacheNames = {"plants"},key = "#size")
public List<PlantResponseDto> getPopularPlantList(Integer size){

return plantRepository.findAll()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.greenroom.server.api.config;
package com.greenroom.server.api.global.config;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.greenroom.server.api.global.config;


import com.github.benmanes.caffeine.cache.Caffeine;
import com.greenroom.server.api.global.enums.CacheType;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;

@Configuration
@EnableCaching
public class CaffeineCacheConfig {
@Bean
public CacheManager cacheManager() {
SimpleCacheManager cacheManager = new SimpleCacheManager();
List<CaffeineCache> caches = Arrays.stream(CacheType.values())
.map(cache -> new CaffeineCache(cache.getCacheName(), Caffeine.newBuilder().recordStats()
.expireAfterWrite(cache.getExpiredAfterWrite(), TimeUnit.SECONDS)
.maximumSize(cache.getMaximumSize())
.build()))
.toList();
cacheManager.setCaches(caches);
return cacheManager;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.greenroom.server.api.config;
package com.greenroom.server.api.global.config;

import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
import lombok.extern.slf4j.Slf4j;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
//package com.greenroom.server.api.config;
//
//import com.fasterxml.jackson.annotation.JsonTypeInfo;
//import com.fasterxml.jackson.databind.JavaType;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
//import com.greenroom.server.api.domain.greenroom.entity.Item;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.cache.annotation.EnableCaching;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.annotation.Primary;
//import org.springframework.data.redis.cache.RedisCacheConfiguration;
//import org.springframework.data.redis.cache.RedisCacheManager;
//import org.springframework.data.redis.connection.RedisConnectionFactory;
//import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
//import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
//import org.springframework.data.redis.serializer.*;
//import java.time.Duration;
//import java.util.List;
//
//@EnableCaching
//@Configuration
//public class RedisConfig {
//
// @Value("${spring.cache.redis.host}")
// private String host;
//
// @Value("${spring.cache.redis.port}")
// private String port;
//
// @Bean
// public LettuceConnectionFactory redisConnectionFactory() {
// return new LettuceConnectionFactory(new RedisStandaloneConfiguration(host, Integer.parseInt(port)));
// }
//
// @Primary
// @Bean(value = "basicCacheManager")
// public RedisCacheManager cacheManager(RedisConnectionFactory cf) {
//
// RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
// .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) // 키는 String
// .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new Jackson2JsonRedisSerializer<Object>(Object.class)))
// .entryTtl(Duration.ofMinutes(30)); // 캐시 TTL 30분 설정
//
// return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(cf)
// .cacheDefaults(redisCacheConfiguration)
// .build();
// }
//
// @Bean(value = "itemCacheManager")
// public RedisCacheManager itemCacheManager(RedisConnectionFactory cf) {
//
// ObjectMapper objectMapper = new ObjectMapper();
// objectMapper.activateDefaultTyping(
// LaissezFaireSubTypeValidator.instance,
// ObjectMapper.DefaultTyping.NON_FINAL,
// JsonTypeInfo.As.PROPERTY
// );
//
// // List<Item> 타입 생성
// JavaType javaType = objectMapper.getTypeFactory()
// .constructCollectionType(List.class, Item.class);
//
// // Serializer 생성자에 JavaType 사용
// Jackson2JsonRedisSerializer<Object> valueSerializer = new Jackson2JsonRedisSerializer<>(javaType);
//
// RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
// .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
// .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer))
// .entryTtl(Duration.ofHours(12)); // 캐시 TTL 12시간 설정
//
// return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(cf)
// .cacheDefaults(redisCacheConfiguration)
// .build();
// }
//
//}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.greenroom.server.api.config;
package com.greenroom.server.api.global.config;

import org.springframework.boot.autoconfigure.mail.MailProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.greenroom.server.api.global.enums;

import lombok.Getter;

@Getter
public enum CacheType {
ITEM("items",12*60*60,50),
PLANT("plants",60*60,10);

private final String cacheName;
private final Integer expiredAfterWrite; // seconds
private final Integer maximumSize;

CacheType(String cacheName, Integer expiredAfterWrite, Integer maximumSize){
this.cacheName = cacheName;
this.expiredAfterWrite = expiredAfterWrite;
this.maximumSize = maximumSize;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.greenroom.server.api.global.config;
package com.greenroom.server.api.global.properties;

import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
Expand Down
Loading