잼쓰_
Jam's IT
잼쓰_
전체 방문자
오늘
어제
  • 분류 전체보기 (8)
    • IT (6)
      • JAVA (2)
      • GCP (1)
      • Tools (2)
      • Architecture (1)
    • 경제 (0)
    • 책 리뷰 (2)
      • Clean Code (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
잼쓰_

Jam's IT

웹 브라우저의 리소스 호출, 그리고 CDN
IT/GCP

웹 브라우저의 리소스 호출, 그리고 CDN

2023. 5. 10. 22:04

캐싱, 캐시 비슷해서 짤 가져와봤다.. 다 돈 벌려고 하는거니까..?

내가 지금 일하고 있는 회사에서는
GCP를 이용하여 홈페이지를 운영 중에 있다.

 

그리고 많은 API를 개발하면서 상품과 그에 대한 이미지를 같이 호출하는 일이 많다.

(당연하겠지, 손님이 그림을 안 보면 어떻게 물건을 사;;)

 

보통 이미지를 제공할 때 GCP에 저장된 이미지들의 URL을 output으로 제공하는데,
목록화면에서 상품 가짓수가 많으면 많을수록 이미지가 조금씩 늦게 나오는 경향이 있었다.

 

그래서 웹브라우저는 서버간에 콘텐츠를 어떻게 호출할까?
웹 브라우저는 최초 리소스를 호출할 경우, 서버에서 완전한 HTTP 요청/응답을 진행한다.

 

- 리소스: 웹브라우저가 HTTP 요청으로 가져올 수 있는 모든 종류의 파일(HTML, CSS, JS...)
- 완전한 요청: 리소스 요청시 아무런 조건이 없는, 서버에서 리소스를 호출해서 가져오는 동작 이후
  응답에 포함된 Cache-control Header에 따라 해당 리소스의 주기가 결정된다.

 

Cache-Control Header는 그럼 어디서 봐?

Cache-Control Header는 웹브라우저 개발자 도구에 보면 확인이 가능하다.

크롬 개발자 도구 - Network에 호출된 API를 눌러보면 위의 그림처럼 나오게 된다.

Cache-Control Header의 응답값은 여러 가지가 있는데 내가 사용했던 것들만 나열해 본다면 다음과 같다.

Title Description
no-cache 캐시 관리자에게 캐싱을 허용하나
사용 전 필수로 Server에 유효성 체크
no-store 캐싱을 금지
max-age 초 단위로 캐시가 유효한 시간을 제공
must-revalidate 캐시 관리자에게 내부 유효성 체크를 허용하지 않으며, 항상 Server에 유효성 체크

좀 더 자세한 내용은 위에 링크에서 좀더 세분화된 응답 값을 볼 수 있다.


CDN 

그렇다면 CDN은 무엇일까?
CDN을 구글에서 찾아보면 두가지로 정의가 된다.

  • Content delivery network 
  • Content distribution network

풀어서 얘기한다면 

콘텐츠를 효율적으로 전달하기 위해 여러 노드를 가진 네트워크에 데이터를 저장하여 제공하는 시스템

이라고 정의하면 될 것 같다.

 

즉 CDN을 통해 각 사용자들에게 있어 가장 가까운 서버를 통해 컨텐츠를 전송한다고 보면 된다.
내 집에서 가장 가까운 서버에서 리소스를 가져온다면 훨씬 더 빨리 리소스가 완성이 될 테니까!

 

Google에서 설명해주는 CDN에 대한 그림이다. 글로 쓰는 것보다 그림이 역시..

GCP에서 제공하는 API 중 cacheControl을 제어하는 문서는 다음을 참고하자.

https://cloud.google.com/java/docs/reference/google-cloud-storage/latest/com.google.cloud.storage.BlobInfo.Builder

 

Class BlobInfo.Builder (2.22.1)  |  Java client library  |  Google Cloud

Creates a BlobInfo object.

cloud.google.com


다른 곳은 어떻게 사용하고 있을까?

캐싱 데이터를 회사에 적용하려다 보니
문득 이런 생각을 하게 된다.

 

 

다른 회사는 이걸 어떻게 쓰고 있는 거지?

※ 다른 회사들을 어떻게 적용하는지 알게 되면 좀 더 추가해 보겠습니다.

 

토스

https://toss.tech/article/smart-web-service-cache

 

웹 서비스 캐시 똑똑하게 다루기

웹 성능을 위해 꼭 필요한 캐시, 제대로 설정하기 쉽지 않습니다. 토스 프론트엔드 챕터에서 올바르게 캐시를 설정하기 위한 노하우를 공유합니다.

toss.tech

정리한다면 다음과 같다.

  • HTML 파일
    • HTML을 불러올 때마다 새로운 배포를 확인, max-age=0, s-maxage=31536000 설정
      ※ max-age=0, s-maxage=31536000의 의미
      CDN에서는 1년 동안 캐시되지만 브라우저에서는 매번 재검증 요청을 보내도록 설정 가능
  • JS, CSS 파일
    • 임의의 버전 번호를 URL 앞부분에 붙여서 빌드 결과물마다 고유한 URL을 설정,
      리소스가 만료될 일이 없기 때문에 max-age의 최대치인 max-age=31536000 적용

 

마치며

서비스를 더 빠르게 호출하기 위해 많은 것들이 만들어지고 있다는 것.

이것들을 알기 위해서 개발자들은 더 열심히 공부해야 된다는 것.

열심히 하자!

    잼쓰_
    잼쓰_

    티스토리툴바