캐시
CPU - 메모리에 올라와 있는 프로그램의 명령어들을 실행
메모리 계층
메모리 계층은 레지스터, 캐시, 메모리, 저장장치로 구성
- 레지스터 : CPI 안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 기억용량이 가장 적음.
- 캐시 : L1, L2 캐시를 지칭. 휘발성, 속도 빠름, 기억 용량이 적음.
- 주기억장치 : RAM. 휘발성, 속도 보통, 기억 용량 보통
- 보조기억장치 : HDD, SDD를 일컫는 말, 비휘발성, 속도 낮음, 기억 용량 많음.
램은 하드디스크로부터 일정량의 데이터를 복사, 임시저장하고 이를 필요 시마다 CPU에 빠르게 전달. 계층 위로 올라갈수록 가격은 비싸지는데 용량은 작아지고, 속도는 빨라지는 특징이 있다.
계층이 있는 이유는 경제성과 캐시때문.
16기가 램은 8만원이면 사지만, 16기가 SSD는 훨씬 더 싼 가격에 살 수 있다. 경제성 때문에 계층을 두어 관리한다.
캐시
데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리.
이를 통해 데이터를 접근하는 시간이 오래 걸리는 경우를 해결하고 무언가를 다시 계산하는 시간을 절약할 수 있다.
메모리와 CPU 사이의 속도 차이가 너무 크기 때문에 그 중간에 레지스터 계층을 둬서 속도 차이를 해결한다. 이렇게 속도 차이를 해결하기 위해 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 한다.
캐시 메모리와 보조기억장치 사이에 있는 주기억장치를 보조기억장치의 캐싱 계층이라고 한다.
자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소에 저장하고 있다가, 요청 시에 그것을 제공하는 기술.
많은 시간이나 연산이 필요한 작업의 결과를 저장해두는 것을 의미한다.
컴퓨팅에서 캐시는 일반적으로 일시적인(temporarily) 데이터를 저장하기 위한 목적으로 존재하는 고속의 데이터 저장 공간.
첫 작업 이후 데이터에 대한 요청이 있을 경우, 데이터의 기본 저장 공간에 접근할 때보다 더 빠르게 요청 처리.
캐싱을 사용하면 이전에 검색하거나 계산한 데이터를 효율적으로 재사용할 수 있다.
캐시의 장점
- 애플리케이션 성능 개선
- 메모리는 디스크보다 훨씬 속도가 빠르므로 메모리 캐시에서 데이터를 읽으면 데이터 액세스가 훨씬 더 빨라져, 애플리케이션 전반적 성능의 개선이 가능하다.
- 데이터베이스 비용 절감
- 백엔드 부하 감소
- 예측 가능한 성능
- 데이터베이스의 핫스팟 제거
- 읽기 처리량 증가
- 읽기 처리량 : IOPS( Input/output Operations Per Second) HDD, SSD 등의 컴퓨터 저장 장치의 성능 측정 단위
지역성의 원리
캐시 계층을 두는 것 말고 캐시를 직접 설정할 때.
자주 사용하는 데이터를 기반으로 설정.
자주 사용하는 데이터에 대한 근거 : 지역성 (시간 지역성, 공간 지역성)
- 캐시가 효율적으로 동작하려면, 캐시의 적중율(Hit-rate)를 극대화 시켜야 한다.
- 캐시에 저장할 데이터가 **지역성(Locality)**을 가져야 한다.
- 지역성이란, 데이터 접근이 시간적, 혹은 공간적으로 가깝게 일어나는 것을 의미한다.
- 지역성의 전제 조건으로 프로그램은 모든 코드나 데이터를 균등하게 Access하지 않는다는 특성을 기본으로 한다.
- 즉, **지역성(Locality)**이란
- 기억장치 내의 정보를 균일하게 Access하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성이다.
시간 지역성
- 특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은 것.
- 최근 사용한 데이터에 다시 접근하려는 특성
- 메모리 상의 같은 주소에 여러 차례 읽기 쓰기를 수행할 경우,
- 상대적으로 작은 크기의 캐시를 사용해도 효율성을 꾀할 수 있다.
공간 지역성
- 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성.
- 특정 데이터와 가까운 주소가 순서대로 접근되었을 경우
- CPU 캐시나 디스크 캐시의 경우 한 메모리 주소에 접근할 때 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져오게 된다.
- 메모리 주소를 오름차순이나 내림차순으로 접근한다면 캐시에 이미 저장된 같은 블록의 데이터를 접근하게 ㅗ디므로 캐시의 효율성이 크게 향상된다.
캐시히트와 캐시미스
- 캐시히트 : 원하는 데이터를 찾았다면 캐시히트
- 캐시미스 : 데이터가 캐시에 없다면 주 메모리로 가서 데이터를 찾아오는 것
캐시히트를 하게 되면 해당 데이터를 제어장치를 거쳐 가져오게 된다. 캐시히트의 경우 위치도 가깝고 CPU 내부버스를 기반으로 작동하므로 빠르다.
캐시미스가 발생되면 메모리에서 가져오게 됨. 이는 시스템 버스를 기반으로 작동하므로 느리다.
캐시매핑
- 매핑 프로세스는 주기억장치로부터 캐시 메모리로 데이터를 전송하는 방법
- 캐시가 히트되기 위해 매핑하는 방법.
- CPU의 레지스터와 주 메모리(RAM) 간에 데이터를 주고받을 때를 기반으로 설명
- 레지스터는 주 메모리에 비하면 굉장히 작고 주 메모리는 굉장히 크기 때문에 작은 레지스터가 캐시 계층으로써 역할을 잘 해주려면 이 매핑을 어떻게 하느냐가 중요.
직접매핑 (directed mapping)
- 주기억장치의 블록들이 지정된 한 개의 캐시 라인으로만 사상될 수 있는 매핑 방법
- 장점 : 간단하고 구현 비용이 적게 든다
- 단점 : 낮은 적중률
- 메모리가 1~100이있고 캐시가 1~10이 있다면 1:1 ~ 10, 2:1~20 … 이런 식으로 매핑하는 것을 말한다. 처리가 빠르지만 충돌 발생이 잦다.
연관매핑 (associative mapping)
- 직접 매핑 방식의 단점을 보완한 방식
- 모든 태그들을 병렬로 검사하므로 복잡하고 비용이 높아 거의 사용하지 않는다.
- 순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑한다. 충돌이 적지만 모든 블록을 탐색해야 해서 속도가 느리다.
집합 연관 매핑 (set associative mapping)
- 직접 매핑과 연관 매핑의 장점만 합친 방식.
- 순서는 일치시키지만 집합을 둬서 저장하며 블록화되어 있어 검색은 좀 더 효율적
- 메모리가 1~100이 있고 캐시가 1~10이 있다면 캐시 1~5에는 1~50의 데이터를 무작위로 저장시키는 것.
웹 브라우저의 캐시
소프트웨어적인 대표적인 캐시
웹 브라우저의 작은 저장소 쿠키, 로컬 스토리지, 세션 스토리지
사용자의 커스텀한 정보나 인증 모듈 관련 사항들을 웹 브라우저에 저장해서 추후 서버에 요청할 때 자신을 나타내는 아이덴티티나 중복 요청 방지를 위해 쓰인다.
쿠키
- 만료 기한이 있는 키-값 저장소
- same site 옵션을 strict로 설정하지 않았을 경우 다른 도메인에서 요청했을 때 자동 전송
- 4KB까지 데이터 저장 가능
- 만료기한을 정할 수 있음.
- 쿠키 설정 시 dociment.cookie로 쿠키를 볼 수 없게 httponly 옵션을 거는 것이 중요
- 클라이언트 또는 서버에서 만료기한 등을 정할 수 있는데 보통 서버에서 만료기한을 정합니다.
로컬스토리지
- 만료기한이 없는 key-value 저장소
- 10MB까지 저장
- 웹 브라우저를 닫아도 유지, 도메인 단위로 저장, 생성 됨.
- HTML5를 지원하지 않는 웹 브라우저에서는 사용할 수 없으며 클라이언트에서만 수정 가능.
세션 스토리지
- 만료기한이 없는 key-value 저장소
- 탭 단위로 세션 스토리지를 생성
- 탭을 닫을 때 해당 데이터가 삭제
- 5MB까지 저장 가능
- HTML5를 지원하지 않는 웹 브라우저에서는 사용할 수 없음.
- 클라이언트에서만 수정이 가능
데이터 베이스의 캐싱 계층
- 데이터베이스 시스템을 구축할 때도 메인 데이터베이스 위에 레디스(redis)데이터 베이스 계층을 ‘캐싱 계층’으로 둬서 성능을 향상시키기도 한다.
웹 서비스에서 캐시가 적용되는 예제
- 클라이언트 : HTTP 캐시 헤더, 브라우저
- 네트워크 : DNS 서버, HTTP 캐시 헤더, CDN, 리버스 프록시
- 서버 및 데이터베이스 : key-value 데이터 스토어(e.g. Redis), 로컬 캐시 (인-메모리, 디스크)
'CS' 카테고리의 다른 글
[CS] Flask vs Fast API (0) | 2023.09.18 |
---|