## 현재 문제점 **현재 방식** - 크롤링한 과목 전체 데이터를 최초 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` 기반 요청 처리
현재 문제점
현재 방식
문제점
개선 방안
1. 압축 파일의 버전 관리 + 캐시 무효화 (CloudFront + S3)
구조
subjects-2024-spring-v3.json.gz핵심 아이디어
장점
2. Lambda@Edge 또는 CloudFront Function으로 캐시 무효화 제어
구조
If-Modified-Since/ETag기반 요청 처리