최신 업데이트:2025-08-28 13:55:16
Object Storage Usage Query API는 상세한 사용량 및 청구 데이터를 프로그래밍 방식으로 조회할 수 있는 기능을 제공합니다. 파트너 및 리셀러가 하위 계정 또는 개별 버킷 단위로 소비 모니터링을 자동화하는 데 도움을 주기 위해 설계되었습니다.
API는 다양한 사용 메트릭을 조회할 수 있습니다. 주요 항목은 다음과 같습니다:
모든 요청은 POST 메서드를 사용하여 프로덕션 엔드포인트로 전송해야 합니다.
POSThttps://wos.cdnetworks.com/api/usage/statistics참고: 프로덕션 환경에서는 HTTPS가 필요합니다. HTTP를 통한 요청은 리디렉션될 수 있으며, 실패할 수 있습니다.
apikey를 생성하고, 백엔드 구성을 위해 지원팀에 제공해 주세요.Date 및 Authorization 헤더 값을 구성하세요.POST 요청을 전송하세요.API는 커스텀 HMAC-SHA256 인증 방식을 사용합니다. 모든 API 요청에는 Date 및 Authorization 헤더가 포함되어야 합니다.
API를 사용하려면 username과 apikey가 필요합니다. apikey는 사용자가 직접 생성하는 비밀 키입니다. API 접근을 활성화하려면 해당 키를 지원팀에 제공하여 백엔드 설정을 완료해야 합니다.
Thu, 21 Jul 2025 07:54:00 GMT). 이 문자열은 Date 헤더에 사용됩니다.apikey를 키로, Date 문자열을 메시지로 하여 HMAC-SHA256 서명을 생성합니다. 결과는 Base64로 인코딩해야 합니다.
password = Base64(HMAC-SHA256(UTF-8(apikey), UTF-8(Date)))username:password 형식의 문자열을 생성합니다.username:password 문자열을 Base64로 인코딩합니다.Basic 문자열 다음에 이전 단계에서 Base64로 인코딩된 문자열을 붙인 값입니다.
Authorization: Basic <Base64(username:password)>API는 메트릭 유형에 따라 특정 단위의 사용량 데이터를 반환합니다:
storageSize): 메가바이트(MB) 단위로 반환되며, **2진법(base-1024)**으로 계산됩니다. 1MB = 1024KB입니다.outTraffic, innerBandwidth 등): 메가바이트(MB) 및 메가비트/초(Mbps) 단위로 각각 반환되며, **10진법(base-1000)**으로 계산됩니다.| 헤더 | 필수 여부 | 설명 |
|---|---|---|
Authorization |
예 | 위에서 설명한 절차를 통해 생성된 인증 토큰입니다. |
Date |
예 | RFC1123 형식(예: Thu, 21 Jul 2025 07:54:00 GMT)의 현재 시간입니다. |
Content-Type |
예 | 반드시 application/json으로 설정해야 합니다. |
| 파라미터 | 필수 여부 | 설명 |
|---|---|---|
startDate |
예 | 조회 기간의 시작 날짜입니다. 형식: YYYY-MM-DD. |
endDate |
예 | 조회 기간의 종료 날짜입니다. 형식: YYYY-MM-DD. |
statisticsType |
예 | 조회할 사용량 데이터의 유형입니다. 유효한 옵션은 아래 “통계 유형” 섹션을 참조하십시오. |
storageRegion |
아니오 | 저장소 리전의 쉼표로 구분된 목록(예: CN,US,SG). 생략 시 모든 리전의 데이터가 반환됩니다. |
storageType |
아니요 | 스토리지 클래스입니다. 사용 가능한 옵션: Standard, InfrequentAccess, Archive. 한 번에 하나의 유형만 지정할 수 있습니다. |
bucket |
아니요 | comma(쉼표)로 구분된 버킷 이름 목록입니다. 생략할 경우, 접근 가능한 모든 버킷의 데이터를 반환합니다. |
isGroupByBucket |
아니요 | 사용량 데이터를 버킷별로 구분하려면 1로 설정합니다. 생략하거나 0으로 설정하면 전체 합계로 요약됩니다. |
groupBy |
아니요 | 데이터의 시간 단위입니다. 옵션: day(기본값) 또는 hour.• day: 하루마다 하나의 값을 반환합니다. storageSize의 경우 일일 peak value입니다. 트래픽 및 요청의 경우 일일 누적 합계입니다.• hour: 모든 지표 유형에 대해 시간별 세부 정보를 반환합니다. |
timeZone |
아니요 | 쿼리의 시간대를 지정합니다. • 지원 값: GMT-12부터 GMT+12까지 (예: GMT+8, GMT-5).• 기본값: GMT+8.• 참고: 응답 데이터는 지정된 시간대를 기준으로 계산됩니다. 유효하지 않은 값은 400 오류를 반환합니다. |
bandwidthAlgorithm |
아니요 | 대역폭 산출 방식을 지정합니다. 이 파라미터는 statisticsType이 innerBandwidth 또는 outBandwidth일 때만 적용됩니다. 사용 가능한 옵션:• ninetyFivePeak (기본값): 95th percentile peak.• avgPeak: 일별 peak value의 평균.• fourthPeak: 네 번째로 높은 peak value.• firstPeak: 가장 높은 peak value. |
statisticsType)| 카테고리 | statisticsType 값 | 설명 |
|---|---|---|
| 스토리지 & 요청 | storageSize |
버킷에 저장된 데이터 용량(스토리지 클래스별: Standard, Infrequent Access, Archive). 데이터는 매시간 업데이트됩니다. 참고: 저장 용량은 1024 진수(1 TB = 1024 GB)로 계산됩니다. |
numberOfRequests |
API 요청 횟수. 읽기 요청(GET, HEAD), 쓰기 요청(POST, PUT, DELETE)을 포함하며, 쓰기 요청에는 라이프사이클 삭제, 스토리지 클래스 전환 등의 작업도 포함됩니다. 성공 및 실패 요청 모두 카운트합니다. |
|
| 데이터 조회 & 삭제 | infrequentAccessRestore |
Infrequent Access 스토리지의 파일을 조회할 때 발생하는 데이터 조회 트래픽 양. |
infrequentDelete |
Infrequent Access 스토리지에서 30일 최소 보관 기간 이전에 삭제된 데이터 용량. | |
archiveRestore |
Archive 스토리지의 파일을 복원(언프로즌)한 후 발생하는 데이터 조회 트래픽 양. | |
archiveDelete |
Archive 스토리지에서 60일 최소 보관 기간 이전에 삭제된 데이터 용량. | |
| 트래픽 & 대역폭 | innerTraffic |
CDNetworks CDN 상품(예: 콘텐츠 가속, 미디어 가속)이 Object Storage를 Origin으로 사용할 때 발생하는 CDN Origin 트래픽. 트래픽은 1000 진수(1 TB = 1000 GB)로 계산됩니다. |
outTraffic |
Object Storage에서 퍼블릭 인터넷으로 데이터를 다운로드할 때 발생하는 아웃바운드 트래픽. 트래픽은 1000 진수(1 TB = 1000 GB)로 계산됩니다. | |
innerBandwidth |
CDN Origin 대역폭. 반환 값은 요청 시 지정된 bandwidthAlgorithm에 따라 다르며, 기본값은 95번째 퍼센타일 피크입니다. |
|
outBandwidth |
공용 인터넷으로의 egress bandwidth입니다. 반환 값은 요청에 지정된 bandwidthAlgorithm에 따라 달라집니다. 기본값은 95th percentile peak입니다. |
|
crossRegionTraffic |
교차 지역 복제로 인해 소스 버킷에서 생성된 egress 트래픽입니다. 트래픽은 1000 단위(1 TB = 1000 GB)로 계산됩니다. | |
| 작업 | fileOpNumber |
수행된 파일 작업의 총 개수입니다. |
이 요청은 미국(US) 및 싱가포르(SG) 지역의 표준 스토리지에 대한 일일 총 peak value 용량을 조회합니다.
요청:
curl -X POST \
https://wos.cdnetworks.com/api/usage/statistics \
-H 'Authorization: Basic YOUR_AUTH_STRING' \
-H 'Date: Thu, 21 Jul 2025 07:54:00 GMT' \
-H 'Content-Type: application/json' \
-d '{
"startDate": "2025-07-10",
"endDate": "2025-07-11",
"storageRegion": "US,SG",
"storageType": "Standard",
"statisticsType": "storageSize"
}'
응답:
{
"code": "200",
"message": "OK",
"statisticsType": "storageSize",
"data": [
{
"dataTime": "2025-07-10",
"storage": "5120"
},
{
"dataTime": "2025-07-11",
"storage": "5180"
}
]
}
참고: storage 값은 일일 peak value(MB 기준)를 나타냅니다.
이 요청은 버킷별로 구분된 일일 읽기 및 쓰기 요청 수를 조회합니다.
요청:
curl -X POST \
https://wos.cdnetworks.com/api/usage/statistics \
-H 'Authorization: Basic YOUR_AUTH_STRING' \
-H 'Date: Thu, 21 Jul 2025 07:54:00 GMT' \
-H 'Content-Type: application/json' \
-d '{
"startDate": "2025-07-10",
"endDate": "2025-07-11",
"statisticsType": "numberOfRequests",
"isGroupByBucket": "1"
}'
응답:
{
"code": "200",
"message": "OK",
"statisticsType": "numberOfRequests",
"data": [
{
"dataTime": "2025-07-10",
"readRequests": {
"bucket1": "15000",
"bucket2": "25000"
},
"writeRequests": {
"bucket1": "3000",
"bucket2": "5000"
}
},
{
"dataTime": "2025-07-11",
"readRequests": {
"bucket1": "16500",
"bucket2": "27500"
},
"writeRequests": {
"bucket1": "3200",
"bucket2": "5300"
}
}
]
}
| 상태 코드 | 오류 메시지 | 사유 |
|---|---|---|
| 400 | 헤더의 Date가 잘못되었습니다 |
Date 헤더가 누락되어 있거나 형식이 잘못되었습니다. |
| 400 | StartDate 잘못됨, 올바른 형식은 YYYY-MM-DD입니다 |
startDate 파라미터의 형식이 올바르지 않습니다. |
| 400 | StatisticsType 잘못됨 |
statisticsType 값이 허용된 옵션이 아닙니다. |
| 401 | Authorization 잘못됨 |
Authorization 헤더가 누락되었거나, 형식이 잘못되었거나, 값이 올바르지 않습니다. |
| 403 | StartDate가 EndDate보다 클 수 없습니다 |
startDate가 endDate보다 늦습니다. |
| 404 | Bucket xx을(를) 찾을 수 없음 |
지정된 버킷이 존재하지 않습니다. |
import datetime
import hmac
import base64
import requests
import json
from hashlib import sha256
class UsageApiDemo:
def get_gmt_date(self):
"""현재 시간을 RFC1123 형식으로 생성합니다."""
gmt_format = '%a, %d %b %Y %H:%M:%S GMT'
return datetime.datetime.utcnow().strftime(gmt_format)
def get_auth_string(self, username, apikey, date_str):
"""전체 'Authorization' 헤더 값을 생성합니다."""
# 1단계: HMAC-SHA256 서명을 생성합니다.
signature = hmac.new(apikey.encode('utf-8'), date_str.encode('utf-8'), sha256).digest()
# 2단계: 서명을 Base64 인코딩하여 'password'를 생성합니다.
password = base64.b64encode(signature).decode('utf-8')
# 3단계: 'username:password' 문자열을 생성하고 Base64로 인코딩합니다.
combined_str = f"{username}:{password}"
encoded_auth_str = base64.b64encode(combined_str.encode('utf-8')).decode('utf-8')
# 4단계: 최종 헤더 값을 생성하기 위해 'Basic '을 앞에 추가합니다.
return f"Basic {encoded_auth_str}"
def send_request(self, url, headers, body_params):
"""API에 POST 요청을 전송하고 응답을 출력합니다."""
try:
response = requests.post(url, data=json.dumps(body_params), headers=headers)
response.raise_for_status() # 잘못된 상태 코드에 대한 예외를 발생시킵니다
print(f"상태 코드: {response.status_code}")
print("응답 본문:")
print(json.dumps(response.json(), indent=4))
except requests.exceptions.RequestException as e:
print(f"오류가 발생하였습니다: {e}")
if __name__ == '__main__':
# --- 사용자 환경설정 ---
USERNAME = 'your_username'
APIKEY = 'your_apikey'
API_HOST = 'https://wos.cdnetworks.com'
API_URI = '/api/usage/statistics'
# --- 요청 구성 ---
api_demo = UsageApiDemo()
# 1. 날짜 가져오기
date_header = api_demo.get_gmt_date()
# 2. 인증 정보 가져오기
auth_header = api_demo.get_auth_string(USERNAME, APIKEY, date_header)
# 3. 헤더 정의
request_headers = {
'Date': date_header,
'Authorization': auth_header,
'Content-Type': 'application/json'
}
# 4. 본문 정의
request_body = {
"startDate": "2025-04-01",
"endDate": "2025-04-02",
"statisticsType": "storageSize",
"storageType": "Standard"
}
# 5. 요청 보내기
full_url = API_HOST + API_URI
api_demo.send_request(full_url, request_headers, request_body)