프로젝트

DB설계 전략-2

content0474 2025. 1. 24. 21:04

3. 코드 기반 분석

Look-aside 구현

Redis에 모든 데이터 저장 및 PostgreSQL 백업 조회:

redis_articles = redis_client.keys(redis_key_pattern)
if redis_articles:
    redis_articles_data = [
        json.loads(redis_client.get(article_key))
        for article_key in redis_articles
    ]
else:
    db_articles = News.objects.filter(category=category).order_by('-created_at')
    for article in db_articles:
        redis_key = f"news:{category.name.lower()}:{article.id}"
        redis_client.set(
            redis_key,
            json.dumps({
                "title": article.title,
                "abstract": article.abstract,
                "summary_english": article.summary_english,
                "summary_korean": article.summary_korean,
                "vocab": article.vocab,
                "url": article.url,
                "category": category.name,
                "created_at": article.created_at.isoformat(),
            }),
            ex=86400
        )

모든 크롤링 데이터를 Redis에 저장하고, 캐시 미스 시 PostgreSQL에서 데이터를 가져옴.

사용자가 본 기사 데이터를 Redis에 관리(viewed_articles_key)

 

 

Write-through 구현

Redis와 PostgreSQL 동시 쓰기:

redis_client.set(redis_key, redis_value, ex=86400)
News.objects.update_or_create(
    url=article['url'],
    defaults={
        'title': article['title'],
        'abstract': article['content'],
        'summary_english': summary_english,
        'summary_korean': summary_korean,
        'vocab': vocab,
        'category': category,
    }
)

 

데이터를 Redis와 PostgreSQL에 동시에 저장해 데이터 일관성 유지.

Redis에 즉시 데이터를 반영하여 실시간 사용자 요청을 지원.

4. 결론

Look-aside와 Write-through 전략은 이 프로젝트의 특성과 요구 사항에 가장 잘 맞는 선택입니다:

Look-aside는 크롤링된 모든 데이터를 캐시에 저장하며, 사용자 요청 시 캐시를 우선 조회하고 필요 시 DB를 조회합니다.

Write-through는 Redis와 PostgreSQL 간 데이터 동기화를 유지하며, 실시간 데이터 제공과 데이터 일관성을 보장합니다.

'프로젝트' 카테고리의 다른 글

비동기 작업 도구 선택  (1) 2025.01.27
DB설계 전략  (0) 2025.01.23
도커 실행 시 크롬드라이버와 크롬 버전 불일치  (1) 2025.01.22
ResourceExhausted  (0) 2025.01.21
소셜계정 연동 시 중복확인 문제  (0) 2025.01.20