캐시란?
캐시(Cache)는 우리가 자주 접하는 데이터를 더 빠르게 가져오기 위해 미리 준비해 놓는 비서 같은 존재이다.
예를 들어, 당신이 서재에서 책을 읽고 있는데, 같은 책을 몇 번씩 꺼내보고 싶어 한다고 하자.
책을 서재 구석에서 매번 꺼내오는 것은 시간이 오래 걸리겠지만, 자주 보는 책을 책상 위에 준비해둔다면 훨씬 빨리 볼 수 있을 것이다. 이 책상 위의 책이 바로 캐시다.
운영체제도 비슷한 고민을 한다. CPU는 매우 빠르게 작동하는 반면, 메인 메모리나 디스크에서 데이터를 가져오는 데는 시간이 걸린다.
그래서 운영체제는 자주 쓰이는 데이터를 캐시에 저장해 두어, 필요할 때 신속하게 사용할 수 있도록 한다.
이로 인해 시스템 성능이 비약적으로 향상된다.
정리하자면, 캐시란 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.
저장 공간이 작고 비용이 비싼 대신 데이터를 미리 복사해 놓기 때문에 메인 메모리(RAM) 보다 빠르다!
작은 고추가 맵다
캐시의 중요성
캐시는 자주 사용되는 데이터나 계산 결과를 미리 저장해 놓는 곳이라고 했다.
어떤 데이터를 저장해 놓으면 좋을까?
- 업데이트가 자주 발생하지 않는 데이터
- 반복적으로 동일한 결과를 돌려주는 경우
- 자주 조회되는 데이터
즉, 캐시를 통해 '자주' '반복적'으로 사용하는 데이터를 빨리 접근할 수 있으므로 메인 메모리에 비해 접근 속도가 빨라 데이터 처리 시간을 단축하고, 시스템 응답 속도를 높일 수 있다.
지역성
캐시의 성능을 좌우하는 중요한 개념이 바로 지역성이다.
지역성이란 메모리를 참조할 때 특정 패턴에 따라 데이터를 집중적으로 사용하게 되는 성질을 의미한다.
지역성은 크게 시간적 지역성과 공간적 지역성으로 나뉜다.
시간적 지역성(Temporal Locality)
시간적 지역성이란, 한 번 참조된 데이터는 곧 다시 참조될 가능성이 높은 특성을 의미한다.
for
문 조건 변수(int i=0;
)를 선언했을 때, 이 `i`변수는 한 번 사용된 이후에 for
문이 끝날 때까지 계속 쓰일 확률이 높다.
따라서 시간적 지역성을 통해 같은 데이터를 캐시에 보관하면 크게 향상된다.
공간적 지역성(Spatial Locality)
공간적 지역성이란 한 번 참조한 데이터 근처에 있는 데이터가 참조될 가능성이 높은 특성을 의미한다.
예를 들어 for
문에서 어떤 배열에 접근했을 때 해당 배열이 위치한 메모리 공간의 내용은 for
문이 끝나기 전까지 계속 쓰일 확률이 높다.
이는 연속된 메모리 위치를 한 번에 캐시에 저장함으로써 효율적으로 데이터를 관리할 수 있게 해 준다.
순차 지역성(Sequential Locality)
순차 지역성이란 공간 지역성의 특수한 형태로 데이터가 순차적으로 참조되는 경향을 의미한다.
for
문에서 array[0]
를 참조한다면 array[1]
, array[2]
등 근접한 메모리 위치가 계속 참조될 확률이 높다.
캐시의 종류
캐시는 하드웨어적 관점뿐만 아니라 서버의 관점에서도 나뉜다.
서버 기반 캐시는 로컬 캐시(Local Cache)와 글로벌 캐시(Global Cache)로 구분된다.
Local Cache(로컬 캐시)
로컬 캐시란 각 서버마다 자신만의 캐시를 별도로 관리하는 것을 말한다.
장점
- 빠른 접근 속도
- 캐시가 서버 내에 존재하기 때문에 데이터 접근이 매우 빠르다.
- 리소스 활용
- 로컬 서버의 메모리나 디스크와 같은 리소스를 사용하여 효율적으로 작동한다.
단점
- 데이터 공유 어려움
- 또한 캐시가 서버 내에 존재하기 때문에 다른 서버의 캐시 데이터를 참조하기 어렵다.
Global Cache(글로벌 캐시)
글로벌 캐시란 여러 서버가 공통된 캐시 서버에 접근하여 데이터를 공유하는 것을 말한다.
장점
- 데이터 공유 용이
- 별도의 캐시 서버를 사용하기 때문에 서버 간 데이터 공유가 쉽다.
- 데이터 분산
- 데이터를 여러 캐시 서버에 분산 저장할 수 있어 안전성을 높일 수 있다.
단점
- 느린 속도
- 네트워크 트래픽을 사용해야 하므로 로컬 캐시에 비해 데이터 접근 속도가 느리다.
- 네트워크 의존성
- 네트워크 상태에 따라 성능이 영향을 받을 수 있다.
'👶🏻 CS > Operating System' 카테고리의 다른 글
커넥션 풀과 사이즈 설정에 대하여 (0) | 2025.01.13 |
---|---|
교착상태와 해결법 (0) | 2024.11.15 |
Concurrent(동시성) vs Parallel(병렬성) (0) | 2024.11.09 |
가상메모리와 페이지 교체 알고리즘 (0) | 2024.11.08 |
프로세스와 스레드 (0) | 2024.11.07 |
임계 구역(Critical Section)과 뮤텍스, 세마포어, 모니터 (0) | 2024.11.01 |