개발자용

코드로 구동하는 호스팅

Zinn Digital®은 API 중심 플랫폼입니다. 당사 대시보드를 구동하는 것과 동일한 엔진 API가 버전 관리되고 스펙 우선이며 빌드 시점에 100% 문서화되어 제공되며, 여기에 생성된 SDK, CLI, Terraform 프로바이더, 서명된 웹훅 및 MCP 서버가 추가됩니다. 터미널, 파이프라인, 상태 파일, AI 에이전트 등 작업에 사용하는 도구가 무엇이든 플랫폼은 그에 응답합니다.

  • 650,000개 이상전 세계에서 호스팅되는 사이트
  • 1모든 도구가 생성되는 기반이 되는 OpenAPI 사양
  • 4클라이언트 SDK — TypeScript, Python, PHP, Go
  • OAuth 2.1범위가 지정되고 취소 가능한 AI 에이전트 액세스

하나의 API. 모든 인터페이스가 그것으로 구동됩니다.

대부분의 호스팅 업체는 제어판에 나중에 API를 덧붙이며, 그 결과 제어판 기능의 절반은 제대로 구현되지 않습니다. 저희는 반대로 만들었습니다. 대시보드, 관리자 콘솔, CLI, Terraform 공급자, MCP 서버 및 사용자 고유의 통합 기능 모두가 동일한 엔진 API를 사용합니다. 제어판에서 할 수 있는 일이라면 코드로도 할 수 있습니다.

사양 우선, 나중에 문서화되지 않음

OpenAPI 스펙이 진실의 원천이며, 스펙에 포함되지 않은 엔드포인트는 절대 배포되지 않습니다. 이 단 하나의 규칙 덕분에 공개 API는 사후 문서화가 아닌 빌드 시점에 완벽하게 문서화될 수 있으며, 문서화되지 않은 엔드포인트는 존재할 수 없으므로 사각지대가 없습니다.

자동 생성됨, 수동 관리되지 않음

인터랙티브 레퍼런스 문서, 4개의 클라이언트 SDK, CLI의 상당 부분 및 Terraform 프로바이더 스캐폴딩이 모두 단 하나의 스펙에서 생성됩니다. 하나의 소스, 다양한 결과물, 항상 동기화 — 구현과 멀어진 문서를 찾아 헤맬 일이 없습니다.

중단 정책이 포함된 버전 관리

엔드포인트는 공개된 지원 중단 정책 및 변경 내역과 함께 /v1 아래에 위치합니다. 빌드 실패를 통해 뒤늦게 발견하는 대신, 변경 사항이 있기 전에 서면으로 미리 안내받으실 수 있습니다.

CI에서 계약 테스트됨

구현과 명세 간의 계약 테스트와 OpenAPI 린팅이 모든 변경 사항마다 실행됩니다. 코드와 계약 간의 차이가 발생하면 빌드가 실패하므로, 클라이언트를 생성하는 데 사용하는 명세는 서버가 실제로 준수하는 명세가 됩니다.

인증, 범위 설정, 그리고 대규모 운영 시 발생하는 문제들

접속 방법은 두 가지이지만, 그 이면에는 하나의 일관된 원칙이 적용됩니다. 어떤 방법을 사용하든 동일한 권한 검사와 동일한 데이터베이스 수준의 격리가 보장됩니다.

조직별 API 키

키 형식은 zdk_<mode>_<prefix>_<secret>입니다. 비밀 값은 SHA-256 해시로만 저장되므로, 발급 후에는 저희도, 데이터베이스에 접근하는 그 누구도 키를 다시 보여드릴 수 없습니다. 키에는 권한 범위가 지정되며, 취소할 수 있고, 개인별이 아닌 조직별로 발급됩니다.

라이브 모드와 테스트 모드, 완벽한 분리

샌드박스 키는 프로덕션 키와 분리되어 있으며 샌드박스 모드로 실행됩니다. 실제 청구나 프로비저닝이 발생하지 않습니다. 통합 테스트 시 비용을 들이거나 서버를 구축하지 않고도 API를 마음껏 호출할 수 있습니다.

인간을 위한 OIDC

사용자 세션은 Keycloak에서 발급한 JWT로 인증되며 렘 공개 키로 검증되고, API 키와 동일한 Principal 객체로 확인됩니다. 엔드포인트는 조직별로 검사되는 sites.create 또는 apikeys.manage와 같은 세분화된 권한 키를 기준으로 접근을 제어합니다. 한 조직의 권한은 하위 조직에는 적용되지만, 별도의 관련 없는 조직에서는 어떠한 접근 권한도 부여하지 않습니다.

하부 행 수준 보안

모든 테넌트 요청은 주체(principal)로부터 설정된 Postgres org 스코프와 함께 트랜잭션 내에서 실행되므로, 누군가 깜빡할 수 있는 ORM 필터가 아니라 데이터베이스에 의해 격리가 강제됩니다. 쿼리셋 필터는 심층 방어(defence in depth)를 위해 여전히 유지됩니다.

데모용이 아닌, 머신을 위해 구축되었습니다

README에서는 API를 그럴싸하게 보이게 만들기 쉽지만, 실제 트래픽 환경에서 제대로 작동하게 만들기는 어렵습니다. 바로 이 부분들을 우리가 공들여 해결했습니다. 새벽 세 시에 연동을 깨뜨리는 주범이 바로 이 지점들이기 때문입니다.

대량 작업의 작동 방식에 영향을 미치므로 짚고 넘어가야 할 세부 사항이 있습니다. 중복 도메인에 대한 409 응답은 모든 테넌트를 대상으로 "이 호스트 이름이 여기에 호스팅되어 있는가?"에 답하며, 이는 열거 오라클(enumeration oracle)이자 Footprint-Free에 대한 실제적인 비익명화 위험입니다. 사이트 생성을 제한하는 것은 게으른 해결책이었을 것이며 대량 프로비저닝 제품을 완전히 망가뜨렸을 것입니다. 대신 거부된 중복 도메인 시도에 대해서만 주체(principal)별로 예산이 부과됩니다. 성공적인 생성에는 절대 부과되지 않으므로 하루 종일 대량으로 프로비저닝할 수 있으며, 탐색 시도는 거의 즉시 차단됩니다.

  • 모든 실패에 대해 일관된 오류 응답 형식이 제공됩니다: 코드, 사람이 읽을 수 있는 메시지, 선택적인 필드 수준의 세부 정보, 그리고 지원팀에 문의할 때 인용할 수 있는 request_id가 포함됩니다. 유효성 검사 오류는 문제가 된 필드 이름과 함께 422 상태 코드를 반환합니다.
  • POST 요청의 멱등성 키는 인라인 대신 커밋 시점에 재생 레코드가 기록되므로, 재시도가 커밋되지 않은 행을 가리키는 캐시된 201을 결코 재생하지 않습니다. 실패한 요청은 진행 중인 락을 즉시 해제하므로, 422 오류로 인해 수정된 재시도가 차단되지 않습니다.
  • UUIDv7 기반의 키셋을 이용한 커서 페이지네이션 — 동시 쓰기 작업 시에도 안정적이며, 스캔 중에 행이 중간에 삽입되어도 페이지 밀림 현상이 없습니다.
  • 응답에 RateLimit-Remaining이 포함되어 있어, 생성된 클라이언트가 추측하는 대신 스마트하게 백오프할 수 있습니다.
  • 범위 외의 리소스는 403 대신 404를 반환합니다. 403은 해당 리소스가 존재함을 확인시켜 주기 때문입니다. 마찬가지 이유로 범위 외의 조직을 기준으로 필터링하면 빈 페이지가 반환됩니다.
  • 사이트 생성은 프로비저닝이 아닌 등록입니다. POST /v1/sites는 상태가 pending인 201을 반환하며 빌드 작업으로 인해 블로킹되지 않습니다. 이벤트는 행과 동일한 트랜잭션 내에서 트랜잭셔널 아웃박스(transactional outbox)에 기록되므로, 사이트의 프로비저닝 요청이 보장되는 경우에만 사이트가 존재하게 됩니다.

SDK, CLI 및 Terraform 프로바이더

동일한 사양을 가진 세 가지 소비 형태, 세 가지 다른 작업 방식.

클라이언트 SDK

TypeScript, Python, PHP 및 Go용으로 생성되며 사양을 추적하므로 수동으로 작성된 래퍼를 기다릴 필요 없이 새로운 엔드포인트가 귀하의 언어로 제공됩니다.

Zinnector® CLI

WordPress 사이트를 구축하고, Node 외에 아무것도 설치하지 않은 상태에서 로컬로 실행한 후 배포하세요. Zinnector®는 배포하려는 슬롯(PHP 버전, 디스크, 파일 수)을 기준으로 프로젝트를 사전 점검하여, 푸시한 후가 아니라 푸시하기 전에 경고합니다. 또한 로그인, 사이트 나열, 배포, 도메인 및 DNS 관리, 메일 서비스 읽기, 백업 수행, 화이트리스트에 등록된 WP-CLI 실행, 로그 테일링, 대량 작업 실행 기능을 제공합니다. 무료이며 MIT 라이선스가 적용되고 동일한 공개 API를 기반으로 제작되었습니다.

테라폼 프로바이더

사이트, 도메인, DNS 레코드, 사서함 및 플랜을 코드로 인프라를 관리하듯 관리하세요. terraform apply를 통해 호스팅을 프로비저닝하면, 기록되지 않은 클릭 작업의 연속 대신 환경을 재현 가능하고 검토 가능한 상태로 만들 수 있습니다.

인터랙티브 참조

동일한 스펙에서 비롯되었으므로, 서버가 구현하는 엔드포인트를 정확히 설명하며 브라우저에서 읽고 호출할 수 있는 생성된 문서입니다.

엔드포인트가 다운되어도 안전하게 유지되는 웹훅

플랫폼의 이면에는 견고한 이벤트 스파인(event spine)이 자리 잡고 있습니다. 모든 상태 변경은 데이터베이스 변경과 원자적으로 Postgres의 트랜잭셔널 아웃박스(transactional outbox)에 이벤트를 기록하고, 릴레이가 이를 NATS JetStream으로 발행합니다. 이벤트는 타입과 버전이 지정되어 있으며 site.deployed, order.paid, invoice.overdue, backup.completed, abuse.flagged, trial.ending 및 기타 항목들이 이에 해당합니다.

관심 있는 소식을 구독하세요

엔드포인트를 WebhookSubscription으로 등록하고 수신할 이벤트 유형을 선택하세요. 하나의 스트림으로 알림, 분석, 자동화 및 귀하의 통합 기능이 모두 피드되며, 당사가 사용하는 것과 동일한 이벤트를 소비하게 됩니다.

HMAC 서명됨

모든 전송은 HMAC 서명되므로 조치를 취하기 전에 당사에서 보낸 것인지 확인할 수 있습니다.

백오프와 함께 재시도되었으며 로그에 기록되었습니다

실패한 전송은 지연 간격을 두어 재시도되며, 각 시도는 WebhookDelivery로 기록됩니다. 전송 내역은 지원 팀에 무엇을 보냈는지 이메일로 문의하는 대신 대시보드에서 직접 확인하고 다시 보낼 수 있습니다.

적어도 한 번 전송되므로 id로 중복을 제거하세요

이 파이프라인은 정확히 한 번(exactly-once)인 척하는 대신 의도적으로 최소 한 번(at-least-once) 전달을 보장합니다. 발행 중에 중단된 릴레이는 클레임 임대 기간이 만료되어 이벤트가 다시 발행됩니다. 봉투(envelope) ID를 기준으로 중복을 제거하면 소비자는 구조적으로 올바르게 작동합니다.

사이트에 코드 추가하기

API는 개발자 이야기의 절반에 불과합니다. 나머지 절반은 배포입니다.

  • GitHub, GitLab 또는 Bitbucket을 OAuth를 통해 연결하고, 배포 키는 설정 파일이 아니라 자격 증명 저장소에 보관하세요.
  • 푸시는 빌드 및 배포 파이프라인을 트리거하며, 브랜치와 환경 간 매핑(main은 production으로, staging은 staging으로)과 composer 및 npm을 위한 스택별 빌드 단계를 지원합니다.
  • 배포에 문제가 발생할 경우 이전 릴리스로 되돌립니다.
  • 방문객에게 도달하기 전에 실제 환경에서 변경 사항을 검증할 수 있도록 지원하는 스테이징 복제 및 라이브 푸시 기능입니다.
  • CageFS 격리를 적용하여 사이트별로 Jailed SSH, SFTP 및 FTP를 지원하므로, 각 테넌트는 자신의 파일만 볼 수 있습니다.
  • 패널 터미널 및 SSH를 통한 wp-cli.
  • code-server를 통한 브라우저 환경의 VS Code — 확장 프로그램, 통합 터미널, git을 갖춘 완전한 편집기로, 사이트의 파일을 직접 편집합니다.
  • 사이트별 PHP 버전, 수정 가능한 PHP 설정, 사이트별 확장 기능, 환경 변수, 그리고 WP-cron과 함께 제공되는 실제 크론(cron).

AI 에이전트가 사용할 수 있는 동일한 API

당사는 본 플랫폼을 호스팅된 MCP 서버 형태로 제공합니다. 이는 엔진 API 위에 구축된 얇은 프로토콜 어댑터로서, 동일한 액션 카탈로그, RBAC 및 감사 추적을 그대로 재사용합니다. Claude Code, Cursor, ChatGPT, Claude Desktop 또는 기타 MCP 호환 클라이언트를 한 번만 연결하면, 당사가 API에 추가하는 모든 기능이 자동으로 해당 클라이언트에서 사용 가능해집니다.

에이전트는 세 가지 요소를 받습니다. 도구(동일한 API 엔드포인트, 분산될 병렬 로직 없음), 리소스(실제 데이터를 기반으로 조치 전에 진단할 수 있도록 읽기 전용 사이트 상태, 설정, 최근 로그, 지표, 가동 시간 및 KB 문서 제공), 그리고 프롬프트(이 사이트 진단 또는 마이그레이션 준비와 같은 게시된 워크플로 템플릿)입니다.

보안도 인증과 마찬가지입니다. OAuth 2.1, 조직에 바인딩된 토큰 및 행 수준 보안이 적용된 RBAC 권한, 도구별로 범위가 지정되고 철회 가능한 권한, 프로덕션과 격리된 샌드박스가 적용됩니다. 삭제, 일시 중지, 결제, 대규모 지출과 같은 파괴적인 작업에는 명시적 확인 또는 사람의 승인 정책이 필요합니다. 속도 제한과 지출 상한선이 AI가 트리거하는 유료 작업을 제한하며, 모든 MCP 호출은 신원, 도구, 인자 및 결과와 함께 감사 로깅됩니다.

우리는 개별 앱을 하나씩 연동하는 대신 프로토콜을 지원하므로, 호스팅 연동을 변경하지 않고도 원하는 AI 툴링을 자유롭게 바꿀 수 있습니다.

자주 묻는 질문

공개 API는 대시보드에서 사용하는 것과 동일한가요?

예 — 동일한 엔진 API이며, 정식 출시되어 안정화된 버전입니다. 대시보드, 관리자 콘솔, CLI, Terraform 공급자, MCP 서버 및 웹훅 모두 동일한 인터페이스를 사용하므로 API가 제어판보다 뒤처지지 않습니다.

비용을 들이거나 실제 서버를 구축하지 않고도 연동을 테스트할 수 있나요?

네. 샌드박스 키는 운영(프로덕션) 키와 별도로 발급되며 테스트 모드로 실행되므로 실제 결제나 프로비저닝이 이루어지지 않습니다. CI 환경을 샌드박스 자격 증명에 연결하여 전체 요청 및 응답 주기를 안전하게 테스트해 보세요.

재시도로 인해 동일한 항목이 두 개 생성되는 것을 어떻게 막을 수 있나요?

POST 요청 시 Idempotency-Key를 전송하세요. 재시도 레코드는 인라인이 아닌 커밋 시점에 기록되므로, 실제로 커밋되지 않은 행에 대해 캐시된 성공 결과를 재시도 시 재생할 수 없으며, 실패한 요청은 잠금을 즉시 해제하므로 수정된 재시도가 지연되지 않습니다. 웹훅 전송은 설계상 최소 한 번(at-least-once) 이루어지므로, 수신 측에서 엔벨로프 ID를 기준으로 중복을 제거하세요.

하나의 API 키로 내 모든 클라이언트 조직에 대한 액세스 권한을 부여할 수 있나요?

오늘은 아닙니다. API 키는 조직별로 발급되므로 여러 클라이언트 조직에 걸친 연동 작업에는 각 조직의 키가 각각 필요합니다. 또한 사용자 주체에 대한 권한도 조직별로 확인됩니다. 즉, 한 조직에서 sites.create 권한을 가지고 있다고 해서 별개의 무관한 조직에 대한 접근 권한이 부여되지는 않지만, 해당 조직의 하위에 중첩된 조직에는 적용됩니다. 이는 의도된 설계로, 유출된 키가 플랫폼 전체가 아닌 해당 조직 및 그 하위 조직에만 국한되도록 제한합니다.

기본 제공되는 개발자(Developer) 역할은 실제로 어떤 권한을 허용하나요?

개발자 역할은 조직 읽기, API 키 관리, 사이트 조회 및 생성, 사이트 재시작, 캐시 삭제, 티켓 조회 및 답변을 포함합니다. 결제 제어는 의도적으로 제외되어 있습니다. 배포 및 라이브 푸시 권한은 이 역할에 포함되지 않으므로 참고하세요. 팀원에게 해당 권한이 필요한 경우, 개발자가 가장 광범위한 기술 역할이라고 가정하지 말고 해당 권한이 포함된 역할을 할당하세요.

엔드포인트가 한 시간 동안 다운되면 내 웹훅은 어떻게 되나요?

백오프를 통한 전송 재시도가 이루어지며, 각 시도는 검사 가능한 WebhookDelivery로 기록됩니다. 업스트림에서는 변경 작업과 동일한 데이터베이스 트랜잭션 내에서 이벤트가 트랜잭셔널 아웃박스(transactional outbox)에 기록되므로, 컨슈머를 사용할 수 없는 동안에도 데이터가 손실되지 않습니다. 컨슈머가 다운되면 지연은 발생할 수 있지만 프로듀서는 결코 중단되지 않으며, 복구된 후 대시보드에서 전송을 다시 재생할 수 있습니다.

거기에 맞춰 개발을 시작하는 데 비용이 얼마나 드나요?

신용카드 등록 없는 14일간의 Footprint-Free Hosting 무료 체험을 시작하세요. 결제 정보가 필요 없으며 최대 5개의 사이트를 지원합니다. 유료 Footprint-Free 요금제는 PBN 5 기준 월 $6부터 시작됩니다. 모든 플랜에는 30일 환불 보장, 무료 이전, 그리고 벤더 종속 없음이 적용됩니다.

명세서를 읽은 후, 그에 맞춰 빌드하세요

사양 우선 API, 생성된 SDK, CLI, Terraform 공급자, 서명된 웹훅 및 MCP 서버 — 전 세계 650,000개 이상의 사이트를 위해 구축된 호스팅에서 제공됩니다. 결제 정보 없이 14일 동안 무료로 체험을 시작하세요.

무료로 시작하기