[백엔드 로드맵] 캐싱

Gyubster·2022년 2월 9일
0

캐싱에 대해서 알아보자. 주로 참고한 사이트는 여기이다.


Caching

: Caching은 데이터를 일시적인 저장공간(캐시)에 저장하는 것을 의미한다. 캐시는 임시 파일과 임시 데이터들을 저장하는 메모리로 더 빠르게 관련 데이터들에 접근을 할 수 있게해준다.

Website Caching

:Website Caching은 웹페이지의 사본을 서버 혹은 브라우저에 저장하는 것을 의미한다. Website Caching이 필요한 이유는 매 연결마다 DNS를 통해 IP 주소를 받고 해당 IP 주소로 가서 Website 구성에 필요한 파일들을 받는 것은 사용자가 많이 몰리게 될 경우 시간이 오래걸리는 문제를 일으킬 수 있기 때문이다. 따라서, 첫 방문을 할 때, Website Caching을 하여 다음에 있을 방문에서는 저장한 사본을 통해서 Website를 빠르게 불러오는 것이다.
이러한 Website Caching가 실행되는 과정은 아래와 같다.
1. 유저가 웹사이트 "https://velog.io/gyubster_shim"을 실행한다.
2. *CDN 혹은 Server Cache가 요청한 웹페이지의 사본이 있는지 확인한다.
3. Cache가 있으면 Cache Hit로 캐시에 저장되어있는 파일을 전달한다, Cache가 없으면 Cache Miss로 새로운 request를 보내 필요한 데이터를 서버로부터 전달받는다.

Website Caching의 종류

: Server-side Caching과 Client-side Caching으로 종류가 나눠진다.

Server-side Caching

: Server-sdie Caching의 경우, 웹사이트의 첫방문시에 일반적으로 Origin server에 요청을 하여 필요한 데이터를 불러온다. 이 과정에서 Origin Server에 Request를 통해 받은 데이터를 Caching Server에 저장한다. 이후 재방문을 하게될 때는, Caching Server에 Request를 보내고 이에 따른 Response를 받는다. 단점으로는 Origin server 데이터를 변경한 경우, 반영이 안될 수 있다. 따라서, 콘텐츠의 유효함을 확인하는 알고리즘이 있고 이에 대한 정보가 HTTP Header에 들어간다.

Server-side Caching은 Object Caching, Opcode Caching, CDN Caching 나눠진다. Object Caching은 query와 그 결과값까지 Caching하는 것으로 같은 요청시 빠르게 결과값을 전달한다. Opcode Caching은 PHP 스크립트 파일을 컴파일한 데이터를 저장함으로써 같은 요청시 빠르게 결과 값을 전달한다. CDN은 Content Delivery Network로 사용자의 요청이 잦은 컨텐츠를 Cache 서버에 분산 배치하여 컨텐츠의 전송 중 발생하는 트래픽 집중 & 병목현상 및 데이터 손실을 줄인다.
하지만 이러한 Server-sid Caching의 단점은 높은 지연률이다. 유저가 요청을 보내고 이에 따른 응답을 받는 과정에서 필연적으로 지연률로 인해 웹사이트가 늦게 로딩되는 문제 등이 일어난다.

Client-side Caching

: Client-side Caching는 클라이언트(브라우저)에 웹페이지의 사본을 저장하는 방식이다. 즉, 로컬 환경에 저장되는 것을 의미한다. 종류로는 Browser Request Caching, Jabascript/AJAX Caching, HTML 5 Caching이 있다.

각각 어느 상황에 사용해야하는 것일까?

Server-side Caching: 정적인 웹일 경우, 사용하면 좋음.
Client-side Caching: 동적인 웹일 경우, 사용하면 좋음. 대부분의 웹사이트들은 동적인 웹이고, 실제로 Client-side Caching을 이용하여 웹을 구성하고있음. 추가적으로, Fall back file을 통해서 offline일 때의 대비도 할 수 있다.


Additional Information

  • CDN(Contents Deleiver Network)이란?
    : 웹 브라우저에서 특정 주소에 접근하여 필요한 컨텐츠를 서버에 요청한다. DNS에서는 각 컨텐츠에 대한 요청을 보낸 유저와 가장 가까운 위치에 배치된 CDN 서버에 매핑되어 요청한 컨텐츠를 전달받는다. 할당받은 CDN 서버에서 파일을 찾지 못하면, 다른 서버에서 CDN 서버에서 찾은 다음에 컨텐츠를 전달한다. 컨텐츠가 없는 경우, Origin server에 CDN이 요청을 보내 새로운 컨텐츠를 저장한다. 즉, 컨텐츠가 캐싱이 되어있지않으면 데이터를 전달해주는 서버인 프록시 서버로써 CDN이 역할을 한다.

    CDN의 구성 요소로는 CDN서버:컨텐츠 저장, Contents 분배:지정된 컨텐츠를 스케쥴에 따라 최신 컨텐츠 버전을 유지함, GLB 라우터: 분산되어있는 CDN서버 중 요청자로부터 가장 가까운 서버를 제공해주는 라우터, CDN 관리 및 모니터링 SW: CDN 서버를 중앙관리 및 장애대처가 있다. CDN의 캐싱방법으로는 Static Caching: 관리자가 Caching 되는 파일을 미리 Cache Server에 복사함, Dynamic Caching: 사용자가 요청을 한 파일을 찾고 Cache Server에 저장여 이후 요청에는 Cache Server에서 파일을 가져옴.(TTL이 지나면 파일이 존재안할수있음.)
    이러한 CDN을 통해서, ISP측면에서 성능 향상 및 사용자 만족도 향상, Userc측면에서 QoS가 확보된 서비스 및 다양한 컨텐츠 서비스를 제공할 수 있다.
  • Redis
    :
profile
공부하는 예비 개발자

0개의 댓글