내 잡다한 노트
Cache의 갱신 방식 본문
캐싱에서 갱신 방식은 캐시와 원본 데이터(예: 데이터베이스, 파일 시스템) 간의 동기화를 어떻게 처리할지 결정하는 중요한 요소입니다. 갱신 방식에 따라 데이터 일관성과 성능이 크게 달라질 수 있습니다. 아래에서 주요 갱신 방식의 동작 원리와 장단점을 더 자세히 설명하겠습니다.
1. Write Through
- 개념: 데이터를 캐시에 쓰는(write) 동시에 원본 데이터에도 저장하는 방식입니다.
- 작동 흐름:
- 클라이언트가 데이터를 캐시에 저장 요청.
- 캐시는 데이터를 저장한 후 원본 데이터베이스에도 동일한 데이터를 저장.
- 캐시와 원본 데이터는 항상 동기화된 상태를 유지.
장점:
- 데이터 일관성이 높음(캐시와 원본 데이터가 항상 동일).
- 데이터 유실 가능성이 낮음(캐시에 장애가 발생해도 데이터베이스에 데이터가 남아 있음).
단점:
- 쓰기 작업이 느림(캐시와 원본 데이터에 두 번 기록해야 함).
- 쓰기 작업이 많을수록 성능 저하 가능.
사용 사례:
- 데이터 일관성이 매우 중요한 시스템(예: 금융 시스템).
2. Write Back (Write Behind)
- 개념: 데이터를 캐시에만 저장하고, 이후 특정 조건(예: 주기적 또는 비동기적)에서 원본 데이터베이스에 저장하는 방식입니다.
- 작동 흐름:
- 클라이언트가 데이터를 캐시에 저장 요청.
- 캐시는 데이터를 저장하지만, 데이터베이스에는 즉시 저장하지 않음.
- 데이터는 일정 시간이 지난 후(또는 트리거 발생 시) 데이터베이스에 반영.
장점:
- 쓰기 작업이 빠름(캐시에만 저장하므로).
- 캐시에만 접근하므로 데이터베이스의 부하가 감소.
단점:
- 캐시에 장애가 발생하면 데이터 유실 가능성.
- 데이터베이스와 캐시 간의 일관성 유지가 어려울 수 있음.
사용 사례:
- 쓰기 작업이 많고 데이터 일관성 요구가 낮은 경우(예: 로그 수집, 분석 데이터).
3. Read Through
- 개념: 데이터를 읽는 요청이 들어왔을 때, 캐시에 데이터가 없으면 원본 데이터에서 읽고, 읽은 데이터를 캐시에 저장하는 방식입니다.
- 작동 흐름:
- 클라이언트가 캐시에 데이터를 요청.
- 캐시에 데이터가 없으면 캐시가 원본 데이터베이스에 요청.
- 가져온 데이터를 캐시에 저장하고, 클라이언트에 반환.
장점:
- 읽기 요청에 대해 캐시가 자동으로 데이터베이스에서 데이터를 가져옴.
- 구현이 간단하며, 캐시 적중률이 높아질수록 성능이 개선됨.
단점:
- 처음 요청 시 데이터베이스 접근으로 인해 지연 발생(Cache Miss의 성능 저하).
- 쓰기 작업은 별도의 방식으로 처리해야 함.
사용 사례:
- 데이터 읽기 빈도가 높고, 데이터베이스 부하를 줄이고 싶은 경우(예: API 응답 캐싱).
4. Write Around
- 개념: 데이터를 캐시에 저장하지 않고, 원본 데이터베이스에만 저장하는 방식입니다. 읽기 요청 시 데이터가 없으면 캐시에 저장.
- 작동 흐름:
- 클라이언트가 데이터를 저장 요청.
- 데이터는 캐시에 저장되지 않고, 데이터베이스에만 저장.
- 이후 클라이언트가 데이터를 요청하면, 데이터베이스에서 읽어 캐시에 저장.
장점:
- 캐시가 쓰기 작업에 의한 오버헤드를 피할 수 있음.
- 최근에 자주 읽히는 데이터만 캐시에 저장(자주 읽히지 않는 데이터는 캐시에 저장되지 않음).
단점:
- 초기 읽기 요청이 많을 경우 Cache Miss가 많이 발생하여 성능 저하 가능.
- 데이터가 쓰인 직후 바로 읽힐 경우 캐시에 저장되지 않아 비효율적.
사용 사례:
- 데이터 읽기 빈도가 불규칙하거나, 캐시 크기가 제한적인 경우.
갱신 방식 선택 가이드
갱신 방식장점단점적합한 사용 사례
Write Through | 높은 데이터 일관성 | 쓰기 성능 저하 | 데이터 일관성이 중요한 경우 (예: 금융) |
Write Back | 쓰기 성능 우수, 데이터베이스 부하 감소 | 데이터 유실 가능성, 일관성 낮음 | 쓰기 작업이 많고 데이터 일관성이 덜 중요한 경우 |
Read Through | 캐시가 데이터베이스와 자동으로 동기화 | Cache Miss 시 성능 저하 | 읽기 빈도가 높은 데이터 |
Write Around | 캐시의 부담 최소화 | 읽기 직후 성능 저하 가능 | 읽기와 쓰기 패턴이 불규칙한 데이터 |
'DB' 카테고리의 다른 글
DB에서 Join 이란? (0) | 2024.12.09 |
---|---|
데이터 정규화(Normalization) (0) | 2024.12.09 |
트랜잭션(Transaction) (1) | 2024.12.09 |
DB에서 ACID 성질 (0) | 2024.12.09 |