블로그의 썸네일과 Open Graph Image를 매번 만드는 것은 여간 귀찮은 일이 아닙니다.
Heroku
,React
,Express
로 이 이미지를 자동으로 생성하는 api를 개발해봤습니다.
Intro
블로그 글들에 썸네일이 없어 횡한데, 그렇다고 매번 썸네일을 만드는건 개발자답지 못한 방식이겠죠. 이걸 한번 자동화해보려고 합니다. 오늘은 그 첫 단계로 title, subtitle을 받아 썸네일 이미지를 생성하는 api를 만들었습니다.
방법론
-
TypeScript 환경으로 Express 서버 개발
- React Component로 html을 생성,
react-dom/server
의renderToString()
함수를 이용해 생성된 html을 stringify했습니다. - string으로 바뀐 html을
puppeteer
패키지를 활용해 이미지로 바꿉니다. - respons head의
Content-Type
을image/png
로 지정해줬습니다. - image의 사이즈를 동적으로 바꾸는 것은 어렵지 않은 문제이지만 우선은 MVP 개발이므로 흔히 쓰이는 1200 X 630으로 고정했습니다.
- React Component로 html을 생성,
-
Heroku로 서버 Deploy
- 원래는 간편하게 Vercel을 이용해 Deploy하려고 했으나, AWS Lambda의 50mb 용량 제한으로 불가능했습니다. 이에, Heroku로 배포하는 방법으로 선회했습니다.
- 한글 폰트 깨짐 issue가 발생해, NotoSansKR 폰트를 static 파일로 읽어오는 코드를 추가했습니다.
- Deploy시 Heroku에서
puppeteer
를 사용할 수 있도록 해주는 buildpack을 추가해줬습니다.
결과
Sample API
https://og-img-generator-server.herokuapp.com/og/타이틀/서브타이틀
해결할 점
- Heroku의 한계로 api가 이미지를 응답하는 속도가 매우 느립니다. (10초정도) 따라서, 실제로 사용하려면 다른 방법을 강구하거나,
getStaticProps()
에서 처리해 주어야겠습니다. - 좀 더 발전시켜서 유연한 Thumbnail / Open Graph Image Generator를 개발해보고 싶습니다.
2022.08.11
약간의 변경점이 있었습니다. 이 글을 참고해주세요!