logo

next image blurDataURL 직접 부여하기

next · 2022년 10월 5일 · 6 min read

들어가며

NextJS를 사용하면, 무조건 거치게 되는 기능이 있다.
바로 Image Optimizationlink icon이다.

필자도 현록을 개발하면서 LCP 시점을 개선하기 위한 방법을 찾던 중 알게 됐는데,
파면 팔수록 Vercel은 정말 무서울 지경이다.

오늘연 여기서 placeholder prop에 blur를 부여하고 blurDataURL prop value를 직접 부여하는 경우를 다뤄보겠다.

blurDataURL는 lazy load 과정에서 이미지가 모두 load되기 전 보여줄 poster의 base64 값을 받는다.
src prop에 이미지를 직접 JS로 import하여 value를 넘기면 자동으로 생성해주는데,
필자의 경우엔 포스트들의 thumbnail src는 dynamic한 값이기도 했고, 직접 넘겨주는 법도 궁금한 겸 구현을 해보았다.

구현하기

우선 npm package인 plaiceholderlink icon를 설치한다.
비슷한 다른 라이브러리도 있나 궁금해서 찾아보았지만 딱히 찾지 못했고, Next Doc에서도 가이드로 권장하고 있었다.
만약 blur 이미지를 만들어주거나 캐싱하는 서버가 있다면, 굳이 설치하지 않고 서버로부터 API를 fetch하여 해당 값을 prop으로 넘기면 된다.

사용법은 정말 간단하다.
아래와 같이 getPlaiceholder함수를 import하여 사용하면 base64로 encode된 이미지 객체를 얻을 수 있다.
이를 next/image component에 blurDataURL로 그대로 넘겨주면 된다.

{
  const thumbPoster = (await getPlaiceholder(item.metadata.thumb, { size: 32 })).base64,
}

필자는 포스트 목록에서 lazy load 과정에서 보여줄 blur image를 띄울 때 사용하였는데,
getStaticProps에서 포스트 목록을 로드할 때 함께 처리하도록 하여 빌드 시점에 모두 가져오도록 하였다.

주의할 점

low quality로 optimized된 이미지이지만 말 그대로 이미지이기 때문에
런타임에서 데이터를 관리할 때, memory leak을 항상 주의해야 할 것 같다.

관련 포스트
post image
Next JS에서 path alias 설정하기 (feat. @/components)
오늘은 Next JS에서 import 시 복잡한 relative path 대신 absolute path 사용을 위한 설정법을 알아봅시다. file path를 상대경로로 지정하다보면 유지보수면에서도 복잡하고, path를 지정할 때마다 경로가 헷갈려서 발생하는 오류는 덤입니다. 이럴 때 path에 대한 alias를 설정하면 코드는 확 깔끔해질 것입니다.  아래 예제를 통해서 따라해봅시다.
next·2021년 4월 21일·4 min read
post image
Next JS에서 레이아웃 사용하기
홈페이지를 구성할 때, 우리는 대체로 네비게이션과 푸터, 플로팅 버튼 등을 포함합니다. 개발단계에서 이들 컴포넌트를 페이지마다 일일이 import하는 것은 매우 비효율적인 일입니다. 만약 이들처럼 대부분의 페이지에서 보여줘야될 내용이 있다면, 레이아웃 컴포넌트를 통해 손쉽게 유지보수할 수 있을 것입니다.
next·2021년 4월 20일·6 min read