본문 바로가기
Programming & Platform/Web

웹 개발에서 캐시 무효화를 위한 쿼리 문자열 활용하기 - 꼭 알아야 할 실전 팁

by 코드스니펫 2024. 11. 13.
반응형

웹 개발을 하면서 정적 파일(예: JavaScript, CSS 파일 등)을 많이 사용하게 됩니다.

 

이때 브라우저는 페이지 성능을 높이기 위해 이러한 파일을 캐시에 저장하고, 동일한 파일 요청 시 캐시된 버전을 사용합니다.

 

이 방식은 페이지 로딩 속도를 빠르게 해주지만, 개발에는 수정된 최신 파일로 업데이트되지 않는 문제가 발생할 수 있습니다.

 

이 문제를 해결하기 위해 쿼리 문자열을 활용한 캐시 무효화 기법을 알아보겠습니다.

 

웹개발 캐시 무효화
웹개발 캐시 무효화

 

웹 개발에서 캐시 무효화를 위한 쿼리 문자열 활용하기 - 꼭 알아야 할 실전 팁

 

캐시 무효화란?

 

캐시 무효화(Cache Busting)는 브라우저가 항상 최신 버전의 파일을 사용하도록 강제하는 방법입니다.

 

예를 들어, JavaScript 파일을 수정했지만, 브라우저가 여전히 이전의 캐시된 파일을 사용한다면 변경 사항이 반영되지 않는 문제가 생깁니다.

 

특히, 긴급 패치나 빈번한 업데이트가 필요한 프로젝트에서는 이 방법이 필수적입니다.

 

  • 왜 필요한가?
  • 사용자 브라우저에 캐시된 오래된 파일이 남아 있는 경우 최신 업데이트가 반영되지 않을 수 있습니다.
  • 성능 최적화를 위해 브라우저는 정적 파일을 캐싱하지만, 빠르게 업데이트된 버전으로 반영하고 싶을 때는 캐시 무효화가 필요합니다.

 

 

 

쿼리 문자열 `?v=20190408.01`의 의미

 

HTML 파일에서 `?v=20190408.01`처럼 파일 경로 끝에 추가되는 쿼리 문자열은 캐시 무효화를 위한 버전 정보입니다.

 

이 값이 변경되면, 브라우저는 해당 파일을 새로운 파일로 인식하여 캐시된 파일 대신 다시 다운로드하게 됩니다.

 

예를 들어, 다음과 같은 코드가 있다고 해봅시다.

 

<script type="text/javascript" src="js/approval-diagram-script.js?v=20190408.01"></script>

 

  • 여기서 `?v=20190408.01`은 2019년 4월 8일에 업데이트된 파일임을 나타냅니다.
  • 이후 JavaScript 파일을 수정했다면, `?v=20190408.01`처럼 쿼리 문자열을 변경하여 브라우저가 최신 버전다시 다운로드하게 할 수 있습니다.

 

웹개발 캐시 무효화
웹개발 캐시 무효화

 

 

쿼리 문자열을 사용한 캐시 무효화 예제

 

다음은 정적 파일에 캐시 무효화를 적용한 HTML 코드입니다.

 

<!-- JavaScript 파일 캐시 무효화 -->
<script type="text/javascript" src="js/main.js?v=20191109.01"></script>

<!-- CSS 파일 캐시 무효화 -->
<link rel="stylesheet" href="css/style.css?v=20191109.02">

 

  • `?v=20191109.01`: 파일이 수정될 때마다 이 숫자를 변경합니다.
  • 이를 통해 브라우저는 기존 캐시를 무시하고 새 파일을 가져옵니다.

 

언제 쿼리 문자열을 사용하는 것이 좋을까?

이 방법은 특히 JavaScriptCSS 파일처럼 빈번하게 수정되지만 사용자 경험에 큰 영향을 줄 수 있는 파일에 유용합니다.

 

예를 들어, 다음과 같은 상황에서 사용하면 좋습니다.

 

 

 

서버 측에서 자동으로 쿼리 문자열 생성하기

 

일일이 파일을 수정할 때마다 쿼리 문자열을 수동으로 변경하는 것은 번거로울 수 있습니다.

 

이를 자동화하기 위해 서버 측에서 파일의 타임스탬프를 기반으로 쿼리 문자열을 동적으로 생성할 수 있습니다.

 

다음은 Node.jsExpress를 사용하여 자동으로 쿼리 문자열을 생성하는 예제입니다.

 

const express = require('express');
const app = express();
const fs = require('fs');

// 정적 파일 제공 시 타임스탬프 기반 쿼리 문자열 추가
app.get('/js/:filename', (req, res) => {
  const filePath = `${__dirname}/public/js/${req.params.filename}`;
  const timestamp = fs.statSync(filePath).mtime.getTime();
  res.sendFile(filePath + `?v=${timestamp}`);
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

 

  • 파일이 변경될 때마다 `mtime`(수정 시간)이 업데이트되므로, 자동으로 캐시 무효화가 적용됩니다.

 

웹개발 캐시 무효화
웹개발 캐시 무효화

 

캐시 무효화를 위한 다른 방법들

 

쿼리 문자열 외에도 브라우저 캐시를 무효화하는 다양한 방법이 있습니다.

 

아래 표를 참고하세요.

 

방법 설명 사용 예제
파일 이름 변경 파일명을 수정하여 캐시 무효화 `main.20191109.js`
HTTP 헤더 설정 서버에서 `Cache-Control` 헤더 설정 `Cache-Control: no-cache`
쿼리 문자열 URL 끝에 버전 정보 추가 `style.css?v=1.0.2`
Service Worker 활용 브라우저의 캐시를 제어하는 스크립트 활용 `sw.js`

 

 

 

마치며

이번 글에서는 쿼리 문자열을 이용한 캐시 무효화 방법에 대해 알아보았습니다.

 

정적 파일의 최신 버전을 브라우저에 즉시 반영하기 위해 이 방법을 적극적으로 활용해 보세요.

 

  • 쿼리 문자열을 사용하면 효율적으로 캐시를 제어할 수 있습니다.
  • 개발 환경에서뿐만 아니라, 실제 배포 환경에서도 성능 최적화에 기여할 수 있습니다.
  • 서버 측에서 자동으로 쿼리 문자열을 추가하는 방식을 도입하면 효율적으로 관리할 수 있습니다.

 

이제 쿼리 문자열을 사용하여 최신 파일을 빠르게 반영하고, 최적화된 웹 개발 환경을 구축해 보세요!

 

 

▼ 함께 보면 좋은 글 ▼

그레이트 한강, 개발 계획에 따른 분석 및 전망
TDD란 무엇인가 테스트 주도 개발의 모든 것
서울지하철, AI를 활용한 이상행동 탐지추적 시스템 개발
고용 24 누리집에서 취업 준비와 직업 능력 개발까지 한 번에!
재개발, 재건축 투자의 주의사항과 성공 전략
엔비디아, AI와 PC용 칩 개발 동시 추진 중
웹 브라우저, 매일 같이 스마트폰과 PC로 접속하는 디지털 세계의 대문
AI로 우울증 진단한다 - 국내 연구진이 개발한 인공지능 기술
웹젠 주가, 현황과 전망