Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

<!> 미완성

HTTP Cache 관련 헤더

성능 튜닝에 대한 생각

기본적으로 나는 HTTP 기반 서비스를 만들 때, 성능을 우선 생각하지는 않는다. 우선 중요하게 생각하는 건, 요청에 따라서 탄력적으로 대응할 수 있는지(쉽게 확장 가능한지)와 서버 몇 놈이 뻗더라도 서비스는 문제없이 작동하는 가용성을 중하게 생각한다. 초기에 성능은 유저가 "젠장! 느리잖아?"라는 말이 나오지 않을 수준으로 맞춘다. 뭐.. 성능은 별로 신경을 쓰지 않는다는 이야기다.

성능 보다는 모니터링 환경을 제대로 구축하는데, 시간을 들인다. 서비스 모니터링 하다가, 성능을 튜닝해야 할 시점이다 라고 판단하면 그때 부터 성능에 신경을 쓰는 스타일이다. 유저가 늘어남에 따라 서버 비용의 증가가 예상되는 시점이라던가.. 응답시간이 느려지는 패턴이 감지된다거나 하는 시점이 성능 튜닝 시점이다.

이제 성능 튜닝에 신경을 써야 할 시점이다. 그래서 이 문서를 남긴다.

CDN과 HTTP Header

역사적으로 HTTP에서의 캐쉬는 클라이언트 브라우저에 캐쉬할 데이터를 남기는 것을 목표로 한다. 웹 서비스를 구성하는 많은 요소들은 오랜 시간 동안 변하지 않는 정적 정보들이다. 이들을 웹 브라우저에 저장하고 있다가 동일한 요소들이 필요할 때는, 서버에 요청하는 대신에 브라우저에 저장한 내용을 사용하는 방식이다. 서버측 부담도 줄고, 사용자 역시 더 쾌적한 웹 서비스를 누릴 수 있다.

HTTP 헤더를 이용한 cache가 클라이언트 자원을 활용하는 거라면, CDN은 서버측 자원을 활용하는 방식이다. LOL 결승전 경기를 담은 동영상을 인터넷으로 서비스한다고 가정해보자. 서버는 한국에 있다. 한국 사용자는 가까운 한국 서버에서 동영상을 다운로드 하면 되니 쾌적한 시청이 가능할 것이다. 그러나 아르헨티나에 있는 사용자라면 애로사항이 꽃필 것이다. 물리적 거리로 인한 네트워크 지연 때문이다.

동일한 컨텐츠를 여러 지역에 배포하기 위해서 쉽게 사용할 수 있는 방법이 CDN이다. 개념은 간단하다. 그냥 여러 지역에 컨텐츠를 뿌리고, 유저는 가까운 지역의 edge서버에서 컨텐츠를 읽어오는 거다. CDN에 대한 내용은 여기를 참고하자.

여기에서 CDN과 HTTP를 이용한 cache는 그 용도가 매우 다르다는 것을 눈치챘을 거다. CDN는 지역 캐쉬고 HTTP는 클라이언트 캐쉬로, CDN은 지역간극을 메우기 위한 보완재 역할을 한다. 기본은 HTTP 캐쉬인 거다.

== HTTP Cache 헤더==

Cache - control

참고

  • http://www.mobify.com/blog/beginners-guide-to-http-cache-headers/