Web Hosting

최종 수정: 2026년 6월 22일

Web Hosting은 빌드한 정적 웹사이트를 Space에 올려 {subdomain}.weegloo.app 주소로 서비스하는 리소스입니다. 옷가게 쇼핑몰을 예로 들면, 빌드한 쇼핑몰 사이트를 dailywear-shop.weegloo.app으로 띄우는 것이 Web Hosting 한 건입니다.

올리는 순서는 다음과 같습니다. 먼저 빌드 결과를 ZIP 또는 tar.gz로 묶어 Upload API로 올려 Upload 하나를 받습니다. 그 Upload를 참조해 POST /web-hostingsWeb Hosting을 만듭니다. 시스템이 올린 파일을 처리해 sys.stateCOMPLETED가 되면 url로 사이트에 접속할 수 있습니다. CMA에서 Web HostingSpace 하위 리소스이며, 경로는 /spaces/{spaceId}/web-hostings를 기준으로 합니다.

리소스 구조

다음은 처리가 끝난 Web Hosting "데일리웨어 쇼핑몰 사이트"의 단일 조회 응답입니다. sys(시스템 속성)와 함께 본문 속성(name·description·isSpa·subdomain·url)을 가집니다.

{
  "sys": {
    "id": "3trmXRM3RqbgSnifyg7PWeb01Examp",
    "type": "WebHosting",
    "space": { "sys": { "id": "HnQ32YiH", "type": "Refer", "targetType": "Space" } },
    "createdBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "updatedBy": { "sys": { "id": "3p4tcFbQRwz503VXdtHXNI5dZH5TVB", "type": "Refer", "targetType": "User" } },
    "createdAt": "2026-06-18T11:40:00.000Z",
    "updatedAt": "2026-06-18T11:40:05.000Z",
    "state": "COMPLETED",
    "totalFileSize": 245786,
    "version": 3
  },
  "name": "데일리웨어 쇼핑몰 사이트",
  "description": "옷·잡화 쇼핑몰 정적 사이트",
  "isSpa": true,
  "subdomain": "dailywear-shop",
  "url": "https://dailywear-shop.weegloo.app"
}

주요 키:

  • subdomain: 사이트가 서비스될 서브도메인입니다. 위 예시는 dailywear-shop이며, 최종 주소는 dailywear-shop.weegloo.app이 됩니다.
  • url: 처리가 끝난 뒤 접속할 수 있는 사이트 주소입니다.
  • isSpa: 단일 페이지 앱(SPA) 여부입니다. true면 모든 경로 요청을 index.html로 보냅니다.
  • state: 올린 파일의 배포 처리 상태입니다. 아래 시스템 속성 (sys)에서 설명합니다.

시스템 속성 (sys)

모든 Web Hosting은 공통 시스템 속성을 sys 객체에 담습니다. space·createdBy·updatedByRefer 모양({ "sys": { "id", "type": "Refer", "targetType" } })으로 들어갑니다.

속성타입설명
idstring리소스 고유 식별자. 단일 조회·수정·삭제 경로의 {webHostingId}에 들어갑니다.
typestring리소스 종류. Web Hosting은 항상 "WebHosting".
spaceRefer<Space>Web Hosting이 속한 Space.
createdByRefer<User>생성한 사용자.
createdAtstring (date-time)생성 시각.
updatedByRefer<User>마지막으로 수정한 사용자.
updatedAtstring (date-time)마지막 수정 시각.
statestring (enum)배포 처리 상태. 아래 4가지 중 하나.
errorstring처리 실패 시 그 사유. 실패가 아니면 비어 있습니다.
totalFileSizeinteger올린 파일의 총 크기(바이트).
versioninteger (≥1)리소스 버전. 생성·수정마다 1씩 올라갑니다. 수정·부분 수정 요청에 x-weegloo-version으로 실어야 하는 값입니다.

state는 올린 파일을 배포하는 처리 단계를 나타냅니다. Content의 발행 상태가 아니며, Web Hosting에는 발행이나 보관 개념이 없습니다. 파일을 처리해 COMPLETED가 되면 url로 사이트에 접속됩니다.

state의미
PENDING처리 대기 중.
PROCESSING처리 중.
COMPLETED처리 완료. url로 접속 가능합니다.
FAILED처리 실패. 사유는 sys.error에 담깁니다.

본문 속성

Web Hosting의 본문 속성은 다음과 같습니다.

속성타입설명
namestring (1~64)Web Hosting 이름. 생성 시 필수.
descriptionstring (≤128)설명. 선택.
isSpaboolean단일 페이지 앱 여부. true면 모든 경로 요청을 index.html로 보냅니다(SPA 라우팅용). 생성 시 필수.
subdomainstring (3~32)서비스 서브도메인. 패턴 ^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$(소문자·숫자·하이픈, 처음과 끝은 하이픈 불가). 생성 시 필수.
uploadRefer<Upload>올릴 파일을 가리키는 참조. ZIP 또는 tar.gz이며, 루트에 index.html이 있고 자산은 상대 경로로 참조해야 합니다.
urlstring처리 완료 후 접속 URL. 시스템이 채웁니다.
fromPathstring배포 기준 경로.
customDomainstring연결한 커스텀 도메인. 선택. 아래 커스텀 도메인에서 설명합니다.

서브도메인 확인

Web Hosting을 만들기 전에 쓰려는 서브도메인이 비어 있는지 확인할 수 있습니다. GET /web-hostings/availability?subdomain=...에 확인할 서브도메인을 subdomain 쿼리로 넘기면 됩니다.

응답은 다음 모양이며, availabletrue면 그 서브도메인을 쓸 수 있습니다.

{ "subdomain": "dailywear-shop", "available": true }

커스텀 도메인

기본 주소인 {subdomain}.weegloo.app 대신 직접 보유한 도메인을 Web Hosting에 연결할 수 있습니다. 연결한 도메인의 상태는 customDomain 객체로 표현되며, { id, domain, dns, cert } 모양입니다. dnscert는 각각 도메인 소유권 검증(DNS)과 인증서 발급(cert) 상태이며, 둘 다 { status, txtName, txtContent } 모양입니다. txtName·txtContent는 도메인 쪽에 등록해야 하는 DNS TXT 레코드의 이름과 값입니다.

{
  "id": 1024,
  "domain": "shop.dailywear.example",
  "dns": {
    "status": "PENDING",
    "txtName": "_weegloo.shop.dailywear.example",
    "txtContent": "weegloo-verify=3trmXRM3RqbgSnifyg7PWebVerifyEx"
  },
  "cert": {
    "status": "PENDING",
    "txtName": "_acme-challenge.shop.dailywear.example",
    "txtContent": "acme-verify=3trmXRM3RqbgSnifyg7PWebCertEx"
  }
}

도메인 쪽에 TXT 레코드를 등록한 뒤 PUT /web-hostings/{webHostingId}/custom-domain/status/verify로 검증을 트리거하고, 현재 상태는 GET /web-hostings/{webHostingId}/custom-domain/status로 조회합니다. 검증이 끝나면 dns.status·cert.statusVERIFIED가 됩니다. 커스텀 도메인을 연결하지 않은 Web Hosting에 상태 조회를 호출하면 WGL404001로 응답합니다.

API

아래 모든 엔드포인트의 기준 URL은 https://cma.weegloo.com/v1이며, Authorization 헤더에 CMA를 인증하는 Bearer 토큰이 필요합니다. 수정·부분 수정은 낙관적 동시성 제어를 위해 X-Weegloo-Version 헤더(현재 리소스의 sys.version)를 함께 보내야 합니다. 생성·삭제 요청에는 이 헤더가 없습니다.

  • Upload API: 정적 파일 ZIP를 올려 Web Hosting 생성에 쓸 Upload를 받는 요청.
  • Space: Web Hosting이 속한 Space.