캐시(Cache)와 친해지기

최동근·2022년 12월 17일

CS

목록 보기
1/3

안녕하세요.
오늘은 컴퓨터 공학에서 필수로 알아야 하는 캐시(Cache) 에 대해 알아보겠습니다. 🤔
너무너무 중요한 개념임으로 잘 따라와 주시면 감사하겠습니다.

💡 목차

  1. 캐시 넌 누구니?
  2. 캐시의 종류

1) 캐시 넌 누구니?

가장 먼저 위키백과에 나와있는 캐시의 정의를 살펴보겠습니다.

캐시란?
컴퓨터 과학에서 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다. 캐시는 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간없이 더 빠른 속도로 데이터에 접근할 수 있다.
(출처 : https://ko.wikipedia.org/wiki/%EC%BA%90%EC%8B%9C )

간단히 이해하기 쉽게 정리하자면, 캐시는 데이터의 효율적인 사용을 위해 사용할 데이터를 미리 저장하는 저장소라고 보시면 됩니다.👀
캐시는 네트워크 통신, 하드 디스크 접근 등 컴퓨터 시스템의 곳곳에서 병목이 일어날 수 있을만한 지점의 성능 향상을 위해 캐시를 사용하곤 합니다.
컴퓨터 과학에서 캐시는 여러 종류가 있지만 가장 기본적인 캐시인 "CPU 캐시" 를 살펴보겠습니다 🚀

해당 이미지는 컴퓨터 내부에서 일어나는 CPU 의 명령어 처리 방식을 도식화한 이미지입니다.
이해가 어려우시다면 프로그램은 어떻게 동작할까? 를 참고 부탁드립니다 🥸

해당 글을 보시기 어려운 분들을 위해 간략히 어떻게 프로그램이 작동하는지 적어보겠습니다 🙆🏻

A 라는 프로그램을 실행시키기 위해 마우스를 이동하여 클릭합니다.
그러면 모니터에는 프로그램 실행 로딩이 진행되면서 프로그램이 실행되죠?
이 과정에서 컴퓨터의 디스크의 저장되어 있는 프로그램은 메모리(RAM) 으로 올라가게 됩니다.
메모리에 올라간 기계어(Binary Code) 형태의 프로그램은 명령어(Instruction) 과 데이터(Data) 영역이 있습니다. 그리고 해당 프로그램은 CPU(Processor) 에 의해 하나하나 씩 실행이 됩니다.

여기서 저희가 집중해야할 부분은 CPU와 RAM 이 분리되어 있다는 점입니다 ❗️

어떻게 보면 당연한 이야기지만, 잘 생각해 보면 분리되어 있기 때문에 데이터 가져오는 동작(Fetch) 에는 짧지만 시간이 걸리겠죠?
일련의 데이터 메모리에서 가져오는 데 걸리는 시간은 사람이 인지하지 못할 정도로 매우 짧지만 수 많은 데이터가 처리 된다면 전체 프로그램으로 봤을 때 CPU 에서 메모리에서 데이터 가져와서 처리하는데 많은 시간이 걸릴 것 입니다❗️
이를 개선하기 위해 CPU와 Memory 사이에 작은 저장소를 두어 CPU 가 처리해야 할 Memory 데이터 를 미리 저장해 두는 저장소를 CPU 캐시라고 하는 것입니다.


컴퓨터를 구성하는 메모리 시스템 💾

해당 이미지는 일반적인 메모리 시스템을 도식화한 이미지입니다. CPU 와 Main Memory 사이에 Cache가 존재하는게 보이시나요? Cache는 SRAM 타입의 메모리이며, 집적도가 낮아 가격이 비쌉니다.
일반적인 컴퓨터의 CPU 에서는 3개의 Level Cache를 가지며, CPU는 낮은 Level 부터 데이터를 탐색하게 됩니다.

캐시가 효율적으로 동작하려면 캐시에 저장할 데이터가 지역성을 가져야 합니다.
데이터 지역성 원리에 대해 잘 모른다면 데이터 지역성 원리란? 을 참고해주세요 🔥


2) 캐시의 종류

컴퓨터에는 효율적인 컴퓨터 동작을 위해 다양한 종류의 캐시가 존재합니다 🥸

  • CPU 캐시(CPU Cache)

캐시 메모리라고 불리는 CPU 캐시는 앞에서 살펴 보았죠?
여기서는 캐시 메모리에 대해 더 배워 보겠습니다 🤔

캐시 메모리의 역할을 수행하기 위해서는 CPU 가 RAM에 올라가 있는 데이터 중 어떤 것을 원할 것인가를 어느정도 예측할 수 있어야 겠죠?

만약 CPU 캐시에 미리 올려둔 데이터가 해당 순간에 사용되지 않는 데이터라면 캐시라는 비싼 메모리를 사용할 필요가 없는거잖아요?
따라서 캐시는 최대한 CPU가 이후에 참조할, 쓸모 있는 정보를 많이 가지고 있어야 합니다.
이렇게 캐시 안에 CPU가 이후에 사용할 데이터가 있는 경우를 적중 했다고 표현할 수 있겠죠?
이를 캐시 적중률(Hit Rate) 라고 합니다.
캐시는 적중률을 극대화 시키기 위해 데이터 지역성 원리를 사용합니다 📚
이번 글은 캐시에 대해 전반적인 부분을 다루기 위해 제작되었음으로, 데이터 지역성 원리가 생소하다면
데이터 지역성 원리란? 참고 부탁 드립니다.

  • 디스크 캐시(DIsk Cache)

디스트 버퍼라고도 불리는 디스크 캐시는 디스크 제어와 외부와의 인터페이스를 위한 장치인 하드 디스크(Secondary Memory)를 위한 캐시라고 생각하시면 됩니다.

하드 디스크는 가격이 매우 싸며 용량이 매우 큽니다. 또한 CPU 기준 가장 바깥 부분에 존재하는 비휘발성 메모리 타입이기에, 컴퓨터 내부(여기서는 CPU)와 컴퓨터 외부를 연결해주는 인터페이스 역할을 주로 합니다.
저희가 프로그램을 실행할때 메모리에 해당 프로그램이 올라가기전에 위치하는 곳이기도 합니다.

이때, 하드 디스크로 부터 읽을 내용을 일부 보존해두는 메모리 영역을 디스크 캐시라고 합니다.

디스크 캐시의 원리

디스크 캐시를 활용하는 대표적인 OS 는 윈도우입니다.
하지만 하드웨어의 기술이 엄청난 속도로 발전한 현재 디스크 엑세스 속도 또한 향상되었기에,
디스크 캐시의 효과는 그리 크지 않습니다 🙆🏻

  • 기타 캐시
    • 웹 캐시(Web Cache)
    • DNS 캐시(DNS Cache)
    • 캐시 서버(Cache Server)

저희가 지금까지 봤던 캐시의 종류는 하드웨어를 통해 관리되는 캐시였습니다.
그렇다면 소프트웨어적으로 관리되는 캐시도 존재하겠죠?


💾 웹 캐시(웹 브라우저 캐시)

서버와 클라이언트가 서로 통신을 하면 당연히 지연이 생길 수 밖에 없습니다.
즉 접근 시간(Access Time)이 생기기 마련인데, 이 문제를 해결하기 위한 일련의 기술을 웹 캐시라고 합니다.

웹 캐시의 일종인 웹 브라우저 캐시는 브라우저를 사용 할 때 요청할때 마다 멀리 떨어져 있는 웹 서버에 접근하는 것이 아니라, 해당 웹 서버 정보를 캐싱하여 재 방문시, 캐시 정보를 보여주어 접근 속도 향상에 도움을 주며 대역폭 소비가 최소화되어 개선된 환경을 제공하는 캐싱 방법입니다.

웹 브라우저 캐시 동작 원리 🧑🏼‍💻
1. 브라우저가 웹 서버의 일부 컨텐츠를 요청한다.
2. 컨텐츠가 브라우저 캐시에 없으면 웹 서버에서 직접 검색한다.
컨텐츠가 이전에 캐싱 되었다면 브라우저는 서버를 우회하여 캐시에서 직접 컨텐츠를 로드한다.
3. 이때 그냥 로드하는 것이 아니라 유효성 검사를 통해 서버가 보유하고 있는 최신 버전과
비교하여 캐싱한다.

그렇다면 웹 서버의 자원 중에 어떤것이 주로 캐싱될까요?
캐싱을 할 때 자원의 원천인 웹 서버에서 해당 자원이 자주 바뀌면 캐시할 가치가 있는 자원일까요?
계속 유효성 검사가 필요하기 때문에 오히려 캐시를 사용하지 않는 편이 더 좋을 수 있습니다.
따라서 웹 서버의 자원 중 잘 변하지 않는 자원, 즉 정적 자원을 캐싱합니다❗️
정적 자원에는 이미지,HTML,CSS,JavaScript 문서가 있습니다.

💾 DNS 캐시

DNS 캐시를 이해하기 위해서는 DNS 서버(Domain Name Server)에 대한 이해가 필요합니다.
DNS 서버란?을 참고해주세요!🙆🏻

방문하고자 하는 IP 주소를 얻기 위해서는 Domain Server에 방문하여 사용자가 입력한 Domain 에 대한 IP 주소를 얻어야 합니다.
하지만 하루에도 수 없이 많은 사이트를 방문하는 우리를 생각했을 때, 이러한 작업은 Domain Server 에 있어서 엄청난 부담이 될 것 입니다 😱
그래서 이러한 부하를 줄여 주기 위한 수단으로 나온 것이 DNS 캐시 입니다.

클라이언트의 각 PC 내에 작은 DNS 캐시 서버를 만들어서 최근에 방문한 사이트의 Domain 정보와 IP 주소를 기록해 둡니다.
이해하기 쉽게 비유하자면 클라이언트의 PC 외부에 존재하는 DNS 가 IP 를 이어주는 전화번호부라면 각 DNS 캐시는 클라이언트가 가지는 작은 임시 전화번호부라고 생각하면 됩니다 🧑🏼‍💻

DNS캐시 동작 원리 👩🏼‍💻
1. 클라이언트가 접속하고자 하는 웹 사이트(웹 서버)의 도메인 주소를 브라우저 입력창에 입력한다.
2. 웹 브라우저가 입력창에 입력된 도메인 주소에 매핑되는 IP 주소를 찾기 위해 DNS 서버를 찾아가기 전에 먼저 자신의 PC 내부에 저장되어 있는 DNS 캐시 데이터베이스를 먼저 확인한다.
3. 만약 DNS 캐시 데이터베이스에 존재한다면, 여기서 바로 IP 정보를 확인하면 된다.
4. 없다면 어쩔 수 없이 DNS 서버를 참고한다. 이떄 해당 IP를 DNS 캐시 데이터베이스에 저장한다.

💾 캐시 서버

캐시 기능이 효율적인 전반적인 컴퓨터 관련 작업에 있어서 필수적이다 보니, 캐시 기능을 위한 서버가 존재하는데 이를 캐시 서버라고 합니다.
캐시 서버에 대한 내용은 캐시 서버에 대해 알아봅시다 에 정리가 잘 되어있으니, 참고 합시다!👍


참고

[SW직무 면접 대비] / 운영체제 / Cache(캐시)란? (SRAM, DRAM, SSD,HDD
[ 임베디드 시스템-메모리 ] 캐시메모리 DRAM, SRAM, FLASH, ROM #2
디스캐 캐시와 캐시 메모리
위키백카-캐시

profile
비즈니스가치를추구하는개발자

0개의 댓글