Skip to content

과목 데이터의 정합성을 맞춘다. #128

@3Juhwan

Description

@3Juhwan

현재 문제점

현재 방식

  • 크롤링한 과목 전체 데이터를 최초 1회 json 형태로 만든다.
  • Nginx는 과목 데이터 json을 gzip 압축하여 클라이언트에게 제공한다.

문제점

  • 수강신청 기간에 과목 데이터에 변경이 있다. (교수자 추가, 폐강, 신규 개설 등)
  • DB에 과목 데이터가 변경되지만, 클라이언트에 제공하는 압축 파일은 변경되지 않고 정합성이 깨진다.
  • 수강신청 기간 동안 매일(자정/오전 9시)에 과목 데이터 크롤링 및 수정이 필요하다.
  • 인프라가 개선되면 Nginx가 삭제된다.

개선 방안

1. 압축 파일의 버전 관리 + 캐시 무효화 (CloudFront + S3)

구조

  • 과목 데이터를 JSON으로 S3에 업로드하고 gzip 압축
  • 파일명에 버전 또는 해시를 붙임 → 예: subjects-2024-spring-v3.json.gz
  • 클라이언트는 백엔드에서 현재 과목 데이터 버전을 먼저 조회한 뒤, 해당 버전의 정적 파일을 CloudFront에서 다운로드

핵심 아이디어

  • 백엔드에서 버전을 관리하고 클라이언트에 알려주면,
  • 클라이언트는 항상 정확한 버전의 정적 데이터만 요청하게 됨
  • 이후 정합성이 필요한 경우, 백엔드는 "현재 최신 버전은 v4야"라고 알려줌

장점

  • S3/CloudFront TTL 무시하고 새 버전 푸시 가능

2. Lambda@Edge 또는 CloudFront Function으로 캐시 무효화 제어

구조

  • 정적 gzip 파일을 CloudFront에서 캐시
  • 수강신청 중 변경이 발생하면,
    • 백엔드가 S3 업로드 + CloudFront 캐시 무효화 API 호출
    • 또는 CloudFront Function을 통해 If-Modified-Since / ETag 기반 요청 처리

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions