나는 Stateless 이미지 처리 API를 만들었습니다 — 작동 방식

발행: (2026년 2월 22일 오전 06:41 GMT+9)
6 분 소요
원문: Dev.to

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 엔드포인트

EndpointWhat it does
/api/v1/process전체 파이프라인 – 리사이즈 + 효과 + 포맷
/api/v1/resize리사이즈만
/api/v1/convert포맷 변환
/api/v1/effects시각 효과
/api/v1/remove-bgAI 배경 제거 (GPU)
/api/v1/optimize웹용 자동 최적화 (WebP)
/api/v1/preset/{name}소셜 미디어 프리셋

사용해 보기

API는 무료 티어(월 500 요청)로 라이브됩니다. 웹사이트에서 전후 예시를 확인하거나 RapidAPI를 통해 직접 사용해 보세요:

  • 실시간 예시가 있는 웹사이트:
  • RapidAPI의 API:

어떤 기능이 유용할지 의견을 듣고 싶습니다. 베타 기간 동안 가장 많이 요청된 기능은 배경 제거였는데, 다음에 무엇을 원하시나요?

0 조회
Back to Blog

관련 글

더 보기 »

성능 비교: React vs WebForms Core

네트워크 요청, 대역폭 소비 및 클라이언트 실행 모델에 집중하세요. 현대 웹 아키텍처에서 성능은 렌더링 속도만을 의미하지 않습니다. A criti...