00. 직면한 문제
아마존 S3서버에서 JSON파일을 받아 수정하고 다시 업로드를 해 조회하는 작업을 수행해야해습니다. 그러나 저장하고 업로드했는데도 이전 파일의 결과만을 받을 수 있었습니다. S3의 콘솔에 직접가서 확인해보니 변경사항은 잘 적용되어 있었는데도요! 어떻게 하면 새로 업로드한 파일을 가져올 수 있을까요?
01. 캐시 때문에 그렇습니다.
브라우저의 네트워크탭을 한번 확인해보겠습니다. 새 파일을 받아야하는 곳의 size of a file이 '(disk cache)'라고 나타는데요. 일반적으로는 네트워크 응답을 통해 다운로드한 파일의 크기가 표시되는 곳입니다. 즉 네트워크 응답으로 파일을 받은게 아니라 disk cache로 부터 파일을 받았다는 것을 알려주고 있습니다.
03. 디스크캐시
캐싱은 자원을 빠르게 얻게 해주는데요. 예를 들어 1GB의 큰용량의 파일을 요청할 때 여러번 그 파일을 요청하면 시간도 비용도 많이들게 됩니다. 하지만 disk cache는 내 컴퓨터 RAM에 파일을 저장해두는데요. 그래서 같은 파일을 여러번 요청해도 네트워크를 거치지 않고도 파일을 즉시 얻어올 수 있게 됩니다.
하지만 위와같이 예상치 못하게 같은 파일만을 얻은 결과를 만날 수 도 있습니다. 클라우드 저장소에 파일을 수정해서 올렸더라도 캐시는 그 변경사항을 알지 못하기 때문에 이전의 파일만을 가져오는 것입니다. 캐시의 만료기간 전까지는 새로운 파일을 가져오지않고 이전 파일을 읽기만 하게 될 것입니다.
04. 해결책
걱정마세요. HTTP요청 헤더에 설정만 해주면 쉽게 캐시를 컨트롤 할 수 있습니다. 여기서는 Axios라는 HTTP 네트워크 라이브러리를 사용했는데요 다음과 같이 쉽게 해결해보겠습니다.
import axios from 'axios';
const result = await axios.get('API_URL', {
headers: {
'Cache-Control': 'no-cache',
}
});
이외에도 많은 헤더 옵션과 캐시옵션들이 있으니 궁금하시면 방문해보세요 => MDN docs.
'JS, TS' 카테고리의 다른 글
아이콘은 어떤 확장자로 써야할까? (SVG, PNG, JPEG, GIF, WebP) (0) | 2023.09.20 |
---|---|
자바스크립트 비트연산자 시프트 활용하기 (Hex to RGB 컬러변환) (0) | 2023.09.08 |
Flutter, Nextjs 하이브리드앱 환경에서의 세션처리와 효율적인 HTTP 통신방법 (Axios 활용) (0) | 2023.07.13 |
도커, nginx, Vue환경에서 "WebSocket Connection to 'ws://some_ip/ws' failed" 에러해결 (0) | 2023.06.02 |
JSON file write and upload to S3 with Nodejs (0) | 2023.02.21 |