Skip to content

feat: 상품 상세 "보러가기" 배너에 쇼핑몰 파비콘 표시 #514

Description

@iOdiO89

구현할 기능

위시 상세(아카이브 위시 상세, 토너먼트 아이템 상세)의 상품 이미지 위 원본 링크 배너(ItemLinkBanner)에서, 고정 링크 아이콘(LinkIconFill) 대신 sourceUrl 사이트의 파비콘을 표시한다. 라벨은 지금처럼 도메인(hostname)까지만 표시한다.

  • 서버 변경 없음 — 기존 응답의 sourceUrl만 사용
  • 파비콘 URL: new URL(sourceUrl).origin + '/favicon.ico' (ItemLinkBanner가 이미 hostname 파싱 중이라 같은 자리에서 origin을 뽑으면 됨)
  • 폴백 체인: 사이트 파비콘 직접 로드 → 실패 시 구글 faviconV2 → 그래도 실패 시 기존 링크 아이콘(LinkIconFill)

작업 상세 내용

  • components/common/item-info-screen/ItemLinkBanner.tsx에서 sourceUrl origin 기반 파비콘 <img> 렌더링
    • next/image 말고 일반 <img> 사용 — 임의 외부 도메인이라 remotePatterns 등록이 불가능함
  • 파비콘 로드 실패 시 2차 폴백으로 구글 faviconV2 시도
    • https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://<host>&size=64
    • 구글이 모르는 도메인이면 기본 지구본 대신 404를 반환하므로, onError만으로 다음 폴백으로 넘어감 (별도 크기 검사 불필요)
  • 2차 폴백까지 실패하면 기존 링크 아이콘(LinkIconFill)으로 최종 폴백
    • <img>onError 하나로 충분 — 403, 404, 이미지가 아닌 HTML 응답, 네트워크 실패 전부 onError로 들어옴 (실측 완료)
    • 최종 폴백이 로컬 SVG라 onError 무한 루프 걱정 없음
  • URL 파싱 실패(new URL throw) 시에도 기존 아이콘 유지
  • 도메인 라벨 표시는 현행 유지 (getSourceUrlLabel — 이미 hostname만 표시 중)

참고 사항

  • sourceUrlnull인 항목(이미지로 등록한 위시)은 ItemDetailView에서 배너 자체를 렌더하지 않으므로 대응 불필요
  • 예상 동작: 무신사·29cm·지그재그·나이키·아마존·스마트스토어는 사이트 파비콘 직접 표시. 쿠팡·G마켓·옥션·올리브영은 봇 차단 때문에 직접 로드는 실패하지만, 2차 폴백(faviconV2)에서 대부분 로고가 잡힘
  • 주의사항: faviconV2는 구글 비공식 엔드포인트라 스펙이 예고 없이 바뀔 수 있음. 바뀌더라도 onError 체인 덕에 기존 링크 아이콘으로 떨어질 뿐 화면이 깨지지는 않음
  • https://www.google.com/s2/favicons?domain=<host>&sz=64(s2 API)는 채택하지 않음 — 모르는 도메인일 때 404 대신 지구본 기본 아이콘을 200으로 내려줘서 onError 폴백이 동작하지 않고, 크기 검사(naturalWidth <= 16) 같은 휴리스틱이 추가로 필요해짐

Metadata

Metadata

Assignees

Labels

WEBfeatureNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions