# 경기별 공유 썸네일 (OG 이미지) 카카오톡·트위터 등에서 특정 경기 링크(`/match/:id`)를 공유할 때 뜨는 미리보기 이미지를 여기에 둔다. 미등록 경기는 기본 썸네일(`assets/bi/og-image.png`)로 폴백. ## 용도 두 가지 - **앱 안 배너**(매치 상세 페이지): 세로/원본 이미지. `pages/MatchDetail.tsx` 에서 직접 참조. 예) `kor_mex.png` (세로 816×1456) - **공유 카드**(카톡·트위터 미리보기): 가로 **1200 × 630** 합성본. `share.py` 의 `OG_IMAGES` 에 등록. 예) `kor_mex_card.png` 세로 원본만 있으면 카드용 가로본은 아래 스크립트로 자동 합성(원본을 가운데 두고 배경은 블러로 채움 → 잘림 없음): ```python from PIL import Image, ImageFilter, ImageEnhance W, H = 1200, 630 src = Image.open("kor_mex.png").convert("RGB"); sw, sh = src.size s = max(W/sw, H/sh); bw, bh = int(sw*s)+1, int(sh*s)+1 bg = src.resize((bw,bh), Image.LANCZOS).crop(((bw-W)//2,(bh-H)//2,(bw-W)//2+W,(bh-H)//2+H)) bg = ImageEnhance.Brightness(bg.filter(ImageFilter.GaussianBlur(22))).enhance(0.55) fw = int(sw*(H/sh)); bg.paste(src.resize((fw,H), Image.LANCZOS), ((W-fw)//2, 0)) bg.save("kor_mex_card.png", "PNG") ``` ## 적용 방법 (예: 한국-멕시코전) 1. 세로 원본을 이 폴더에 넣는다 → `kor_mex.png` (앱 배너용) 2. 위 스크립트로 가로 카드 합성 → `kor_mex_card.png` (공유 카드용) 3. `backend/app/routers/share.py` 의 `OG_IMAGES` 에 등록: ```python OG_IMAGES = { frozenset({"KOR", "MEX"}): "kor_mex_card.png", } ``` 4. 배포: 서버에서 `git pull && docker compose up --build -d` ## 동작 원리 - nginx 가 공유 크롤러(UA)만 `/match/:id` → 백엔드 OG 프리렌더로 보낸다. - 백엔드가 경기 ID(`{조}_{팀A}_{팀B}_{날짜}`)에서 두 팀 코드를 뽑아 `OG_IMAGES` 에 있으면 해당 이미지를, 없으면 기본 썸네일을 단 HTML 을 반환. - 일반 사용자는 영향 없이 기존 SPA 그대로. 팀 코드 순서는 무관(`KOR_MEX` = `MEX_KOR`). 한국-멕시코 경기 ID 는 `A_MEX_KOR_20260619`.