디지털오션 API 사용법: 개발자를 위한 클라우드 인프라 가이드

Ashley Innocent

Ashley Innocent

24 March 2026

디지털오션 API 사용법: 개발자를 위한 클라우드 인프라 가이드

요약 (TL;DR)

DigitalOcean API는 드롭렛, 볼륨, 방화벽, 로드 밸런서, Kubernetes 클러스터 등을 관리합니다. 개인 접근 토큰으로 인증하고, api.digitalocean.com/v2를 호출하며, 요율 제한을 처리합니다. 테스트를 위해 Apidog를 사용하여 구성 유효성 검사, 인프라 프로비저닝 테스트, 자동화 워크플로우 문서화를 수행하십시오.

소개

DigitalOcean은 클라우드 컴퓨팅을 단순화합니다. AWS와 GCP가 수백 가지 서비스를 제공하는 반면, DigitalOcean은 필수적인 요소에 중점을 둡니다: 컴퓨팅(드롭렛), 스토리지(볼륨), 네트워킹(유동 IP, 방화벽), 관리형 Kubernetes 및 앱 플랫폼. API도 이러한 단순성을 따릅니다.

개발자는 DigitalOcean의 API를 다음과 같은 용도로 사용합니다:

💡
인프라를 자동화하는 경우, Apidog는 API 호출을 테스트하고, 인프라 구성을 재사용 가능한 템플릿으로 저장하며, 팀과 함께 프로비저닝 워크플로우를 공동 작업하는 데 도움을 줍니다.
버튼

인증

개인 접근 토큰

  1. DigitalOcean 대시보드 → API → 새 토큰 생성으로 이동합니다.
  2. 토큰 이름을 지정하고 만료일을 설정합니다.
  3. 복사하여 안전하게 보관합니다.

토큰 사용:

curl -X GET "https://api.digitalocean.com/v2/account" \
  -H "Authorization: Bearer YOUR_TOKEN"

응답 형식

{
  "account": {
    "droplet_limit": 25,
    "email": "you@example.com",
    "name": "Your Name",
    "uuid": "abc123xyz",
    "email_verified": true,
    "status": "active"
  }
}

드롭렛 (가상 머신)

모든 드롭렛 나열

curl -X GET "https://api.digitalocean.com/v2/droplets" \
  -H "Authorization: Bearer YOUR_TOKEN"

드롭렛 생성

curl -X POST "https://api.digitalocean.com/v2/droplets" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-droplet",
    "region": "nyc1",
    "size": "s-2vcpu-4gb",
    "image": "ubuntu-20-04-x64",
    "ssh_keys": ["ssh-rsa AAAA..."],
    "backups": false,
    "ipv6": true,
    "tags": ["web", "production"]
  }'

인기 있는 크기:

지역:

드롭렛 세부 정보 가져오기

curl -X GET "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"

드롭렛 삭제

curl -X DELETE "https://api.digitalocean.com/v2/droplets/DROPLET_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"

드롭렛 작업

재부팅:

curl -X POST "https://api.digitalocean.com/v2/droplets/DROPLET_ID/actions" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "reboot"
  }'

크기 조정:

curl -X POST "https://api.digitalocean.com/v2/droplets/DROPLET_ID/actions" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "resize",
    "size": "s-4vcpu-8gb"
  }'

스냅샷:

curl -X POST "https://api.digitalocean.com/v2/droplets/DROPLET_ID/actions" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "snapshot",
    "name": "my-snapshot"
  }'

볼륨 (블록 스토리지)

볼륨 생성

curl -X POST "https://api.digitalocean.com/v2/volumes" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "size_gigabytes": 100,
    "name": "my-volume",
    "region": "nyc1",
    "description": "Data volume for web servers"
  }'

드롭렛에 볼륨 연결

curl -X POST "https://api.digitalocean.com/v2/volumes/VOLUME_ID/actions" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "attach",
    "droplet_id": DROPLET_ID
  }'

볼륨 나열

curl -X GET "https://api.digitalocean.com/v2/volumes" \
  -H "Authorization: Bearer YOUR_TOKEN"

네트워킹

유동 IP 나열

curl -X GET "https://api.digitalocean.com/v2/floating_ips" \
  -H "Authorization: Bearer YOUR_TOKEN"

유동 IP 할당

curl -X POST "https://api.digitalocean.com/v2/floating_ips" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "droplet_id": DROPLET_ID,
    "region": "nyc1"
  }'

방화벽 생성

curl -X POST "https://api.digitalocean.com/v2/firewalls" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "web-firewall",
    "inbound_rules": [
      {
        "protocol": "tcp",
        "ports": "80",
        "sources": {
          "addresses": ["0.0.0.0/0"]
        }
      },
      {
        "protocol": "tcp",
        "ports": "443",
        "sources": {
          "addresses": ["0.0.0.0/0"]
        }
      },
      {
        "protocol": "tcp",
        "ports": "22",
        "sources": {
          "addresses": ["your-ip/32"]
        }
      }
    ],
    "outbound_rules": [
      {
        "protocol": "tcp",
        "ports": "80",
        "destinations": {
          "addresses": ["0.0.0.0/0"]
        }
      }
    ],
    "droplet_ids": [DROPLET_ID]
  }'

로드 밸런서

로드 밸런서 생성

curl -X POST "https://api.digitalocean.com/v2/load_balancers" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-lb",
    "region": "nyc1",
    "algorithm": "round_robin",
    "health_check": {
      "protocol": "http",
      "port": 80,
      "path": "/",
      "check_interval_seconds": 10,
      "response_timeout_seconds": 5,
      "healthy_threshold": 3,
      "unhealthy_threshold": 3
    },
    "forwarding_rules": [
      {
        "entry_protocol": "http",
        "entry_port": 80,
        "target_protocol": "http",
        "target_port": 80
      },
      {
        "entry_protocol": "https",
        "entry_port": 443,
        "target_protocol": "https",
        "target_port": 443,
        "tls_passthrough": true
      }
    ],
    "droplet_ids": [DROPLET_ID_1, DROPLET_ID_2]
  }'

Kubernetes 클러스터

Kubernetes 클러스터 생성

curl -X POST "https://api.digitalocean.com/v2/kubernetes/clusters" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-cluster",
    "region": "nyc1",
    "version": "1.28",
    "node_pools": [
      {
        "name": "worker-pool",
        "size": "s-2vcpu-4gb",
        "count": 3,
        "auto_scale": true,
        "min_nodes": 2,
        "max_nodes": 6
      }
    ]
  }'

노드 풀 나열

curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools" \
  -H "Authorization: Bearer YOUR_TOKEN"

노드 풀 확장

curl -X PUT "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/node_pools/POOL_ID" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "count": 5
  }'

클러스터 삭제

curl -X DELETE "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"

Apidog로 테스트하기

인프라 프로비저닝은 비용이 많이 듭니다. 리소스를 생성하기 전에 철저히 테스트하세요.

Apidog를 사용하여 DigitalOcean API 테스트

1. 환경 설정

DIGITALOCEAN_TOKEN: your_token
BASE_URL: https://api.digitalocean.com/v2
DEFAULT_REGION: nyc1
DEFAULT_SIZE: s-2vcpu-4gb

2. 응답 유효성 검사

pm.test('Droplet created successfully', () => {
  const response = pm.response.json()
  pm.expect(response.droplet).to.have.property('id')
  pm.expect(response.droplet.status).to.eql('new')
})

pm.test('Token is valid', () => {
  const response = pm.response.json()
  pm.expect(response.account).to.exist
  pm.expect(response.account.status).to.eql('active')
})

3. 드라이 런 개념

DigitalOcean은 실제 드라이 런을 제공하지 않지만, 입력의 유효성을 검사할 수 있습니다:

const validRegions = ['nyc1', 'sfo3', 'ams3', 'sgp1']
const validSizes = ['s-1vcpu-1gb', 's-2vcpu-2gb', 's-2vcpu-4gb']

pm.test('Region is valid', () => {
  const requestBody = JSON.parse(pm.request.body.raw)
  pm.expect(validRegions).to.include(requestBody.region)
})

pm.test('Size is valid', () => {
  const requestBody = JSON.parse(pm.request.body.raw)
  pm.expect(validSizes).to.include(requestBody.size)
})

Apidog로 DigitalOcean 인프라 API를 테스트하세요 - 무료입니다.

일반적인 오류 및 수정

401 권한 없음

원인: 유효하지 않거나 만료된 토큰입니다.

해결책: 대시보드에서 토큰을 재생성하십시오. Authorization 헤더 형식을 확인하십시오.

422 처리할 수 없는 엔티티

원인: 유효하지 않은 매개변수(잘못된 지역, 크기, 이미지 등)입니다.

해결책: DigitalOcean의 API 문서를 확인하여 유효한 값을 확인하십시오. 일반적인 문제는 다음과 같습니다:

429 너무 많은 요청

원인: 요율 제한 초과(기본 시간당 2000개 요청).

해결책: 백오프를 구현하십시오:

async function doRequest(url, options, retries = 3) {
  for (let i = 0; i < retries; i++) {
    const response = await fetch(url, options)
    if (response.status === 429) {
      await sleep(Math.pow(2, i) * 1000)
      continue
    }
    return response
  }
  throw new Error('Rate limited')
}

드롭렛 제한에 도달함

원인: 계정에 너무 많은 드롭렛이 있습니다.

해결책: 사용하지 않는 드롭렛을 삭제하거나 지원팀에 제한 증가를 요청하십시오.

대안 및 비교

기능 DigitalOcean AWS GCP
드롭렛 크기 고정 사용자 정의 사용자 정의
Kubernetes 관리형 DOKS EKS GKE
객체 스토리지 Spaces S3 Cloud Storage
블록 스토리지 Volumes EBS Persistent Disk
로드 밸런서 내장 ELB Cloud Load Balancing
무료 티어 200달러 크레딧 제한적 300달러 크레딧
API 단순성 ★★★★★ ★★☆☆☆ ★★★☆☆

DigitalOcean은 단순성에서 우위를 차지합니다. API는 직관적이며, 대부분의 작업은 수십 개의 중첩된 서비스를 다룰 필요 없이 작동합니다.

실제 사용 사례

개발 환경. 스타트업은 브랜치별로 격리된 개발 환경을 만듭니다. 모든 PR은 최신 코드를 가진 드롭렛을 생성하기 위한 API 호출을 트리거합니다. 병합 후에는 드롭렛이 파괴됩니다. 개발자는 수동 설정 없이 프로덕션과 유사한 환경에서 테스트합니다.

자동 스케일링 웹 서버. 웹 애플리케이션이 로드를 모니터링합니다. CPU가 70%를 초과하면 API는 새로운 드롭렛을 생성하고 이를 로드 밸런서에 추가합니다. 로드가 감소하면 드롭렛이 파괴됩니다. 성능은 높게 유지하면서 비용은 낮게 유지됩니다.

데이터베이스 클러스터. 관리형 데이터베이스 서비스는 여러 지역에 걸쳐 프라이머리 및 복제본 볼륨을 프로비저닝합니다. API는 복제 구성, 백업 예약 및 페일오버 설정을 자동으로 처리합니다.

결론

다음 사항을 학습했습니다:

버튼

자주 묻는 질문 (FAQ)

드롭렛 비용은 얼마인가요?가격은 1 vCPU/1GB 기준 월 5달러부터 시작합니다. 현재 요금은 가격 페이지를 확인하십시오. 시간당 청구도 가능합니다.

API로 생성된 드롭렛에 SSH 키를 사용할 수 있나요?예. 드롭렛 생성 시 ssh_keys 배열에 SSH 키 지문을 포함하십시오.

볼륨과 Spaces의 차이점은 무엇인가요?볼륨은 드롭렛에 연결된 블록 스토리지입니다. Spaces는 객체 스토리지(S3와 유사)입니다. 데이터베이스에는 볼륨을, 파일에는 Spaces를 사용하십시오.

Kubernetes 구성을 어떻게 가져오나요?

curl -X GET "https://api.digitalocean.com/v2/kubernetes/clusters/CLUSTER_ID/kubeconfig" \
  -H "Authorization: Bearer YOUR_TOKEN"

드롭렛 크기를 조정할 수 있나요?예, 크기 조정 작업을 사용하십시오. 다운그레이드는 전원을 꺼야 합니다. 업그레이드는 실행 중에도 가능합니다.

백업과 스냅샷의 차이점은 무엇인가요?백업은 DigitalOcean에서 관리하는 자동 주간/일별 복사본입니다. 스냅샷은 사용자가 생성하는 수동 주문형 이미지입니다.

드롭렛 생성에는 얼마나 걸리나요?일반적으로 30-60초입니다. 일부 지역 및 크기는 더 오래 걸릴 수 있습니다.

DigitalOcean과 함께 Terraform을 사용할 수 있나요?예. DigitalOcean은 공식 Terraform 공급자를 제공합니다. 이는 코드형 인프라에 탁월합니다.

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요