티스토리 뷰

Cache 캐시란 ?
자주 사용하는 데이터나 값을 미리 복사해 놓은 임시저장소
아래 보이는 저장공간 계층구조에서 처럼 캐시는 저장공간이 잓고 비용이 비싼 대신 빠른 성능을 제공한다.
🤔 Cache를 사용하면 좋은 경우
- 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우 ( 서버의 균일한 API 데이터 )
- 반복적으로 동일한 결과를 돌려주는 경우 ( 이미지나 썸네일 등 )
🧑🏻💻 Cache 사용 사례
- DNS : 웹사이트 IP를 기록해두고 웹사이트 접근을 위한 DNS 조회 수를 줄인다.
- CPU : 자주 접근하는 데이터의 경우, 메모리에 저장해두고 빠르게 접근할 수 있도록 한다.
- CDN : 이미지나 영상과 같은 컨텐츠를 CDN 서버에 저장해두고 어플리케이션에 접근하지 않고 컨텐츠를 가져오도록 한다.
캐싱전략
1. Look-aside
데이터 요청 -> 캐시조회 -> 있으면 가지고오고 -> 없으면 Cache Miss -> DB에서 조회
📗장점 : 캐시가 다운되더라고 DB에서 데이터를 가지고 올 수 있다.
📕단점 : Cache Miss 가 나면 많은 프로세스가 DB로 접근해 많은 부하가 생길 수 있다.
이러한 경우, DB에서 캐시로 데이터를 미리 넣어주는 작업을 함 👉 Cache Warming
2. Write Back
데이터 저장시 Cache에 먼저 저장 -> 일정주기 또는 일정한 크기가 되면 DB에 저장
📗장점 : DB로 향하는 접근횟수를 줄일 수 있어 전체 시스템의 성능이 좋아진다.
📕단점 : 데이터를 옮기기전에 캐시 장애가 발생하면 데이터 유실이 발생할 수 있다.
3. Read Through "캐시에서만 데이터를 읽어오는 전략"
데이터 요청 -> 캐시에서 조회 -> Cache Miss 경우, DB에서 데이터 조회해서 캐시 업데이트 -> 캐시에서 조회
4. Write Through
데이터 저장 시 Cache에 먼저 저장 -> DB에 저장
📕단점 : 저장할때 마다 두단계를 거쳐야 해서 상대적으로 느리다.
재사용되지 않는 데이터도 무조건 캐시에 넣어서 리소스 낭비가 될 수 있다.
이를 방지 하기 위해 expire time(데이터가 보관되는 시간 초과시 데이터 삭제) 을 설정하기도 함.
5. Write Around
데이터 저장 시 DB에 저장 -> 읽어온 데이터만 캐시에 저장
주로, Look-aside와 Read through 를 결합해서 사용
Cache 데이터의 지역성
☝🏻 시간지역성
특정데이터가 한번 접근되었을 경우, 가까운 미래에 다시 데이터에 접근할 가능성이 높은것을 말한다. 이러한 경우 캐시에 한번 가져와두고 여러번 사용하게 되면 메모리에 접근하는 횟수가 줄어든다. 따라서 캐시는 반복적으로 사용되는 데이터가 많을수록 높은 효율성 👍
✌🏻 공간지역성
특정데이터와 가까운 주소가 접근되었을 경우 공간적 지역성. 한 메모리 주소에 접근할 때 그 주소 뿐만 아니라 해당 블록을 가져오게 된다. 사용될 데이터들이 블록 안에 모여있을 경우, 한번만 메모리에 접근해도 필요한 데이터들을 가져올 수 있다.
캐시 스탬피드?
IMDB도 DBMS 한 종류로, 한정된 저장공간을 가진다. 한정된 저장공간을 효율적으로 사용하기 위해 캐시에 만료시간(TTL)을 지정한다. 따라서 대개 캐시는 생성 - 조회 - 만료 생명주기를 가진다.
DBMS에서 꺼낸 데이터를 가공해서 캐시에 보관하는 경우
캐시가 만료되어 새로운 캐시를 생성하는 시간동안 요청이 몰리게 된다면
캐시가 재생성되기 전까지 순간적으로 DBMS에 읽기 요청이 집중되고 다시 IMDB로 중복된 쓰기 요청을 주게 된다.
이것을 "캐시 스탬피드" 라고 한다.
'개발' 카테고리의 다른 글
[ Kafka ] kafka란? docker, Spring 연동 (1) | 2025.02.18 |
---|---|
[ DB락 활용 ] Ecommerce 프로젝트 동시성 제어와 테스트 (0) | 2025.01.22 |
[Springboot 게시판] postgreSql brew 다운로드 (0) | 2024.12.03 |
[Springboot JPA 게시판] 프로젝트 생성 (0) | 2024.12.02 |
ERD란 ? (0) | 2024.11.27 |
- Total
- Today
- Yesterday
- java test 개발
- postgresql brew
- 캐시스탬피드
- google commit convention
- Java
- mock사용법
- css
- 오블완
- 풀스택
- API
- 캐시란
- commit convetion
- 백엔드개발
- synchronized 단점
- 더현대 크리스마스 현장대기
- postgresql 다운로드
- Springboot jpa
- 프로그래밍
- spring
- spring.io.start
- 항해후기
- 티스토리챌린지
- 개발자
- 웹개발
- html
- tdd개발
- JavaScript
- Grammarly
- mock해야하는대상과아닌것
- ChatGPT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |