복제 지연이란?

  • 복제 지연은 데이터가 쓰기 DB에서 읽기 DB로 복제되는 과정에서 발생하는 시간 지연을 의미합니다. 이 용어는 쓰기 작업이 발생한 후 그 변경 사항이 읽기 DB에 반영되기까지의 지연 시간을 설명하는 데 사용됩니다.
  • 복제 지연으로 인해, 읽기 DB에서 최신 상태의 데이터를 읽지 못하고 이전 상태의 데이터를 읽게 되는 문제가 발생할 수 있습니다.
    • 쓰기 DB: 모든 쓰기 작업(데이터 삽입, 업데이트, 삭제 등)을 처리하는 데이터베이스입니다. 보통 마스터(master) 데이터베이스라고도 합니다.
    • 읽기 DB: 읽기 작업만 처리하는 데이터베이스로, 보통 슬레이브(slave) 데이터베이스 또는 리플리카(replica)라고 합니다. 이 데이터베이스는 쓰기 DB에서 복제(replication)된 데이터를 사용합니다.

해결 방법

캐시 시스템을 도입하여, 쓰기 작업 후 바로 캐시를 갱신하고, 그 이후의 읽기 작업은 캐시에서 제공하는 방식을 사용합니다. 캐시는 일관성을 보장하기 위해 일정 시간 동안(예: 1초) 쓰기 DB의 데이터를 캐시하는 방법을 사용할 수 있습니다.

 

예시) 스프링

    @Cacheable(value = "products", key = "#id")
    public Product createProduct(Long id) {
        simulateSlowService();
        return new Product(id, "Product " + id, 100.0);
    }
    @CachePut(value = "products", key = "#product.id")
    public Product updateProduct(Product product) {
        // 실제 데이터베이스 업데이트 로직이 있다고 가정
        return product;
    }

 

 

예시) 장고

from django.core.cache import cache
from django.shortcuts import render
from django.http import JsonResponse

def get_product(id):
    # 가정: 데이터베이스에서 제품 정보를 가져옴
    return {"id": id, "name": f"Product {id}"}

def product_view(request, id):
    # 캐시에서 제품을 가져오려 시도
    product = cache.get(f'product_{id}')
    
    if not product:
        # 캐시에 없으면, 데이터베이스에서 가져오고 캐시에 저장
        product = get_product(id)
        cache.set(f'product_{id}', product, timeout=60)  # 60초 동안 캐시
        
    return JsonResponse(product)

def update_product_view(request, id):
    # 가정: POST 요청으로 이름 업데이트
    name = request.POST.get('name')
    
    # 데이터베이스 업데이트 로직 여기에 포함
    
    # 새로운 값으로 캐시 갱신
    updated_product = {"id": id, "name": name}
    cache.set(f'product_{id}', updated_product, timeout=60)
    
    return JsonResponse(updated_product)

'스프링 심화 TIL' 카테고리의 다른 글

S.A 튜터님 피드백  (0) 2024.08.23
배달앱 프로젝트 11조 S.A  (0) 2024.08.22
Docker 네트워킹 기본 개념  (0) 2024.08.18
Docker 명령어  (0) 2024.08.16
캐싱 전략  (0) 2024.08.13

+ Recent posts