[Spring Boot] 이미지 캐싱, CDN 기능 설정


 

클라이언트에서 이미지 로딩시 매번 서버에 저장된 이미지를 조회하게 되면 성능이 저하가 생긴다.이를 해결하기위해 spring boot 자체에서 제공하는 이미지 캐싱 기능을 설정 해 보도록 하겠다.


[수행 환경]

Windows 10
IntelliJ
java 11
gradle-7.6


[application.yml 설정]
spring:
  image:
    path: file:///C:Image/  #<----- 마지막에 꼭 / 를 넣어준다.
참고로 linux 환경인 경우 path를 file///home/service/image/ 식으로 넣어줍니다.

 

[WebConfig 클래스 작성]
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.CacheControl;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.time.Duration;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    private String connPath = "/imagePath/**";   //<------------ 서버를 기동하면 http://localhost/imagePath/test.jpg
    public static String resourcePath;

    @Value("${spring.image.path}")
    public void setPath(String resourcePath) {this.resourcePath = resourcePath;}

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        CacheControl cacheControl = CacheControl.noCache().mustRevalidate().cachePrivate().sMaxAge(Duration.ofDays(1));
        registry.addResourceHandler(connPath)
                .addResourceLocations(resourcePath)
                .setCacheControl(cacheControl);
    }
}

 

[실행 후 확인]
http://127.0.0.1/imagePath/test.jpg
1. 크롬 브라우져를 켠다
2. F12를 누른다. 
3. Network 메뉴를 누른다.
4. http://127.0.0.1/imagePath/test.jpg 호출한다. 그럼 응답으로 200이 나온다.
5. 다시한번 http://127.0.0.1/imagePath/test.jpg 호출 한다 캐싱이 제대로 됐다면 304가 나온다.

 

 

반응형

+ Recent posts