- 분산 캐시의 필요성, 동작 원리
- Look-Aside, Write-Through, Write-Behind 패턴의 구조적 차이
- 각 패턴의 장단점과 선택 기준
- 실무 환경에서 어떤 시점에 어떤 패턴을 적용해야 하는가?
- 단순 코드 예제와 캐시 흐름 다이어그램을 통해 캐시 패턴의 구조 이해하기
분산 캐시 패턴 개요
분산 캐시는 여러 서버(노드)가 동일한 데이터를 공유할 때, 데이터 접근속도를 향상시키고 데이터베이스 부하를 줄이기 위한 구조임
캐시는 데이터의 복사본(Copy)을 메모리에 저장해두고, 반복되는 조회 요청에 대해 빠르게 응답함
Look-Aside Cache Pattern(Lazy Loading)
1. 개념
Look-Aside(Lazy Loading) 패턴은 애플리케이션이 먼저 캐시를 조회하고, 없을 경우 DB를 직접 조회하여 캐시에 적재하는 방식
2. 예제
public class UserService {
private final CacheManager cache;
private final Database database;
public UserService(CacheManager cache, Database database) {
this.cache = cache;
this.database = database;
}
public User getUser() {
// 캐시에서 조회를 시도하는 로직
User user = cache.get(id);
if(user == null) {
// 캐시 미스(Cache Miss)시 DB를 조회하는 로직
user = database.queryUserById(id);
// DB 조회 결과를 캐시에 저장하는 로직
cache.put(id, user);
}
// 사용자 데이터를 반환함
return user;
}
}
3. 특징 요약
| 항목 | 설명 |
| 장점 | 간단한 구조, 캐시 장애시 DB로 자동 폴백 가능 |
| 단점 | 최초 요청시 지연이 발생함(Cache Miss 후 DB조회) |
| 적합한 경우 | 조회 빈도가 높은 정적 데이터(사용자 정보, 게시글 등) |
* 캐시 갱신 주기를 설정하지 않으면 오래된 데이터가 남을 수 있음
* TTL(Time-To-Live)을 설정하거나, 주기적으로 캐시 무효화 정책을 적용해야함
Write-Through Cache Pattern(Synchronous Write)
1. 개념
Write-Through 패턴은 애플리케이션이 데이터를 저장할 때 캐시와 DB에 동시에 반영하는 방식임
2. 예제
public class UserService {
private final CacheManager cache;
private final Database database;
public void saveUser(User user) {
// 캐시에 먼저 저장함
cache.put(user.getId(), user);
// DB에 즉시 반영함
database.save(user);
}
}
3. 특징 요약
| 항목 | 설명 |
| 장점 | 항상 캐시와 DB가 일관된 상태 유지 |
| 단점 | 쓰기 작업이 느려질 수 있음(동기 I/O) |
| 적합한 경우 | 데이터 무결성이 중요한 환경(금융 트랜잭션 등) |
* 쓰기 병목을 줄이기 위해 비동기 Write-Through 큐를 둘 수 있음
* 캐시 장애시 쓰기 실패를 어떻게 처리할지 명확한 전략이 필요하다고 함
Write-Behind Cache Pattern(Asynchronous Write)
1. 개념
Write-Behind(Write-Back) 패턴은 캐시에 먼저 쓰고, 일정 시간이 지난 후 DB에 반영하는 비동기 방식임
2. 예제
public class UserService {
private final CacheManager cache;
private final Database database;
public void saveUser(User user) {
// 캐시에 즉시 반영함
cache.put(user.getId(), user);
// 비동기 스케줄링으로 DB 반영
CompletableFuture.runAsync(() -> database.save(user));
}
}
3. 특징
| 항목 | 설명 |
| 장점 | 빠른 응답, 쓰기 집중 시스템에 유리함 |
| 단점 | 장애시 DB 반영 누락 가능성 |
| 적합한 경우 | 로그성 데이터, 통계 데이터 등 일시적 지연 허용 가능한 환경 |
* 비동기 작업이 실패할 경우를 대비해서 재시도 큐를 두는게 좋다고 함
* Redis Stream이나 Kafka를 이용한 Write-Behind 로그 관리도 실무에서 자주 사용된다고 함
패턴 선택 기준
| 구분 | Look-Aside | Write-Through | Write-Behind |
| 데이터 일관성 | 낮음 | 높음 | 중간 |
| 성능(응답 속도) | 빠름(조회) | 보통 | 매우 빠름(쓰기) |
| 구현 복잡도 | 낮음 | 중간 | 높음 |
| 장애 복구 | DB를 직접 폴백함 | 즉시 반영 | 주기적 플러시 필요 |
| 사용 사례 | 조회 위주 서비스 | 금융, 결제 시스템 | 로그, 배치 데이터 |
'Spring Boot > Cache' 카테고리의 다른 글
| 분산 캐시의 이해와 Redis : Redis 설정 (0) | 2026.01.17 |
|---|---|
| 분산 캐시의 이해와 Redis : 분산 캐시 구현 시 고려사항 (0) | 2026.01.17 |
| 분산 캐시의 이해와 Redis : Redis 개요와 주요 특징 (0) | 2026.01.17 |
| 분산 캐시의 이해와 Redis : 분산 캐시의 필요성 (0) | 2026.01.17 |
| 캐시 모니터링과 문제 해결 : 일반적 캐시 문제와 해결 방법 (0) | 2026.01.15 |