diff --git a/backend/build.gradle b/backend/build.gradle index 2136b2115..f7e6c02e1 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -59,6 +59,9 @@ dependencies { // Webflux implementation 'org.springframework.boot:spring-boot-starter-webflux' + + // Redis + implementation 'org.springframework.boot:spring-boot-starter-data-redis' } tasks.named('test') { diff --git a/backend/src/main/java/com/example/backend/auth/api/service/auth/AuthService.java b/backend/src/main/java/com/example/backend/auth/api/service/auth/AuthService.java index bee9caec3..4171e146a 100644 --- a/backend/src/main/java/com/example/backend/auth/api/service/auth/AuthService.java +++ b/backend/src/main/java/com/example/backend/auth/api/service/auth/AuthService.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + import java.util.HashMap; import java.util.List; diff --git a/backend/src/main/java/com/example/backend/auth/api/service/oauth/OAuthService.java b/backend/src/main/java/com/example/backend/auth/api/service/oauth/OAuthService.java index 20ed2ff1d..614ce3fb2 100644 --- a/backend/src/main/java/com/example/backend/auth/api/service/oauth/OAuthService.java +++ b/backend/src/main/java/com/example/backend/auth/api/service/oauth/OAuthService.java @@ -17,7 +17,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; diff --git a/backend/src/main/java/com/example/backend/domain/config/RedisConfig.java b/backend/src/main/java/com/example/backend/domain/config/RedisConfig.java new file mode 100644 index 000000000..2351b57d7 --- /dev/null +++ b/backend/src/main/java/com/example/backend/domain/config/RedisConfig.java @@ -0,0 +1,25 @@ +package com.example.backend.domain.config; + +import org.springframework.beans.factory.annotation.Value; +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.repository.configuration.EnableRedisRepositories; + +@Configuration +@EnableRedisRepositories +public class RedisConfig { + + @Value("${spring.data.redis.host}") + private String host; + + @Value("${spring.data.redis.port}") + private int port; + + // Bean으로 등록해 Redis 연결 - Lettuce 사용 + @Bean + public RedisConnectionFactory redisConnectionFactory() { + return new LettuceConnectionFactory(host, port); + } +} diff --git a/backend/src/main/java/com/example/backend/domain/define/test/RedisTest.java b/backend/src/main/java/com/example/backend/domain/define/test/RedisTest.java new file mode 100644 index 000000000..b2d16fe34 --- /dev/null +++ b/backend/src/main/java/com/example/backend/domain/define/test/RedisTest.java @@ -0,0 +1,24 @@ +package com.example.backend.domain.define.test; + +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.springframework.data.annotation.Id; +import org.springframework.data.redis.core.RedisHash; + +import java.time.LocalDateTime; + +@Getter +@NoArgsConstructor +@RedisHash(value = "test", timeToLive = 60 * 3) // 3분 +public class RedisTest { + @Id + private Long id; + + private String description; + + @Builder + public RedisTest(String description) { + this.description = description; + } +} diff --git a/backend/src/main/java/com/example/backend/domain/define/test/repository/RedisTestRepository.java b/backend/src/main/java/com/example/backend/domain/define/test/repository/RedisTestRepository.java new file mode 100644 index 000000000..8fdd28d57 --- /dev/null +++ b/backend/src/main/java/com/example/backend/domain/define/test/repository/RedisTestRepository.java @@ -0,0 +1,7 @@ +package com.example.backend.domain.define.test.repository; + +import com.example.backend.domain.define.test.RedisTest; +import org.springframework.data.repository.CrudRepository; + +public interface RedisTestRepository extends CrudRepository { +} diff --git a/backend/src/test/java/com/example/backend/auth/api/service/jwt/JwtServiceTest.java b/backend/src/test/java/com/example/backend/auth/api/service/jwt/JwtServiceTest.java index 1dd499dd7..fc0307a27 100644 --- a/backend/src/test/java/com/example/backend/auth/api/service/jwt/JwtServiceTest.java +++ b/backend/src/test/java/com/example/backend/auth/api/service/jwt/JwtServiceTest.java @@ -1,10 +1,7 @@ package com.example.backend.auth.api.service.jwt; import com.example.backend.auth.TestConfig; -import com.example.backend.common.exception.ExceptionMessage; -import com.example.backend.common.exception.jwt.JwtException; import com.example.backend.domain.define.user.User; -import com.example.backend.domain.define.user.constant.UserRole; import com.example.backend.domain.define.user.repository.UserRepository; import io.jsonwebtoken.Claims; import io.jsonwebtoken.ExpiredJwtException; @@ -12,7 +9,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; import java.util.Date; import java.util.HashMap; @@ -20,7 +16,6 @@ import static org.junit.jupiter.api.Assertions.*; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.junit.jupiter.api.Assertions.*; class JwtServiceTest extends TestConfig { diff --git a/backend/src/test/java/com/example/backend/auth/api/service/oauth/adapter/github/GithubAdapterTest.java b/backend/src/test/java/com/example/backend/auth/api/service/oauth/adapter/github/GithubAdapterTest.java index c24f45ac6..6eea82683 100644 --- a/backend/src/test/java/com/example/backend/auth/api/service/oauth/adapter/github/GithubAdapterTest.java +++ b/backend/src/test/java/com/example/backend/auth/api/service/oauth/adapter/github/GithubAdapterTest.java @@ -12,7 +12,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import java.net.URI; diff --git a/backend/src/test/java/com/example/backend/domain/redis/define/test/repository/RedisTestRepositoryTest.java b/backend/src/test/java/com/example/backend/domain/redis/define/test/repository/RedisTestRepositoryTest.java new file mode 100644 index 000000000..426ed2faa --- /dev/null +++ b/backend/src/test/java/com/example/backend/domain/redis/define/test/repository/RedisTestRepositoryTest.java @@ -0,0 +1,38 @@ +package com.example.backend.domain.redis.define.test.repository; + +import com.example.backend.auth.TestConfig; +import com.example.backend.domain.define.test.RedisTest; +import com.example.backend.domain.define.test.repository.RedisTestRepository; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.assertj.core.api.Assertions.assertThat; + + +class RedisTestRepositoryTest extends TestConfig { + @Autowired + private RedisTestRepository redisTestRepository; + + @AfterEach + void tearDown() { +// redisTestRepository.deleteAll(); + } + + @Test + @DisplayName("Redis 저장 & 조회 테스트") + void redisSaveTest() { + // given + RedisTest savedEntity = redisTestRepository.save(RedisTest.builder() + .description("테스트 입니다.") + .build()); + + // when + RedisTest findEntity = redisTestRepository.findById(savedEntity.getId()).get(); + + // then + assertThat(findEntity).isNotNull(); + assertThat(findEntity.getDescription()).isEqualTo("테스트 입니다."); + } +} \ No newline at end of file