redis 구조도 추가하기 (클러스터링 구조 및 인증방식 추가)
<aside> 💡 요청시 오래걸리는 응답에 대해 속도 개선을 위해 적용 진행하였고 Kotlin 이라 Java 에서 적용할때와 다르게 몇가지 추가 이슈가 발생하였습니다.
</aside>
redis
implementation("org.springframework.boot:spring-boot-starter-data-redis")
LocalDateTime 이슈로 datatype 라이브러리 추가
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
기존 매물리스트의 Response Body가 매우 커서 확인해봤더니 이미지를 조회하기 위해 서명 url 을 사용
→ 이미지 url의 String이 너무 길었음. 이유는 이미지 보안 설정으로 queryString이 길어져 Content-Length가 너무 커짐
→ 해결 : 보안상 이미지 노출을 막을필요 없어서 제거하여 redis 의 메모리에 적재될 때 해당 이미지 파일 경로의 용량을 줄일 수 있었음.
추상화된 클래스 (eg : DomainQueryService) 를 바로 사용하는 곳에 캐싱을 적용하는 경우 repository가 주입이 제대로 되지 않는 이슈가 있어 해당 Service를 한번 더 주입받아 구현하여 사용
@Service
class FileQueryService(
private val fileDomainQueryService: FileDomainQueryService
) {
@Cacheable(value = ["files"], cacheManager = "redisCacheManager")
fun queryAllByRequest(request: FileDomainQueryRequest): List<File> {
return this.fileDomainQueryService.queryAll(request)
}
}
objectMapper.registerModule(JavaTimeModule())
objectMapper.registerModules(KotlinModule())
objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
val ptv: PolymorphicTypeValidator =
BasicPolymorphicTypeValidator.builder()
.allowIfSubType(Any::class.java)
.build()
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)