Spring Boot 웹 정적 파일 캐 시 처리 방법
요청 을 캡 처 한 결과 한 페이지 에 들 어 갈 때마다 정적 파일 을 불 러 와 야 한 다 는 것 을 알 수 있 습 니 다.돈 이 모자 라 지 않 는 회 사 는 정적 파일 을 CDN 에 올 려 놓 고 접근 속 도 를 높이 거나 Nginx 로 정적 파일 캐 시 를 할 수 있 습 니 다.
오늘 은 다른 캐 시 최적화 방식 을 소개 합 니 다.Spring 의 캐 시 체 제 를 통 해 정적 파일 을 캐 시 합 니 다.Spring Boot 에서 정적 파일 캐 시 를 설정 하려 면 설정 파일 에 아래 설정 만 추가 하면 됩 니 다.
# ,
spring.resources.cache-period=604800
# gzip
spring.resources.chain.gzipped=true
#
spring.resources.chain.cache=false
설정 은 문 서 를 참고 할 수 있 습 니 다https://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/SPRING RESOURCES HANDLING 부분캐 시 설정 을 추가 하면 페이지 에 접근 하면 불 러 온 정적 자원 이 캐 시 되 고 두 번 째 방문 시 다운 로드 를 다시 요청 하지 않 습 니 다.스냅 백 을 통 해 캐 시 되 어 있 음 을 알 수 있 습 니 다.
Size 열 에는 from memory cache 가 있 습 니 다.자원 은 브 라 우 저의 메모리 에 캐 시 되 어 있 고 어떤 파일 은 디스크 에 캐 시 됩 니 다.그것 이 바로 from disk cache 입 니 다.
최적화 목적 은 달성 되 었 지만 해결 되 지 않 은 작은 문제 가 있 습 니 다.만약 에 제 자원 파일 이 바 뀌 면 css 파일 이 수정 되 었 습 니 다.제 서버 에서 발표 한 후에 도 사용자 쪽 에 캐 시 가 존재 합 니 다.
가장 좋 은 효 과 는 파일 이 바 뀌 었 을 때 나 서버 의 프로그램 이 다시 시작 되면 사용자 의 요청 은 서버 의 최신 자원 을 다운로드 해 야 합 니 다.다시 시작 하지 않 았 을 때 캐 시 내용 을 사용 하면 변경 후 사용자 가 최신 내용 을 바로 볼 수 있 습 니 다.
우 리 는 버 전 번호 로 이 문 제 를 해결 할 수 있다.바로 정적 자원 뒤에 버 전 번 호 를 추가 하고 자원 이 변화 할 때 버 전 번호 도 바 꾸 면 문제 가 없 을 것 이다.
사용 방식 은 다음 과 같 습 니 다.
<link rel="stylesheet" href="css/main-app.css?version=${version!}" rel="external nofollow" />
용법 은 매우 간단 합 니 다.관건 은 version 이라는 값 이 어디서 나 오 느 냐 는 것 입 니 다.우 리 는 시작 하기 전에 코드 를 통 해 이 값 을 설정 할 수 있 습 니 다.
System.setProperty("version", version);
이 값 은 main 방법의 args 를 통 해 들 어 올 수 있 습 니 다.프로젝트 를 시작 하 는 스 크 립 트 에서 프로그램 에 동적 으로 전 달 됩 니 다.스 크 립 트 를 시작 하면 프로그램 jar 의 MD5 값 을 버 전 번호 로 가 져 올 수 있 습 니 다.그러면 서버 의 프로그램 이 다시 시작 되면 버 전 번호 가 바 뀌 고 캐 시 는 효력 을 잃 습 니 다.그리고 필터 에서 이 값 을 가 져 와 request 에 설정 하면 각 페이지 에서 사용 할 수 있 습 니 다.
String version = System.getProperty("version");
req.setAttribute("version", version == null ? "1.0.0" : version);
이러한 매개 변 수 를 전달 하 는 방식 을 제외 하고 사용자 정의 포장 플러그 인 을 통 해 포장 할 때 version 을 구체 적 인 내용 으로 바 꿀 수도 있 습 니 다.위 에서 말 한 방식 은 자신 이 version 을 생 성하 여 파일 의 변경 을 제어 하 는 것 입 니 다.사실은 Spring Mvc 에서 정적 파일 의 버 전 관리 기능 을 제 공 했 습 니 다.두 가지 방식 이 있 습 니 다.하 나 는 자원 의 MD5 를 통 해 버 전 번 호 를 생 성 하 는 것 입 니 다.파일 내용 이 바 뀌 었 고 MD5 도 바 뀌 었 을 것 입 니 다.다른 하 나 는 자원 앞 에 버 전 번 호 를 추가 하 는 경로 입 니 다.
MD5
속성 파일 에 아래 설정 추가:
spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**
Url 처리 증가:
@ControllerAdvice
public class ControllerConfig {
@Autowired
ResourceUrlProvider resourceUrlProvider;
@ModelAttribute("urls")
public ResourceUrlProvider urls() {
return this.resourceUrlProvider;
}
}
페이지 의 사용 방식 은 다음 과 같 습 니 다.
<link rel="stylesheet" type="text/css" href="${urls.getForLookupPath('/css/main-app.css')}" rel="external nofollow" >
컴 파일 하면 다음 내용 이 됩 니 다:
<link rel="stylesheet" type="text/css" href="/css/main-app-4v371326bb93ce4b611853a309b69b33.css" rel="external nofollow" >
버 전 번호속성 파일 에 아래 설정 추가:
spring.resources.chain.strategy.fixed.enabled=true
spring.resources.chain.strategy.fixed.paths=/js/**,/v1.0.0/**
spring.resources.chain.strategy.fixed.version=v1.0.0
페이지 의 사용 방식 은 다음 과 같 습 니 다.
<script type="text/javascript" src="${urls.getForLookupPath('/js/main.js')}"></script>
컴 파일 하면 다음 내용 이 됩 니 다:
<script type="text/javascript" src="/v1.0.0/js/main.js"></script>
어떤 방식 을 사용 하 든 효 과 를 실현 할 수 있 고 작업량 이 많 지 않 으 면 되 며 최적화 가 끝 이 없 으 면 된다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.