diff --git a/.github/workflows/cd-dev.yml b/.github/workflows/cd-dev.yml index ccbc46f52..c0c3efbc7 100644 --- a/.github/workflows/cd-dev.yml +++ b/.github/workflows/cd-dev.yml @@ -2,7 +2,7 @@ name: cd-dev-docker on: push: - branches: [ "dev" ] + branches: [ "dev", "feat/#298" ] jobs: build: diff --git a/src/main/java/com/clova/anifriends/domain/animal/controller/AnimalController.java b/src/main/java/com/clova/anifriends/domain/animal/controller/AnimalController.java index 624e0b89c..0c25f7fe4 100644 --- a/src/main/java/com/clova/anifriends/domain/animal/controller/AnimalController.java +++ b/src/main/java/com/clova/anifriends/domain/animal/controller/AnimalController.java @@ -15,8 +15,11 @@ import com.clova.anifriends.domain.auth.authorization.ShelterOnly; import jakarta.validation.Valid; import java.net.URI; +import java.util.Map; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Pageable; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -26,6 +29,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @@ -150,4 +154,22 @@ public ResponseEntity deleteAnimal( animalService.deleteAnimal(shelterId, animalId); return ResponseEntity.noContent().build(); } + + private final RedisTemplate redisTemplate; + + @PostMapping("/data") + public ResponseEntity setRedisData( + @RequestBody(required = true) Map map) throws Exception { + + redisTemplate.opsForValue().set(String.valueOf(map.get("key")), map.get("value")); + + return new ResponseEntity<>("정상 등록", HttpStatus.CREATED); + } + + @GetMapping("/data") + public ResponseEntity getRedisData( + @RequestParam(required = true) String key) { + + return new ResponseEntity<>(redisTemplate.opsForValue().get(key), HttpStatus.OK); + } } diff --git a/src/main/java/com/clova/anifriends/global/config/RedisConfig.java b/src/main/java/com/clova/anifriends/global/config/RedisConfig.java index ee7ddebad..0e8f741c4 100644 --- a/src/main/java/com/clova/anifriends/global/config/RedisConfig.java +++ b/src/main/java/com/clova/anifriends/global/config/RedisConfig.java @@ -1,19 +1,23 @@ package com.clova.anifriends.global.config; 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.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.GenericToStringSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; +@EnableCaching @Configuration public class RedisConfig { - @Value("${spring.redis.host}") + @Value("${spring.data.redis.host}") private String host; - @Value("${spring.redis.port}") + @Value("${spring.data.redis.port}") private int port; @Bean @@ -21,19 +25,12 @@ public RedisConnectionFactory redisConnectionFactory() { return new LettuceConnectionFactory(host, port); } -// @Bean -// public RedisTemplate redisTemplate() { -// RedisTemplate redisTemplate = new RedisTemplate<>(); -// redisTemplate.setKeySerializer(new StringRedisSerializer()); -// redisTemplate.setValueSerializer(new StringRedisSerializer()); -// redisTemplate.setConnectionFactory(redisConnectionFactory()); -// return redisTemplate; -// } - @Bean - public RedisTemplate redisTemplate() { - RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setConnectionFactory(redisConnectionFactory()); - return redisTemplate; + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(new GenericToStringSerializer<>(Integer.class)); + return template; } } diff --git a/src/main/resources/backend-config b/src/main/resources/backend-config index 313b0a86e..7dcc9f245 160000 --- a/src/main/resources/backend-config +++ b/src/main/resources/backend-config @@ -1 +1 @@ -Subproject commit 313b0a86e8ccdf29967106967f73e16b915ca086 +Subproject commit 7dcc9f245798480517b8386f78cff09823f933e4 diff --git a/src/test/java/com/clova/anifriends/AnifriendsApplicationTests.java b/src/test/java/com/clova/anifriends/AnifriendsApplicationTests.java index a33681d95..6cd413714 100644 --- a/src/test/java/com/clova/anifriends/AnifriendsApplicationTests.java +++ b/src/test/java/com/clova/anifriends/AnifriendsApplicationTests.java @@ -10,15 +10,17 @@ @ActiveProfiles("dev") class AnifriendsApplicationTests { - @BeforeAll - static void beforeAll() { - Properties properties = System.getProperties(); - properties.setProperty("ACCESS_TOKEN_SECRET", "_4RNpxi%CB:eoO6a>j=#|*e#$Fp%%aX{dFi%.!Y(ZIy'UMuAt.9.;LxpWn2BZV*"); - properties.setProperty("REFRESH_TOKEN_SECRET", "Tlolt.z[e$1yO!%Uc\"F*QH=uf0vp3U5s5{X5=g=*nDZ>BWMIKIf9nzd6et2.:Fb"); - } + @BeforeAll + static void beforeAll() { + Properties properties = System.getProperties(); + properties.setProperty("ACCESS_TOKEN_SECRET", + "_4RNpxi%CB:eoO6a>j=#|*e#$Fp%%aX{dFi%.!Y(ZIy'UMuAt.9.;LxpWn2BZV*"); + properties.setProperty("REFRESH_TOKEN_SECRET", + "Tlolt.z[e$1yO!%Uc\"F*QH=uf0vp3U5s5{X5=g=*nDZ>BWMIKIf9nzd6et2.:Fb"); + } - @Test - void contextLoads() { - } + @Test + void contextLoads() { + } } diff --git a/src/test/java/com/clova/anifriends/base/BaseControllerTest.java b/src/test/java/com/clova/anifriends/base/BaseControllerTest.java index 735656674..478af8bcd 100644 --- a/src/test/java/com/clova/anifriends/base/BaseControllerTest.java +++ b/src/test/java/com/clova/anifriends/base/BaseControllerTest.java @@ -23,6 +23,7 @@ import com.clova.anifriends.domain.review.service.ReviewService; import com.clova.anifriends.domain.shelter.service.ShelterService; import com.clova.anifriends.domain.volunteer.service.VolunteerService; +import com.clova.anifriends.global.config.RedisConfig; import com.clova.anifriends.global.config.SecurityConfig; import com.clova.anifriends.global.config.WebMvcConfig; import com.clova.anifriends.global.image.S3Service; @@ -48,7 +49,8 @@ import org.springframework.web.filter.CharacterEncodingFilter; @WebMvcTest -@Import({SecurityConfig.class, WebMvcConfig.class, RestDocsConfig.class, WebMvcTestConfig.class}) +@Import({SecurityConfig.class, WebMvcConfig.class, RestDocsConfig.class, WebMvcTestConfig.class, + RedisConfig.class}) @ExtendWith(RestDocumentationExtension.class) public abstract class BaseControllerTest { diff --git a/src/test/java/com/clova/anifriends/base/config/RedisTestContainerConfig.java b/src/test/java/com/clova/anifriends/base/config/RedisTestContainerConfig.java new file mode 100644 index 000000000..16acb232f --- /dev/null +++ b/src/test/java/com/clova/anifriends/base/config/RedisTestContainerConfig.java @@ -0,0 +1,28 @@ +package com.clova.anifriends.base.config; + +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.junit.jupiter.Testcontainers; + +@Testcontainers +public class RedisTestContainerConfig { + + private static final String REDIS_IMAGE = "redis:7.0.8-alpine"; + private static final int REDIS_PORT = 6379; + private static final GenericContainer REDIS_CONTAINER; + + static { + REDIS_CONTAINER = new GenericContainer(REDIS_IMAGE) + .withExposedPorts(REDIS_PORT) + .withReuse(true); + REDIS_CONTAINER.start(); + } + + @DynamicPropertySource + private static void registerRedisProperties(DynamicPropertyRegistry registry) { + registry.add("spring.data.redis.host", REDIS_CONTAINER::getHost); + registry.add("spring.data.redis.port", () -> REDIS_CONTAINER.getMappedPort(REDIS_PORT) + .toString()); + } +} diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml index 16362af8c..8a0edf9b9 100644 --- a/src/test/resources/application.yml +++ b/src/test/resources/application.yml @@ -16,6 +16,10 @@ spring: hibernate: format_sql: true show_sql: true + data: + redis: + host: redis + port: 6379 cloud: aws: credentials: