→ 페이지 로드 지연에 대한 유저 피드백 수집
→ 상품 썸네일이 LCP 요소로 지정되어 상세페이지 로딩 시간 증가, 성능 저하 발생 파악
-> priority 속성 추가
-> Sharp 라이브러리 설치
-> Image CDN
-> Cloudinary 이용한 이미지 포맷 및 Size 조정
-> Cloudinary URL을 사용하여 Supabase에 저장된 썸네일 이미지를 Cloudinary를 통해 WebP 형식으로 변환


Performance : 66
Largest Contentful Paint : 7.0s
Total Blocking Time : 250ms

Sharp 라이브러리
→ Next.js에서 이미지 최적화를 최적의 성능으로 수행하려면 Sharp 라이브러리를 설치하는 것이 좋다. Sharp가 설치되어 있지 않으면, Next.js는 Sharp가 없는 환경에서도 기본적인 이미지 최적화를 제공하기 위해 자동으로 Squoosh를 사용하여 이미지 최적화를 수행하지만, 성능 면에서는 Sharp만큼 빠르지 않다.
Priority 속성 적용
→ 상품 상세페이지 로드 시, 썸네일이 우선적으로 로드되도록 구현

Performance : 73
Largest Contentful Paint : 5.7s
Total Blocking Time : 150ms

CDN 이란?
: Content Delivery Network
-> 원본 데이터를 가지고 있는 오리진 서버와 사용자간의 물리적인 거리와 상관없이 빠르게 컨텐츠를 받아볼 수 있게 해주는 네트워크 시스템 또는 서버
-> CDN은 웹사이트의 콘텐츠(이미지, 동영상, CSS 파일, JavaScript 파일 등)를 여러 서버에 캐싱해두고, 사용자가 요청할 때 가장 가까운 서버에서 콘텐츠를 제공함으로써 로딩 시간을 단축시킨다.
Image CDN 이란?
-> 업로드되어 있는 이미지를 사용자 요청(URL API)에 따라 변형(resize, format, quality 등)하여 전달해주는 서버 및 서비스
1. URL Transformation 방식
(image/upload)// 아래 Transformation URL 의 초록 부분이 이미지를 어떻게 변형할 지에 대한 쿼리 https://res.cloudinary.com/ID/image/upload/`w_500,h_200,c_fill,q_auto`/v1706662101/cat1_s8bmgr.jpg`
- 이미 Cloudinary에 업로드된 이미지에 대해 변환을 수행
2. Fetch 방식
(image/fetch)https://res.cloudinary.com/ID/image/fetch/f_webp/${product.thumbnail_url};
- Cloudinary에 업로드되지 않은, 외부에 있는 이미지를 가져와서 변환.
이 방식의 장점은 이미지를 Cloudinary에 미리 업로드할 필요 없이 외부에서 바로 가져와서 변환할 수 있다는 것이다.
위 URL에서fetch/f_webp는 Cloudinary가 외부 URL로부터 이미지를 가져와서 WebP 형식으로 변환해 주는 역할.
외부 이미지 소스 사용: Supabase에 저장된 이미지를 Cloudinary에 따로 업로드하지 않고, 외부 URL로부터 바로 가져와서 처리할 수 있기 때문에 더 간편하다.
실시간 변환: Supabase의 이미지 URL이 변할 가능성이 있을 때, 실시간으로 해당 이미지를 변환해 제공할 수 있다. 즉, Supabase에 저장된 원본 이미지를 변경할 필요 없이, Cloudinary를 통해 다양한 형식이나 크기로 변환된 이미지를 제공할 수 있다.
저장소 관리의 단순화: 이미지를 Cloudinary에 미리 업로드하고 관리하는 것보다, Supabase에서 이미지를 관리하면서 필요할 때만 Cloudinary로 가져와 변환해 사용할 수 있다.

Performance : 83
Largest Contentful Paint : 3.1s
Total Blocking Time : 0ms
최종적으로 상품 상세페이지는 lighthouse 성능측정시
💡Performance 점수 21% 향상
💡LCP를 4.0s 개선하고, 전체적인 페이지 성능을 높였다.
페이지 로드시 속도도 확실히 빨라졌다!