구현할 기능
위시 상세(아카이브 위시 상세, 토너먼트 아이템 상세)의 상품 이미지 위 원본 링크 배너(ItemLinkBanner)에서, 고정 링크 아이콘(LinkIconFill) 대신 sourceUrl 사이트의 파비콘을 표시한다. 라벨은 지금처럼 도메인(hostname)까지만 표시한다.
- 서버 변경 없음 — 기존 응답의
sourceUrl만 사용
- 파비콘 URL:
new URL(sourceUrl).origin + '/favicon.ico' (ItemLinkBanner가 이미 hostname 파싱 중이라 같은 자리에서 origin을 뽑으면 됨)
- 폴백 체인: 사이트 파비콘 직접 로드 → 실패 시 구글 faviconV2 → 그래도 실패 시 기존 링크 아이콘(
LinkIconFill)
작업 상세 내용
참고 사항
sourceUrl이 null인 항목(이미지로 등록한 위시)은 ItemDetailView에서 배너 자체를 렌더하지 않으므로 대응 불필요
- 예상 동작: 무신사·29cm·지그재그·나이키·아마존·스마트스토어는 사이트 파비콘 직접 표시. 쿠팡·G마켓·옥션·올리브영은 봇 차단 때문에 직접 로드는 실패하지만, 2차 폴백(faviconV2)에서 대부분 로고가 잡힘
- 주의사항: faviconV2는 구글 비공식 엔드포인트라 스펙이 예고 없이 바뀔 수 있음. 바뀌더라도
onError 체인 덕에 기존 링크 아이콘으로 떨어질 뿐 화면이 깨지지는 않음
https://www.google.com/s2/favicons?domain=<host>&sz=64(s2 API)는 채택하지 않음 — 모르는 도메인일 때 404 대신 지구본 기본 아이콘을 200으로 내려줘서 onError 폴백이 동작하지 않고, 크기 검사(naturalWidth <= 16) 같은 휴리스틱이 추가로 필요해짐
구현할 기능
위시 상세(아카이브 위시 상세, 토너먼트 아이템 상세)의 상품 이미지 위 원본 링크 배너(
ItemLinkBanner)에서, 고정 링크 아이콘(LinkIconFill) 대신sourceUrl사이트의 파비콘을 표시한다. 라벨은 지금처럼 도메인(hostname)까지만 표시한다.sourceUrl만 사용new URL(sourceUrl).origin + '/favicon.ico'(ItemLinkBanner가 이미 hostname 파싱 중이라 같은 자리에서 origin을 뽑으면 됨)LinkIconFill)작업 상세 내용
components/common/item-info-screen/ItemLinkBanner.tsx에서sourceUrlorigin 기반 파비콘<img>렌더링next/image말고 일반<img>사용 — 임의 외부 도메인이라remotePatterns등록이 불가능함https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://<host>&size=64onError만으로 다음 폴백으로 넘어감 (별도 크기 검사 불필요)LinkIconFill)으로 최종 폴백<img>의onError하나로 충분 — 403, 404, 이미지가 아닌 HTML 응답, 네트워크 실패 전부onError로 들어옴 (실측 완료)onError무한 루프 걱정 없음new URLthrow) 시에도 기존 아이콘 유지getSourceUrlLabel— 이미 hostname만 표시 중)참고 사항
sourceUrl이null인 항목(이미지로 등록한 위시)은ItemDetailView에서 배너 자체를 렌더하지 않으므로 대응 불필요onError체인 덕에 기존 링크 아이콘으로 떨어질 뿐 화면이 깨지지는 않음https://www.google.com/s2/favicons?domain=<host>&sz=64(s2 API)는 채택하지 않음 — 모르는 도메인일 때 404 대신 지구본 기본 아이콘을 200으로 내려줘서onError폴백이 동작하지 않고, 크기 검사(naturalWidth <= 16) 같은 휴리스틱이 추가로 필요해짐