일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 격파르타후기
- java list 출력
- java최솟값구하기
- 인터프린터언어
- 코딩부트캠프후기
- java참조자료형
- java map 저장
- 비전공자sqld
- java list 저장
- java map
- 작은수제거하기
- java 자료구조 활용
- java map 출력
- javaJRE
- sqld자격증합격
- 프로그래머스제일작은수
- java알고리즘
- 노베이스부트캠프
- 항해15기
- 격파르타합격후기
- java set 출력
- 프로그래머스
- javaJVM
- java기본자료형
- java알고리즘문제풀이
- 항해99후기
- 컴파일
- 격파르타장점
- java set 저장
- 격파르타비전공자
- Today
- Total
코딩과 결혼합니다
[CS] Caching 본문
✏️cache
요청을 받았을 때 더 빠르게 로드할 수 있도록 앱, 서버, 웹 사이트, 또는 브라우저에서 임시 파일 또는 데이터를 저장하기 위해 쓰이는 메모리이다. 데이터가 지속적으로 요청할 때마다 새로운 콘텐츠를 생성하지 않고 액세스 하거나 요청한 데이터를 저장하는 것을 기반으로 한다.
CPU캐시
대용량의 메인 메모리 접근을 빠르게 하기 위해 CPU 칩 내부나 바로 옆에 탑재하는 작은 메모리이다. 1980년대 이후 대부분의 CPU는 하나, 많게는 5-6개까지의 서로 다른 기능을 가진 CPU캐시를 장착하고 있다.
디스크 캐시(=디스크 버퍼)
1980년대 후반 이후의 대부분의 하드디스크는 디스크 제어와 외부와의 인터페이스를 위해 작은 컴퓨터를 내장하고 있다. 대개 디스크에 입출력되는 데이터를 저장하는 작은 메모리를 갖고 있는데, 이를 디스크 캐시라고 한다.
✏️Caching
캐시를 사용하는 행동, 행위를 캐싱이라 한다.
메모리 캐싱
서버의 메모리에 데이터를 저장해 두고, 동일한 요청이 들어올 경우 메모리에서 데이터를 읽어오는 방식이다. 이는 데이터에 대한 접근이 매우 빠르기 때문에 높은 성능을 제공한다.
대표적인 기술 : Redis, Memcached
메모리 캐싱은 데이터베이스에서 자주 요청되는 데이터나 연산 결과를 메모리에 미리 저장해 두고 요청이 들어올 경우 메모리 데이터를 읽어오므로 디스크에 접근하는 것보다 훨씬 빠른 응답 시간을 제공한다.
또한 많은 요청이 동시에 발생할 경우, 메모리에 캐싱된 데이터를 사용하여 데이터베이스의 부하를 줄이는 데에도 도움이 된다.
이를 구현하기 위해서는 캐시 서버나 캐시 솔루션을 사용해야 한다. 데이터베이스와 캐시 서버 사이에는 일정 주기로 데이터를 동기화하는 작업이 필요하다.
디스크 캐싱
디스크에 데이터를 저장해 두고, 필요할 때마다 디스크에서 데이터를 읽어오는 방식이다. 메모리 캐싱보다는 느리지만, 대용량 데이터에 대한 캐싱에 용이하다.
대표적인 기술 : Redis, Memcached, Varnish
디스크에 자주 접근되는 데이터나 연산 결과를 메모리에 캐싱한다. 일반적으로 데이터베이스 쿼리 결과나 특정 데이터를 디스크 캐싱한다. 예를 들어, 많은 사용자가 동일한 쿼리를 실행할 경우에 사용된다. 이를 통해 디스크에 대한 부하를 줄일 수 있다.
디스크 캐싱은 메모리 캐싱보다는 상대적으로 느린 성능을 가지므로, 데이터의 크기나 업데이트 빈도에 따라 적절한 캐싱 전략을 수립해야 한다.
정적 캐싱
데이터의 갱신이 자주 발생하지 않는 경우네는 정적 캐싱을 사용할 수도 있다. 정적 캐싱은 데이터를 사전에 생성하여 파일이나 CDN에 저장해 두는 방식으로, 동일한 데이터에 대한 요청이 들어올 경우에는 사전에 저장된 데이터를 반환한다.
주로 웹 애플리케이션에서 사용된다. 예를 들어, 웹 페이지의 이미지, CSS파일, JS 파일 등은 일반적으로 정적인 데이터로 분류된다. 이러한 정적 데이터는 변경이 적기 때문에 매번 동적으로 생성할 필요 없이 미리 생성하여 저장해 둘 수 있다.
보통 파일 시스템이나 CDN( Content Delivery Network )을 통해 구현된다. CDN은 전 세계에 분산된 서버 네트워크를 통해 정적 데이터를 캐싱하고 제공하는 역할을 한다. CDN은 웹애플리케이션과 가까운 서버에 데이터를 제공하기 때문에 응답 시간을 크게 단축시킬 수 있고 또한, 웹 애플리케이션의 부하를 분산시키고 대량의 트래픽을 처리할 수 있는 기능을 제공한다.
✏️Caching 할 때 주의 할 점
- 캐시 무효화 전략
데이터가 변경되거나 삭제되었을 때, 캐시 된 데이터를 적절하게 갱신하거나 삭제해야 한다. 캐시 된 데이터와 원본 데이터 간의 일관성을 유지하기 위해 적절한 캐시 무효화 전략을 수립해야 한다. - 캐시 용량 관리
캐시는 메모리나 디스크에 저장되는데, 이에 제한된 용량이 있다. 캐시 용량을 초과하면 새로운 데이터를 저장할 수 없거나 일부 데이터를 삭제해야 할 수 있다. 따라서 적절한 캐시 용량 관리와 용량을 초과하는 경우에 어떤 데이터를 우선적으로 삭제해야 하는지를 결정하는 전략이 필요하다. - 동시성 문제
여러 사용자가 동시에 동일한 데이터에 접근하는 경우, 캐시의 일관성을 유지하기 위해 동시성 문제를 고려해야 한다. 적절한 동기화 메커니즘을 사용하여 데이터의 일관성을 보장한다. - 적절한 만료 시간 설정
데이터의 변경 빈도나 중요성에 따라 만료 시간을 조정하여 캐시 된 데이터가 오래된 데이터를 반환하지 않도록 해야 한다. 그렇지 않으면 데이터의 일관성이 깨질 수 있다.
✏️캐시 서버와 캐시 솔루션
- 캐시 서버:
- 대표적인 캐시 서버로는 Redis, Memcached가 있다.
- 메모리 기반의 캐싱을 제공한다. 메모리에 데이터를 저장하고 빠른 응답 속도를 제공한다.
- 풍부한 기능을 제공하며, 데이터의 타입이나 복잡한 연산도 처리할 수 있다.
- 데이터의 영구 저장이 가능하며, 서버 재시작 등의 상황에서도 데이터를 보존할 수 있다.
- 분산 캐싱을 위한 클러스터링 기능을 제공하기도 한다.
- 하지만, 메모리 용량에 제한이 있어 큰 용량의 데이터를 캐싱하기에는 적합하지 않을 수 있다.
- 캐시 솔루션:
- 대표적인 캐시 솔루션으로는 Varnish, Nginx가 있다.
- 웹 서버의 역할도 수행하면서 캐싱 기능을 제공한다.
- 정적 파일을 캐싱하고 동적 콘텐츠를 처리하는 등 다양한 기능을 제공한다.
- CDN을 통한 전 세계적인 캐싱과 가속화를 지원한다.
- 대량의 트래픽을 처리할 수 있고, 로드 밸런싱과 고가용성 기능을 제공한다.
- 디스크 캐싱을 지원하여 대용량 데이터의 캐싱에 유리하다.
- 하지만, 일반적으로 복잡한 데이터 처리에는 캐시 서버보다는 제한적일 수 있다.
캐시 서버는 메모리 캐싱에 더 적합하며, 데이터의 다양한 처리와 영구 저장이 필요한 경우에 사용된다.
캐시 솔루션을 웹 서버의 역할과 함께 캐싱 기능을 제공하므로 정적 파일 및 디스크 캐싱에 적합하다. 또한 CDN과의 연동이 가능하여 전 세계적인 캐싱과 가속화를 지원한다.
'2세 > Computer Science' 카테고리의 다른 글
[CS] 서버리스(Serverless) (0) | 2023.11.09 |
---|---|
[CS] Docker (0) | 2023.11.08 |
[CS] MSA : MicroService Architecture (0) | 2023.11.02 |
[CS] 자료구조 : Java와 HashMap (1) | 2023.11.01 |
[CS] 자료구조 : Java와 ArrayList, LinkedList (2) | 2023.10.31 |