나는 Stateless 이미지 처리 API를 만들었습니다 — 작동 방식
Source: Dev.to
모든 웹 프로젝트는 결국 같은 문제에 직면합니다: 이미지를 리사이즈하거나, 포맷을 변환하거나, 때로는 효과를 추가하거나 배경을 제거해야 할 때 말이죠. ImageMagick을 설정하거나 Sharp을 다루거나, 맞춤 파이프라인을 구축할 수 있지만 — 한 번의 HTTP 호출만 하면 됩니다.
그래서 저는 TheGlitch를 만들었습니다 — 단일 요청으로 모든 작업을 처리하는 무상태 이미지‑처리 API입니다.
문제
이미지‑처리 인프라는 놀라울 정도로 복잡합니다:
- 다양한 OS 대상에 대한 네이티브 종속성 설치
- 임시 파일 및 디스크 정리 관리
- 포맷 특이점 처리 (AVIF 지원, GIF 애니메이션, 색상 프로필)
- 배경 제거와 같은 AI 작업을 위한 GPU 가속
- 메모리 누수 없이 부하에 따라 확장
이미지를 전송하면 처리된 이미지를 반환하는 API를 원했습니다. 저장되지 않고, 디스크에 캐시되지 않으며, 요청 간 상태가 없습니다.
작동 방식
TheGlitch는 이미지를 전적으로 메모리에서 처리합니다. 파이프라인은 다음과 같습니다:
Input (URL/base64/binary/form)
→ Decode & Validate
→ Resize & Crop
→ Apply Effects
→ Format Convert
→ Return Binary
단일 GET 요청으로 모든 작업을 수행할 수 있습니다:
curl "https://theglitch.p.rapidapi.com/api/v1/process?\
url=https://picsum.photos/1000&\
width=800&\
format=webp&\
brightness=10&\
contrast=15&\
sharpen=20" \
-H "X-RapidAPI-Key: YOUR_KEY" \
-H "X-RapidAPI-Host: theglitch.p.rapidapi.com" \
-o result.webp
기능
- Resize & Crop – 네 가지 모드:
fit(종횡비 유지),fill(정확한 크기로 자르기),pad(테두리 추가),stretch. 최대 8000 × 8000 px 해상도 지원. - Format Conversion – 입력/출력: JPEG, PNG, WebP, GIF, BMP, TIFF. 포맷별 품질 제어 가능.
- 7 Visual Effects – 밝기, 대비, 채도, 블러, 샤프닝, 그레이스케일, 세피아. 모든 효과를 하나의 요청에 조합 가능.
- AI Background Removal – GPU 기반, 이미지당 약 3 초 소요. 투명 PNG 반환.
- 14 Social Media Presets – Instagram 정사각형, Facebook 커버, YouTube 썸네일, LinkedIn 배너 등. 차원을 기억할 필요 없이 하나의 파라미터로 사용.
코드 예시
JavaScript
const response = await fetch(
'https://theglitch.p.rapidapi.com/api/v1/process?url=IMAGE_URL&width=800&format=webp',
{
headers: {
'X-RapidAPI-Key': 'YOUR_KEY',
'X-RapidAPI-Host': 'theglitch.p.rapidapi.com'
}
}
);
const blob = await response.blob();
Python
import requests
response = requests.get(
'https://theglitch.p.rapidapi.com/api/v1/process',
params={'url': 'IMAGE_URL', 'width': 800, 'format': 'webp'},
headers={'X-RapidAPI-Key': 'YOUR_KEY', 'X-RapidAPI-Host': 'theglitch.p.rapidapi.com'}
)
with open('result.webp', 'wb') as f:
f.write(response.content)
왜 Stateless인가?
Every image is processed in memory and discarded after the response is sent. This means:
- GDPR 설계상 준수 – 사용자 데이터가 전혀 저장되지 않음
- 디스크 I/O 병목 현상 없음 – 모든 작업이 RAM에서 이루어짐
- 예측 가능한 확장성 – 각 요청이 독립적임
- 정리 작업 없음 – 수집할 쓰레기가 없음
Architecture Decisions
- SkiaSharp over ImageMagick – 네이티브 성능, 크로스‑플랫폼, 외부 의존성 없음. 트레이드오프: 포맷 지원이 적음(아직 AVIF 인코딩 없음), 하지만 WebP가 대부분의 사용 사례를 커버함.
- Replicate for GPU ops – Replicate를 통해 AI 작업을 프록시. 배경 제거는 BiRefNet으로 이미지당 약 $0.0014 비용; 퍼블릭 모델은 콜드 스타트가 무료.
- Separate CPU and GPU rate limits – CPU 작업(리사이즈, 효과, 포맷)은 저렴하고, GPU 작업(배경 제거)은 비용이 많이 듦. 플랜별로 다른 제한을 두어 가격을 공정하게 함.
- Single VPS deployment – Caddy를 리버스 프록시로 사용하는 Docker Compose, 앞에 Cloudflare를 두어 CDN/DDoS/SSL 제공. 전체 인프라 비용: 월 $6 이하.
API 엔드포인트
| Endpoint | What it does |
|---|---|
/api/v1/process | 전체 파이프라인 – 리사이즈 + 효과 + 포맷 |
/api/v1/resize | 리사이즈만 |
/api/v1/convert | 포맷 변환 |
/api/v1/effects | 시각 효과 |
/api/v1/remove-bg | AI 배경 제거 (GPU) |
/api/v1/optimize | 웹용 자동 최적화 (WebP) |
/api/v1/preset/{name} | 소셜 미디어 프리셋 |
사용해 보기
API는 무료 티어(월 500 요청)로 라이브됩니다. 웹사이트에서 전후 예시를 확인하거나 RapidAPI를 통해 직접 사용해 보세요:
- 실시간 예시가 있는 웹사이트:
- RapidAPI의 API:
어떤 기능이 유용할지 의견을 듣고 싶습니다. 베타 기간 동안 가장 많이 요청된 기능은 배경 제거였는데, 다음에 무엇을 원하시나요?