루비는 지난 10년간 강력한 백엔드 언어로 발전했지만, 네이티브 이미지 처리 기반을 잃었습니다. 기존의 MiniMagick은 ImageMagick을 외부에서 호출하고, RMagick은 메모리 사용량이 많고 불안정하며 느리며, ruby-gd는 더 이상 유지보수되지 않아 최신 루비와 호환되지 않습니다. 이러한 방식은 단순한 썸네일 처리에는 적합하지만, 지도 타일, GIS 오버레이, 히트맵, 위성 데이터, 실시간 시각화 등 빠르고 인메모리 래스터화를 요구하는 시스템에는 부적합합니다.
GIS 시스템의 요구사항
GIS 시스템이 진정으로 필요로 하는 것은 다음과 같은 현대적인 래스터 파이프라인입니다.
-
벡터 데이터 (PostGIS, GeoJSON, shapefiles)
-
래스터화 (도로, 지역, 히트맵 그리기)
-
이미지 인코딩 (PNG, WebP, JPEG)
-
CDN
여기서 루비에 부족했던 부분은 네이티브 래스터화 및 인코딩을 담당하는 중간 계층이었습니다. 이 계층은 빠르고, 메모리 안전하며, 임베딩 가능하고, 스레드 안전하며, 셸 기반이 아니어야 합니다. libgd C 라이브러리가 이러한 요구사항을 충족하지만, 루비에는 현대적인 바인딩이 없었습니다.
ruby-libgd의 탄생과 기능
ruby-libgd는 이러한 시스템적 간극을 해결하기 위해 개발되었습니다.
-
Ruby의 TypedData API 사용: GC(가비지 컬렉터) 안전성을 보장합니다.
-
외부 프로세스 없음: ImageMagick이나 셸 호출 없이 완전히 인메모리에서 작동합니다.
-
미래 GIS 워크로드 설계: 고성능 처리에 최적화되어 있습니다.
현재 ruby-libgd는 이미지 생성 및 로딩(PNG, JPEG, WebP), 드로잉 프리미티브, 필터, 알파 블렌딩, 인메모리 합성, 빠른 네이티브 인코더를 지원합니다. 이는 타일 렌더러, 오버레이, 데이터 시각화, 지도 레이어 구축에 필수적인 기반을 제공합니다.