Upyo 0.3.0: 다중 제공자 복원력과 배포 유연성

洪 民憙 (Hong Minhee) @hongminhee@hackers.pub

Upyo 0.3.0은 라이브러리의 이메일 전송 기능을 확장하는 세 가지 새로운 트랜스포트를 도입합니다. 이번 릴리스는 다중 제공자 지원을 통한 안정성 향상과 다양한 조직 요구에 맞는 더 많은 배포 옵션 제공에 중점을 두고 있습니다.

다중 제공자 복원력을 위한 풀 트랜스포트

새로운 @upyo/pool 패키지는 여러 이메일 제공자를 단일 트랜스포트로 결합하는 풀 트랜스포트를 도입합니다. 이를 통해 애플리케이션은 이메일 트래픽을 여러 제공자에게 분산하고 한 제공자에 문제가 발생할 때 자동으로 장애 조치할 수 있습니다.

풀 트랜스포트는 여러 라우팅 전략을 지원합니다. 라운드-로빈 분배는 제공자들 간에 균등하게 순환하며, 가중치 분배는 선호하는 제공자를 통해 더 많은 트래픽을 보낼 수 있게 합니다. 우선순위 기반 라우팅은 항상 가장 높은 우선순위의 트랜스포트를 먼저 시도하고, 필요할 때만 다른 트랜스포트로 대체합니다. 더 복잡한 시나리오의 경우, 메시지 내용, 수신자 도메인 또는 기타 기준에 따라 사용자 정의 라우팅을 구현할 수 있습니다.

import { PoolTransport } from "@upyo/pool";
import { SmtpTransport } from "@upyo/smtp";
import { MailgunTransport } from "@upyo/mailgun";

const pool = new PoolTransport({
  strategy: "priority",
  transports: [
    { transport: primaryProvider, priority: 100 },
    { transport: backupProvider, priority: 50 },
    { transport: emergencyProvider, priority: 10 },
  ],
  maxRetries: 3,
});

const receipt = await pool.send(message);

이 트랜스포트는 이메일 전송 실패를 허용할 수 없는 고가용성 시스템에 특히 가치가 있습니다. 또한 대량 이메일은 더 경제적인 제공자로 라우팅하고 트랜잭션 이메일은 프리미엄 서비스를 통해 보내는 비용 최적화를 가능하게 합니다. 이메일 제공자 간 마이그레이션을 진행 중인 조직은 가중치 분배를 사용하여 한 제공자에서 다른 제공자로 트래픽을 점진적으로 전환할 수 있습니다. 풀 트랜스포트는 AsyncDisposable 지원을 통해 리소스 정리를 적절히 처리하고 시도된 모든 제공자의 실패를 집계하는 포괄적인 오류 보고를 제공합니다.

자세한 구성 옵션 및 사용 패턴은 풀 트랜스포트 문서를 참조하세요.

설치

npm  add     @upyo/pool
pnpm add     @upyo/pool
yarn add     @upyo/pool
deno add jsr:@upyo/pool
bun  add     @upyo/pool

Resend 트랜스포트

@upyo/resend 패키지는 개발자 경험을 염두에 두고 설계된 현대적인 이메일 서비스 제공자인 Resend에 대한 지원을 추가합니다. Resend는 프로덕션 애플리케이션에 필요한 기능을 희생하지 않으면서 단순성에 중점을 둡니다.

Resend의 강점 중 하나는 지능적인 배치 최적화입니다. 여러 이메일을 보낼 때, 트랜스포트는 메시지 특성에 따라 가장 효율적인 전송 방법을 자동으로 결정합니다. 첨부 파일이 없는 메시지는 최적의 성능을 위해 Resend의 배치 API를 사용하여 전송되며, 필요할 때는 트랜스포트가 원활하게 개별 요청으로 전환됩니다. 이 최적화는 추가 구성 없이 투명하게 이루어집니다.

import { ResendTransport } from "@upyo/resend";

const transport = new ResendTransport({
  apiKey: "re_1234567890abcdef_1234567890abcdef1234567890",
});

const receipt = await transport.send(message);

Resend는 또한 네트워크 문제나 애플리케이션 재시도 중 중복 전송을 방지하기 위한 내장 멱등성(idempotency)을 제공합니다. 트랜스포트는 자동으로 멱등성 키를 생성하지만, 필요할 때 사용자 정의 키를 제공할 수도 있습니다. 지수 백오프를 사용한 포괄적인 재시도 로직과 결합하여, 일시적인 서비스 중단 중에도 안정적인 전송을 보장합니다. 메시지 태깅 지원은 이메일을 구성하고 Resend의 분석 대시보드를 통해 다양한 유형의 커뮤니케이션 성능을 추적하는 데 도움이 됩니다.

Resend 트랜스포트 가이드는 구성 및 고급 기능에 대한 포괄적인 문서를 제공합니다.

설치

npm  add     @upyo/resend
pnpm add     @upyo/resend
yarn add     @upyo/resend
deno add jsr:@upyo/resend
bun  add     @upyo/resend

Plunk 트랜스포트

@upyo/plunk 패키지는 클라우드 호스팅과 자체 호스팅 배포 옵션을 모두 제공하는 이메일 서비스인 Plunk에 대한 지원을 추가합니다. 이러한 유연성은 특정 인프라 요구 사항이 있는 조직에게 Plunk를 흥미로운 선택으로 만듭니다.

많은 팀에게 이메일 인프라를 자체 호스팅할 수 있는 능력은 규정 준수나 데이터 주권 이유로 중요합니다. Plunk의 자체 호스팅 옵션은 driaug/plunk 이미지를 사용하여 Docker 컨테이너로 실행되므로, 간단하고 현대적인 API를 유지하면서 이메일 인프라를 완전히 제어할 수 있습니다. 동일한 코드베이스는 클라우드와 자체 호스팅 인스턴스 모두에서 원활하게 작동하며, 다른 기본 URL 구성만 필요합니다.

import { PlunkTransport } from "@upyo/plunk";

// 클라우드 호스팅
const cloudTransport = new PlunkTransport({
  apiKey: "sk_1234567890abcdef1234567890abcdef1234567890abcdef",
});

// 자체 호스팅
const selfHostedTransport = new PlunkTransport({
  apiKey: "your-self-hosted-api-key",
  baseUrl: "https://mail.yourcompany.com/api",
});

Plunk 트랜스포트는 지수 백오프를 사용한 재시도 로직, 포괄적인 오류 처리, 첨부 파일 지원(Plunk API 제한에 따라 메시지당 최대 5개)과 같은 기대하는 프로덕션 기능을 포함합니다. 태그를 통한 메시지 구성은 다양한 유형의 이메일을 추적하는 데 도움이 되며, 우선순위 수준은 긴급 메시지가 적절한 처리를 받도록 보장합니다. 트랜스포트는 또한 AbortSignal을 통한 요청 취소를 지원하여 애플리케이션이 타임아웃과 사용자 시작 취소를 우아하게 처리할 수 있게 합니다.

전체 문서와 배포 지침은 Plunk 트랜스포트 문서에서 확인할 수 있습니다.

설치

npm  add     @upyo/plunk
pnpm add     @upyo/plunk
yarn add     @upyo/plunk
deno add jsr:@upyo/plunk
bun  add     @upyo/plunk

마이그레이션 가이드

모든 새로운 트랜스포트는 Upyo의 일관된 API 설계를 유지하므로 기존 트랜스포트를 쉽게 대체할 수 있습니다. 동일한 메시지 생성 및 전송 코드가 모든 트랜스포트에서 작동합니다:

import { createMessage } from "@upyo/core";

const message = createMessage({
  from: "sender@example.com",
  to: "recipient@example.com",
  subject: "Hello from Upyo!",
  content: { text: "Works with any transport!" },
});

const receipt = await transport.send(message);

향후 계획

우리는 라이브러리의 단순성, 타입 안전성 및 크로스 런타임 호환성에 중점을 두면서 Upyo의 트랜스포트 옵션을 확장하는 작업을 계속하고 있습니다. 여러분의 피드백과 기여가 프로젝트의 방향을 형성하는 데 도움이 됩니다.


전체 변경 로그 및 기술적 세부 사항은 CHANGES.md를 참조하세요.

질문이나 문제가 있으시면 GitHub 저장소를 방문해 주세요.

3

No comments

If you have a fediverse account, you can comment on this article from your own instance. Search https://hackers.pub/ap/articles/01995113-910d-7f58-bd0e-688defa9aa68 on your instance and reply to it.