질문을 삭제하지 말아주세요.!
 
1
0
-1

로컬서버에서 인터벤션 이미지 컴포넌트를 이용해서 이미지를 만들고 그 이미지의 응답 헤더에 etag를 보내서 브라우저에서 새로고침 했을때 응답코드 304와 if non match 값이 나오는것까지 실습을 했었습니다.

그리고 리눅스 가상서버 임대와 도메인을 구입한뒤 가상서버에서 홈페이지를 만들고 라라벨을 설치해서 겉으로는 잘 작동합니다. 하지만 인터벤션 컴포넌트로 이미지를 생성하고 etag를 응답헤더에 보내고 새로고침을 아무리해봐도 응답코드는 200으로만 뜨고 if non match 값은 뜨지를 않습니다.

이 문제로 열심히 구글링한 결과, 해결방법은 찾았습니다. 홈페이지의 아파치 설정에서 다음과 같은 구문을 넣었는데요


Header unset Cache-Control

Header append Cache-Control "public, max-age=0 "

 해결한건 좋지만 우려되는것은 제가 지금 멤캐시를 쓰면서 모델쿼리캐싱도 하고 있는데 위의 구문이 어떤것을 뜻하는지 몰라서 캐싱이 잘 작동되는지 우려가 됩니다. 

초보 개발자에게 도움이 될만한 정보 알려주시면 정말 감사합니다~!

    CommentAdd your comment...

    2 answers

    1.  
      2
      1
      0

      저걸 넣기 전의 헤더를 볼 수 있었으면 좋았을 것 같습니다.

      저 구 문은 모든 캐시컨트롤을 초기화하고 public, max-age=0만 넣겠다는 의미같은데요.

      각 요소가 어떤 의미인지는 아래를 참고하시면 되겠습니다

      https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=ko

      이 모든 건 브라우저와 프락시 등에서의 컨텐츠 캐싱을 의미합니다. 그러니까 아파치가  HTTP로 서비스하는 영역에서의 캐싱을 의미하고요. PHP에서 맴캐시를 사용하는 등의 어플리케이션 단에서의 캐싱과는 별개로 보시면 됩니다.

      추가로, 말씀하신 해결책은 상황에 따라 썩 좋진 않은데,

      max-age가 0이라는 건 로컬에 한번 받아온 파일의 신선도를 매번 확인하겠다는 의미입니다. 결국 네트웍을 한번 건너갔다와야 하는거죠. 정적 컨텐츠 종류별로 구분하여 max-age를 설정하는게 좋습니다.

        CommentAdd your comment...
      1.  
        3
        2
        1

        캐싱은 여러 레이어가 있는데요. 각 레이어가 얻고자하는 바가 다릅니다.

        • Etag를 이용한 캐싱은 (1) 구간의 트래픽을 (2)로 위임하기 위한 것입니다. 서버 부하/네트워크 트래픽 절감 및 클라이언트의 반응 속도 향상.
        • 인메모리 캐시는 (5) 구간의 트래픽을 (4) 구간으로 대체하기 위한 것입니다. DB 부하 분산 및 서버 응답 속도 향상.
        • 인터벤션 이미지의 경우는 (3)인데, (1) 요청을 받고 파일을 읽어서 이미지 객체로 만드는 과정에서 발생하는 앱 서버의 낭비를 아끼기 위해 HTTP 캐싱을 이용한 케이스입니다.

        구체적인 내용은 HTTP 서버를 직접 구현하고 계신(^^) 갓영익님이 잘 설명해 주셨네요.


        1. Joo YoungIk

          이러시면 제가 뭐 대단한 걸 만드시는 아십니다 ㅋ 저도  HTTP 공부 중입니다. 모바일이라 설명이 부족하지 않았나 싶었는데, 주원님이 정확하게 표현해주셨네요!

        CommentAdd your comment...