이번 학기에 Computer Network을 수강하면서 재밌는 사실을 많이 알게 되었다. 스스로 얼마나 무지했는지 늘 깨닫고 우울해지면서도 주어진 지식을 바탕으로 이것저것 유추해 보며 즐거운 시간을 보낼 수 있었다. 이 글로 이번 학기, 내가 가졌던 Question 중 하나를 공유해 보고자 한다.
Web Cache에 대해 배우면서 Proxy Server에 Data가 저장된다는 사실을 되짚었다. 예전이었다면 그냥 그렇게 넘어갔을 텐데, 강의를 듣던 당시 restFul API에 대해 고민하던 나는 그냥 지나칠 수 없었다. 사용자 specific 한 request를 public cache에 저장하는 게 옳은가? 저장한다면 사용자를 어떻게 구분하지?
GET
, POST
, PATCH
: cacheable requestGET
도 POST
도 PATCH
도 cacheable 하다. (물론 대부분 GET
만 caching한다 알고 있지만, 어쨌거나 명세상 가능하다) 그러면 내가 로그인한 후 요청한 정보가 caching 되고 이후 다른 사용자가 내 정보를 request 하면 cache가 작동하는 걸까? 그러면 안 된다! 그래서 cache에 대해 좀 더 알아봤다.
여기서 언급되는 Web Cache는 Reverse(Gateway) Proxy가 아닌 Forward Proxy를 얘기한다.
공부한 내용으로는 '아니'다. 하지만 내가 잘못 이해한 건 아닐까? 어쩌면 모든 proxy는 origin에 request를 보내고 304
를 응답받은 다음 cache를 response하는 게 아닐까? 혹시 모르니 한 번 더 확인해 봤다. 그리고 역시 아니었다. max-age
와 같은 cache-control
을 토대로 cache가 유효하다 판단하면 origin에 request 하지 않고도 즉시 response 한다.
그렇다면 proxy는 request의 동일 여부를 판별해야 한다. 그 기준은 1) HTTP Method, 2) destination address, 3) cache directives in header다. 때문에 위에서 우려한 바와 같이, 내 정보가 cache되어 있다 한들, 다른 사용자에게 내 정보가 response 되지 않을 수 있다. 하지만 여기서 한 가지 물음표가 생긴다.
HTTPs는 Start_Line을 제외한 모든 request, response를 암호화한다. 그리고 이 암호화는 end-to-end이기 때문에 중간에 열어볼 수 없다. 하지만 cache directive는 header에 있다. 그렇다. forward proxy는 cache 역할을 상실했다.
친구가 지적했다. "그냥 forward proxy랑 내가 HTTPs connection을, forward proxy랑 origin server가 HTTPs connection을 가지면 되는 거 아냐?" 하지만 일반 사용자가 cache를 위한 forward proxy를 두고 그곳으로 request하는 경우가 얼마나 있는가?
CDN의 Idea는 replica를 지역별로 둬서 access cost를 줄이겠단 대에 있다. 어라? 뭔가 web cache랑 비슷하지 않은가? 최근 CDN은 너무나 당연하게 되어서 도입하지 않는 기업이 잘 없는 것 같다. 그런데 어쩌면 원인이 HTTPs 상용화가 아닐까?
원래 HTTPs는 로그인과 같은 특정 page에서만 사용되었다. 하지만 어느새 모든 page에 사용되기 시작했고, chrome과 같은 대부분의 브라우저는 HTTPs를 사용하지 않는 site에 경고를 넘어 접속을 차단하기 시작했다. 때문에 Forward Proxy는 급속도로 Cache의 역할을 상실해갔다. 이러한 배경이 기업들에게 CDN 사용을 강요한게 아닐까?
그리고 또 하나. 요즘 많은 data는 User-specific하다. 그리고 이런 data는 보통 public cache에 저장되지 않는다. SNS가 유행하고 Youtube와 같은 사용자 최적 Algorithm이 제품 선택의 기준이 되는 시대에서 어쩌면 HTTPs가 아니더라도 Forward Proxy는 역사의 뒤안길로 사라질 운명이 아니었을까?
이상이 나의 질문이자 홀로 내린 결론이다. 내 블로그의 다른 글이 그러하듯 스스로의 생각을 정리하는 글이기 때문에, 충분히 잘못 판단한 부분이 있을 수 있다. 그렇다면 부디 가르침을 베풀어 주기를 부탁드린다.