Resend CLI 소개
Resend CLI는 개발자를 위해 구축된 이메일 플랫폼인 Resend의 공식 명령줄 도구입니다. npm install -g resend-cli 또는 brew install resend/cli/resend로 설치하고, resend login으로 인증한 다음, 모든 터미널 또는 CI/CD 파이프라인에서 이메일을 보내고, 도메인을 관리하고, 이메일 인프라를 자동화할 수 있습니다.
Resend란 무엇인가요?
Resend는 개발자를 위한 이메일 API입니다. 도메인을 연결하고, API 키를 받아 애플리케이션에서 트랜잭션 이메일을 보내기 시작할 수 있습니다. 비밀번호 재설정, 주문 확인, 온보딩 시퀀스 등 프로그램 방식으로 트리거되는 모든 이메일을 보낼 수 있습니다.
2026년 3월 13일, Resend의 설립자 Zeno Rocha는 Resend CLI를 출시하여 동일한 인프라를 터미널로 가져왔습니다. CLI는 13개 리소스에 걸쳐 53개의 명령을 가지고 있습니다. TypeScript로 작성되었으며, MIT 라이선스에 따라 완전히 오픈 소스이며, 세 가지 다른 대상에게 유용합니다:
- 사람: 대화형 프롬프트, 읽기 쉬운 테이블 출력, 자연어 스케줄링("내일 오전 9시")
- AI 에이전트: JSON 출력 모드, 멱등성 키, 자동 에이전트 감지
- CI/CD 파이프라인: 환경 변수 인증, 스크립트 가능한 플래그, 일관된 종료 코드
Resend CLI 설치하기
CLI를 설치하는 네 가지 방법이 있습니다. 본인의 환경에 맞는 방법을 선택하세요.
cURL을 통한 설치 (독립 실행형 바이너리, Node.js 불필요)
curl -fsSL https://resend.com/install.sh | bash
이 명령은 OS에 맞는 사전 빌드된 바이너리를 다운로드하여 PATH에 추가합니다. Node.js는 필요하지 않습니다.
npm을 통한 설치
npm install -g resend-cli
Node.js 20 이상 버전이 필요합니다. 설치 후 작동하는지 확인하세요:
resend --version
Homebrew를 통한 설치 (macOS 및 Linux)
brew install resend/cli/resend
이것은 macOS에서 가장 깔끔한 옵션입니다. Homebrew는 업데이트를 자동으로 처리합니다.
PowerShell을 통한 설치 (Windows)
irm https://resend.com/install.ps1 | iex
GitHub 릴리스 페이지에서 .exe 바이너리를 직접 다운로드할 수도 있습니다.
로컬 개발용
CLI에 기여하거나 소스 코드로부터 빌드하려면 Node.js 20+ 및 pnpm이 필요합니다:
git clone https://github.com/resend/resend-cli.git
cd resend-cli
pnpm install
pnpm build # outputs ./dist/cli.cjs
pnpm build:bin # native binary at ./dist/resend
계정 인증하기
CLI를 Resend 계정에 연결하려면 resend login을 실행하세요:
resend login
이 명령은 브라우저를 열어 Resend 대시보드에서 API 키를 생성하는 과정을 안내하고, 제한된 0600 권한으로 자격 증명을 로컬 ~/.config/resend/credentials.json에 저장합니다.
비대화형 환경(CI/CD, 스크립트)의 경우, 브라우저 과정을 건너뛰고 키를 직접 전달하세요:
resend login --key re_xxxxxxxxxxxxx
한 번 저장되면, 모든 명령에 대해 다시 인증할 필요가 없습니다. CLI는 다음 순서로 API 키를 확인합니다:
--api-key플래그 (모든 것을 재정의)RESEND_API_KEY환경 변수- 저장된 자격 증명 파일
CI 파이프라인의 경우, RESEND_API_KEY를 보안 환경 변수로 설정하는 것이 일반적인 접근 방식입니다:
RESEND_API_KEY=re_xxx resend emails send --from builds@yourco.com --to dev@yourco.com --subject "Build passed" --text "All tests green."
다중 계정 지원
여러 Resend 조직이나 팀에서 작업하는 경우, CLI는 이를 처리합니다. 로그아웃 없이 저장된 프로필 간에 전환할 수 있습니다:
resend auth switch
또는 단일 명령에 대해 특정 프로필을 전달할 수 있습니다:
resend <command> --profile production
첫 이메일 보내기
이메일 전송을 위한 주요 명령은 resend emails send입니다. 최소한 발신자 주소(인증된 도메인), 수신자, 제목 및 본문이 필요합니다.
일반 텍스트 이메일 보내기
resend emails send \
--from "you@yourdomain.com" \
--to recipient@example.com \
--subject "Hello from the CLI" \
--text "This is a test email sent from the Resend CLI."
HTML 이메일 보내기
resend emails send \
--from "team@yourco.com" \
--to user@example.com \
--subject "Your order is confirmed" \
--html "<h1>Order confirmed</h1><p>Thanks for your purchase.</p>"
또는 로컬 HTML 파일을 지정합니다:
resend emails send \
--from "team@yourco.com" \
--to user@example.com \
--subject "Welcome aboard" \
--html-file ./templates/welcome.html
전송 예약하기
CLI는 ISO 8601 타임스탬프와 함께 자연어 날짜를 파싱합니다:
resend emails send \
--from "you@yourco.com" \
--to user@example.com \
--subject "Scheduled check-in" \
--text "Just checking in." \
--schedule "tomorrow at 9am"
"1시간 후", "다음 주 월요일 오후 3시"와 같은 문구나 전체 ISO 타임스탬프와 함께 작동합니다.
이메일 ID 캡처하기
파이프될 때 CLI는 자동으로 JSON 출력으로 전환됩니다. jq를 통해 파이프하여 후속 작업을 위한 이메일 ID를 캡처합니다:
EMAIL_ID=$(resend emails send \
--from a@acme.com \
--to b@acme.com \
--subject "Test" \
--text "Hi" | jq -r '.data.id')
echo "Sent email: $EMAIL_ID"
예약된 이메일 취소 또는 업데이트
resend emails cancel $EMAIL_ID
resend emails update $EMAIL_ID --schedule "next Monday at 10am"
최근 이메일 목록
resend emails list
최대 100개 이메일 일괄 전송
이메일 객체 배열을 포함하는 JSON 파일을 생성합니다:
[
{ "from": "you@yourco.com", "to": "alice@example.com", "subject": "Hi Alice", "text": "Hello!" },
{ "from": "you@yourco.com", "to": "bob@example.com", "subject": "Hi Bob", "text": "Hello!" }
]
그런 다음 일괄 전송합니다:
resend emails send-batch --file emails.json
각 일괄 요청은 최대 100개의 이메일을 보내더라도 비율 제한에 대해 하나의 API 호출로 계산됩니다.
도메인 및 API 키 관리
이메일을 보내려면 인증된 도메인이 필요합니다. CLI는 전체 도메인 라이프사이클을 안내합니다.
도메인 추가
resend domains create --name yourdomain.com --region us-east-1
지원되는 지역: us-east-1, eu-west-1, sa-east-1, ap-northeast-1. 대기 시간을 최소화하려면 사용자에게 가장 가까운 지역을 선택하세요.
DNS 레코드 확인
도메인을 생성한 후, Resend는 추가해야 할 DNS 레코드(SPF, DKIM, DMARC)를 제공합니다. DNS 공급자에 추가한 후 다음을 실행하세요:
resend domains verify --id <domain-id>
"verified"가 반환될 때까지 상태를 폴링합니다:
resend domains get --id <domain-id>
추적 및 TLS 구성
resend domains configure --id <domain-id> # Interactive configuration
이 명령을 통해 오픈 추적, 클릭 추적 및 사용자 지정 DKIM을 활성화할 수 있습니다.
모든 도메인 목록
resend domains list
API 키 관리
보안을 위해, 하나의 키를 모든 곳에서 공유하는 대신 각 서비스 또는 환경에 대해 범위가 지정된 API 키를 생성하세요:
resend api-keys create # Interactive, lets you scope per domain
resend api-keys list
resend api-keys delete --id <key-id>
범위가 지정된 키는 각 통합이 수행할 수 있는 작업을 제한합니다. 하나의 도메인에 범위가 지정된 키는 다른 도메인이나 계정 설정에 액세스할 수 없습니다.
고급 기능: 브로드캐스트, 웹훅 및 템플릿
개별 이메일 전송 외에도 Resend CLI는 대량 브로드캐스트, 웹훅 관리 및 재사용 가능한 템플릿이라는 세 가지 주요 사용 사례를 처리합니다.
브로드캐스트
브로드캐스트를 사용하면 동일한 이메일을 대량의 연락처 목록에 보낼 수 있습니다. 먼저 초안을 작성한 다음 보내거나 예약합니다:
resend broadcasts create # Interactive draft creation
resend broadcasts send --id <broadcast-id>
resend broadcasts schedule --id <broadcast-id> --date "next Monday at 10am"
웹훅
웹훅은 실시간 전송 이벤트를 제공합니다: 반송, 열림, 클릭, 스팸 보고서. CLI는 전체 라이프사이클을 처리합니다:
resend webhooks create # Register a new endpoint
resend webhooks list
로컬 개발의 경우, webhooks listen 명령을 사용하여 웹훅 이벤트를 localhost로 프록시할 수 있습니다:
resend webhooks listen --forward-to http://localhost:3000/webhooks/resend
이는 ngrok 또는 유사한 터널링 도구를 설정하는 번거로움을 덜어줍니다. CLI는 email.sent, email.delivered, email.bounced, email.opened, email.clicked를 포함한 17가지 이벤트 유형을 지원합니다.
템플릿
템플릿을 사용하면 동적 변수를 사용하여 재사용 가능한 이메일 HTML을 만들 수 있습니다:
resend templates create # Interactive template builder
변수는 폴백 값과 함께 {{variable_name}} 구문을 사용합니다. 생성된 템플릿은 이메일 전송 시 ID로 참조할 수 있습니다.
연락처 및 대상
Resend는 마케팅 이메일을 위한 내장된 연락처 관리 기능을 제공합니다:
resend contacts create --audience-id <id> --email user@example.com --first-name "Alice"
resend contacts list --audience-id <id>
resend contacts update --id <contact-id> --unsubscribed false
진단 실행
doctor 명령은 환경을 확인하고 문제를 표시합니다:
resend doctor
이 명령은 CLI 버전, API 키 유효성, 인증된 도메인을 확인하고, AI 코딩 에이전트(Cursor, Claude Desktop, VS Code, OpenClaw)까지 감지합니다.
CI/CD 파이프라인에서 Resend CLI 사용하기
CLI는 자동화된 환경에서 잘 작동하도록 구축되었습니다. 알아두어야 할 몇 가지 패턴이 있습니다:
기계 판독 가능한 출력
출력을 파이프하거나 --json을 전달할 때마다 CLI는 구조화된 JSON으로 전환됩니다. 스피너나 대화형 프롬프트는 없습니다:
resend emails send --from a@co.com --to b@co.com --subject "Deploy" --text "Done" --json
--quiet 플래그는 JSON을 제외한 모든 출력을 억제합니다:
resend emails list --quiet | jq '.[0].id'
파괴적인 작업 자동 확인
스크립트에서 확인 프롬프트를 건너뛰려면 --yes를 사용하세요:
resend api-keys delete --id <key-id> --yes
GitHub Actions 예시
- name: Send deployment notification
env:
RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }}
run: |
resend emails send \
--from deploys@yourco.com \
--to team@yourco.com \
--subject "Deploy to production: ${{ github.sha }}" \
--text "Deployed commit ${{ github.sha }} to production."
요율 제한
Resend API 요율 제한은 초당 2회 요청이며, 팀의 모든 API 키에서 공유됩니다. 일괄 전송 시 개별 전송을 반복하는 대신 send-batch(호출당 최대 100개의 이메일)를 사용하세요.
Apidog로 이메일 API 테스트하기
Resend CLI는 대화형 사용 및 간단한 스크립트에 유용합니다. 하지만 Resend의 REST API를 직접 호출하는 백엔드를 구축할 때는 애플리케이션 코드를 작성하기 전에 해당 엔드포인트를 탐색하고 테스트할 방법이 필요합니다.
Apidog가 그 역할을 합니다. Apidog는 HTTP 요청을 보내고, 응답을 검사하고, 테스트 케이스를 정리하고, 다양한 API 키 및 구성을 위한 환경을 설정할 수 있는 무료 API 클라이언트입니다.
다음은 Apidog가 일반적인 Resend 통합 워크플로에 어떻게 적용되는지에 대한 설명입니다:
Resend API 사양 가져오기. Resend는 resend.com/docs에서 API 참조 문서를 제공합니다. API 사양을 Apidog로 가져와 요청/응답 스키마를 포함한 모든 엔드포인트를 체계적으로 볼 수 있습니다.
환경 설정. Apidog에서 개발 및 프로덕션 환경을 생성하세요. RESEND_API_KEY를 환경 변수로 저장하고 요청에서 {{RESEND_API_KEY}}로 참조하세요. 한 번의 클릭으로 환경 간에 전환할 수 있습니다.
전송 로직 테스트. 애플리케이션에서 이메일을 보내는 코드를 작성하기 전에, Apidog에서 정확한 페이로드를 사용하여 POST /emails 엔드포인트를 실행하세요. 응답을 확인하고, 이메일 ID가 올바르게 반환되는지 확인하고, 예외 상황(누락된 필드, 잘못된 주소 등)에 대한 동작을 검증하세요.
테스트 자동화. Apidog의 테스트 러너를 사용하면 API 호출을 연결하고 응답 값을 단언할 수 있습니다. 테스트 이메일을 보내고, ID로 검색한 다음, 해당 상태를 확인하는 테스트를 코드를 작성하지 않고도 설정할 수 있습니다.
이는 통합 버그가 프로덕션 환경에 나타나기 전에 잡을 수 있게 해줍니다. 로컬 개발을 위한 Resend CLI와 결합하여, 빠른 터미널 도구와 철저한 API 테스트 환경을 모두 갖게 됩니다.
Resend 가격 정책
CLI 자체는 무료이며 오픈 소스입니다. 가격은 Resend 플랫폼에 적용됩니다:
| 플랜 | 가격 | 월별 이메일 | 일일 제한 | 로그 보존 |
|---|---|---|---|---|
| 무료 | $0/월 | 3,000 | 100/일 | 1일 |
| Pro | $20/월 | 50,000 | 제한 없음 | 3일 |
| Scale | $90/월 | 100,000 | 제한 없음 | 7일 |
| Enterprise | 맞춤형 | 맞춤형 | 맞춤형 | 맞춤형 |
무료 등급에 대해 알아야 할 몇 가지 사항:
- 일일 100개 제한은 테스트 및 소규모 프로젝트에 적합하며, 프로덕션 트래픽에는 적합하지 않습니다.
- 분석(열림/클릭 추적)은 유료 플랜이 필요합니다.
- 로그 보존 기간이 1일이므로 24시간 후에는 이전 이메일 상태를 검색할 수 없습니다.
- 모든 플랜의 요율 제한은 초당 2회 요청이며, 팀 전체에서 공유됩니다.
- 유료 플랜의 초과 사용량은 예상치 못한 청구를 방지하기 위해 월별 할당량의 5배로 제한됩니다.
전용 IP는 Scale 플랜의 월 $30 추가 기능으로, 하루 500개 이상의 이메일을 보낼 때 사용할 수 있습니다.
자주 묻는 질문
Resend CLI를 설치하는 데 Node.js가 필요한가요?
사전 빌드된 독립 실행형 바이너리를 다운로드하는 cURL 또는 Homebrew 설치 방법에는 필요하지 않습니다. npm 설치 경로는 Node.js 20+가 필요합니다.
어떤 이메일 주소에서든 보낼 수 없는 이유는 무엇인가요?
Resend는 인증된 도메인을 필요로 합니다. 도메인을 소유하고 Resend가 제공하는 DNS 레코드(SPF, DKIM, DMARC)를 추가하며 인증 단계를 통과해야 합니다. Gmail과 같은 무료 이메일 제공업체는 발신자 주소로 지원되지 않습니다.
무료 플랜으로 어떤 이메일 주소로든 보낼 수 있나요?
네. 무료 플랜은 수신자를 제한하지 않습니다. 월 3,000개의 이메일과 일일 100개 제한이 있습니다.
자연어 스케줄링은 어떻게 작동하나요?
CLI는 "내일 오전 9시", "2시간 후", "다음 주 금요일 오후 3시"와 같은 문구나 표준 ISO 8601 타임스탬프를 파싱합니다. 별도로 지정하지 않는 한 시간은 시스템의 로컬 시간대로 해석됩니다.
출력을 파이프하면 어떻게 되나요?
CLI는 파이프될 때 이를 감지하고 스피너나 프롬프트 없이 자동으로 JSON 전용 출력으로 전환됩니다. --json을 명시적으로 전달할 필요가 없습니다.
여러 Resend 계정으로 CLI를 사용할 수 있나요?
네. resend login을 여러 번 사용하여 다른 프로필을 저장한 다음, resend auth switch를 사용하여 프로필 간에 전환하거나, 어떤 명령에도 --profile <name>을 전달하여 특정 프로필을 사용할 수 있습니다.
Resend CLI는 오픈 소스인가요?
네, MIT 라이선스이며 github.com/resend/resend-cli에 호스팅되어 있습니다.
--quiet와 --json의 차이점은 무엇인가요?
둘 다 JSON 출력을 생성합니다. --json은 JSON 출력을 강제합니다. --quiet는 스피너와 진행 표시기를 억제하며, 이는 JSON 모드를 의미하기도 합니다. 실제로는 출력 형식에 대해 동일하게 작동하지만, --quiet는 추가적으로 비데이터 출력을 모두 제거합니다.
