메뉴 품절 처리 업무를 하던 중, 사내식당 메뉴 이미지 너무 늦게 나오는 걸 확인했다,,,

속 뒤집어질 뻔,, 그래서 한 번 고쳐보기로 했다,, (이건 무조건 고쳐야해,,)

왜 느릴까?

원인 1️⃣

이미지 URL이 메인 API(ENT_LGN_000002) 응답에 들어있어 API 완료 + 셀 표시 후에야 다운로드 시작 (직렬 체인)

해법 1️⃣ → 프리페치 - URL을 아는 즉시 미리 받기 (MainViewModel)

원인 2️⃣

다운로드 중 이미지 영역이 완전히 빈 화면 → 지연이 더 크게 체감

해법 2️⃣ → 로딩 상태를 즉시 보여주기 (MealMenuCollectionViewCell)

원인 3️⃣

원본 크기 그대로 다운로드, 디코딩

해법 3️⃣ → 다운 샘플링 - 셀 크기 (145x150pt) 만큼만 디코딩 (양쪽 공통 context)

셀과 프리페처가 완전히 동일한 다운샘플링 옵션(context)을 써야 SDWebImage 캐시 키가 같아져서, 프리페치 해둔 이미지를 셀이 실제로 꺼내 쓴다.

옵션이 다르면 키가 달라져 같은 이미지를 두 번 받는다.

어떻게 설계할까?

스크린샷 2026-07-28 오후 1.23.16.png

  1. 크기 상수는 한 곳에만 (SSOT)
  2. 프리페처는 전용 인스턴스
  3. 셀은 “리셋 → 재설정” 계약