캐시(Cache)
캐시 계층은 데이터가 잠시 보관되는 곳으로 별도의 캐시 계층을 이용해서 DB 서버나 웹 서버의 부하를 줄일 수 있습니다.
과정을 요약하면 이렇습니다.
- 원하는 페이지에 요청을 보냄
- key를 이용해서 필요한 캐시를 가져옴 -> cache.get('key')
- 캐시가 존재하면 데이터를 그대로 사용하고, 그렇지 않으면 새로 서버에서 데이터를 읽고 캐시에 저장함 -> cache.set('key', 'content', expired)
따라서 아래와 같은 점들을 고려해야 합니다.
- 데이터 갱신은 자주 일어나지 않지만 참조는 빈번해야 함
- 휘발성이기 때문에, 데이터를 보관하는 역할을 하여선 안됨 (ex. 사용자 정보를 보관하는 경우 X)
- 장애 대처를 위해 캐시 서버는 분산되어야 함
CDN(Content Delivery Network)
CDN 서비스는 바로 이런 캐시 서버를 지원해주는 서비스입니다.
위에서 언급했듯이, 캐시는 데이터 갱신이 잦을 경우 사용하기 까다롭습니다. CDN은 정적인 콘텐츠를 저장합니다. 정적 콘텐츠는 image, vedio, css, javascript, html(규격) 등입니다.
가령, 한국에서 애플 홈페이지에 접속할 때, 미국에 있는 웹서버에 접속해서 페이지를 가져오기 때문에 로딩이 오래 걸립니다.
그렇다고, 서버 전체를 전세계 각국에 설치하고 이를 데이터가 잘 돌아가게 처리하겠다? 너무 큰 작업이 될 것입니다.
그래서 전세계 각국에 정적인 데이터(페이지)를 내려주는 게 목적이라면, 각국에 CDN을 이용해서 페이지를 배포한다면 훨씬 로딩 시간을 개선할 수 있습니다.
- 정적 콘텐츠는 더 이상 웹 서버를 통해 서비스하지 않는다.
- 글로벌 범위에서도 로딩 속도 개선과 안정성 확보가 가능하다.
- 캐시가 DB부하를 줄여준다.
최근에는 CDN과 Object Storage를 결합해서 이미지, 비디오 등과 같은 정적인 저장소를 많이 사용합니다.
'Operation > System Architecture' 카테고리의 다른 글
다중 서버에서 Session 관리하는 방법! (Multi-server session) (0) | 2022.04.21 |
---|---|
메시징 시스템(Messaging System) 정리! (0) | 2022.04.18 |
Cron vs Event scheduler 장단점 정리! (0) | 2022.01.22 |
대규모 서비스 - I/O 부하 (느려졌다고 무조건 서버 증설? No!) (0) | 2021.12.25 |
서버리스(Serverless)란 무엇인가? (0) | 2021.10.05 |