Rust 웹 페이지 Og 썸네일 이미지 생성하기
-
og 이미지 파일 썸네일 일괄 생성 작업중입니다.
사실 OpenGraph 라는 것은 특정 사이트의 URL 을 SNS같은데서 공유하면 나오는 이미지입니다. 각 페이지마다 정보를 가지고 있는데 이 정보를 보통은 만들고 대충 만들어진 이미지를 넣는 경우가 많습니다. 그런데 옛날에 만든 서비스들은 빈 이미지가 나오거나 첫번째 이미지가 나오는 경우가 있는데 워드프레스나 게시판에는 오래된 게시물에는 아예 없는 경우가 많이 있습니다.
웹페이지 랜더링 방식으로 가져와서 만다라트 썸네일을 웹 페이지를 생성하고 각 사이즈별로 레이아웃을 웹 페이지에 맞춰 배치한 다음 클립핑을 해서 저장합니다.
플러그인을 설치한다 해도 다시 만들어야 해요. 요즘 시대에 맞춰서 AI랑 대충 디자인하고 대량 이미지를 생성하는 작업을 해봤습니다.
그런데 실제 이미지를 생성하는데 너무 오랜 시간이 걸립니다. Python 이건 Node.js 건 느려요 ㅠㅠ
서비스로 하나씩 하게 되면 모르겠지만 옛날 게시글도 다시 오픈그래프에 적용하기 위해 이미지를 생성하려면 3,000~100,000건 이상의 썸네일 이미지 데이터를 생성한다면 그건 다른 일이고 멀티프로세싱을 한다해도 너무 부하가 커서 일단 기존에 작업했던 것을 다 치워버렸습니다.
그리고 선택한 것이 Rust
Rust로 고성능 썸네일 생성기를 구현 주요 성과 300배 성능 향상 Rust: 0.061초 (단일), 0.069초 (배치) Node.js: 5.787초 (단일), 22.303초 (배치) 95% 메모리 절약 Rust: ~2MB 실행 파일, ~10-20MB 메모리 Node.js: ~350-800MB 메모리 사용 완전한 기능 구현 미니멀 모드 지원 4가지 형식 (wide, square, tall, custom) 배치 처리 SQLite 직접 접근 항목 Rust Node.js 개선율 단일 이미지 0.061초 5.787초 95배 배치 생성 0.069초 22.303초 323배 메모리 사용 ~20MB ~800MB 97.5% 절약 실행 파일 ~2MB ~500MB 99.6% 절약
그냥 번개처럼 나옵니다.
하지만 Rust 로 윈도우앱 패키징하다가 실패해서 ㅠㅠ 일반적인 작업에서는 아직 쓸모를 못찾고 있는 중입니다. Tauri 2.0은 진짜 윈도우 특성타는데 머리가 지끈거립니다. 그래도 파일이나 이미지 프로세싱 쪽은 속이 시원합니다. 이래서 Rust 이야기를 하는거 같습니다.