Usage Query API

최신 업데이트:2025-08-28 13:55:16

Object Storage Usage Query API는 상세한 사용량 및 청구 데이터를 프로그래밍 방식으로 조회할 수 있는 기능을 제공합니다. 파트너 및 리셀러가 하위 계정 또는 개별 버킷 단위로 소비 모니터링을 자동화하는 데 도움을 주기 위해 설계되었습니다.

개요

API는 다양한 사용 메트릭을 조회할 수 있습니다. 주요 항목은 다음과 같습니다:

  • 스토리지 사용량: Standard, Infrequent Access, 및 Archive 스토리지 클래스.
  • 요청 수: 읽기 및 쓰기 요청.
  • 데이터 조회: Infrequent Access 및 Archive 티어의 Traffic.
  • Traffic 및 Bandwidth: CDN Origin Traffic, Egress Traffic, 및 Cross-Region Replication Traffic.
  • 파일 작업: 파일 작업의 총 횟수.

엔드포인트 세부정보

모든 요청은 POST 메서드를 사용하여 프로덕션 엔드포인트로 전송해야 합니다.

  • 메서드: POST
  • 프로덕션 URL: https://wos.cdnetworks.com/api/usage/statistics

참고: 프로덕션 환경에서는 HTTPS가 필요합니다. HTTP를 통한 요청은 리디렉션될 수 있으며, 실패할 수 있습니다.

API 요청 흐름

  1. 사전 조건: 비밀 apikey를 생성하고, 백엔드 구성을 위해 지원팀에 제공해 주세요.
  2. 인증: 요청에 필요한 DateAuthorization 헤더 값을 구성하세요.
  3. 요청: 원하는 쿼리 파라미터로 JSON 요청 본문을 생성하세요.
  4. 실행: 실제 환경 Endpoint로 POST 요청을 전송하세요.
  5. 응답: JSON 응답을 파싱하여 사용량 데이터를 확인하세요.

인증

API는 커스텀 HMAC-SHA256 인증 방식을 사용합니다. 모든 API 요청에는 DateAuthorization 헤더가 포함되어야 합니다.

API를 사용하려면 usernameapikey가 필요합니다. apikey는 사용자가 직접 생성하는 비밀 키입니다. API 접근을 활성화하려면 해당 키를 지원팀에 제공하여 백엔드 설정을 완료해야 합니다.

인증 절차

  1. 현재 시간 확인: 현재 시간을 RFC1123 규격에 맞게 포맷합니다(예: Thu, 21 Jul 2025 07:54:00 GMT). 이 문자열은 Date 헤더에 사용됩니다.
  2. 서명 계산: apikey를 키로, Date 문자열을 메시지로 하여 HMAC-SHA256 서명을 생성합니다. 결과는 Base64로 인코딩해야 합니다.
    • 공식: password = Base64(HMAC-SHA256(UTF-8(apikey), UTF-8(Date)))
  3. Authorization 문자열 생성:
    • username:password 형식의 문자열을 생성합니다.
    • 전체 username:password 문자열을 Base64로 인코딩합니다.
  4. Authorization 헤더 설정: 최종 헤더 값은 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 아니요 대역폭 산출 방식을 지정합니다. 이 파라미터는 statisticsTypeinnerBandwidth 또는 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 수행된 파일 작업의 총 개수입니다.

사용 예시

예시 1: 저장소 사용량 요약 조회

이 요청은 미국(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 기준)를 나타냅니다.

예시 2: 버킷별 요청 수 조회

이 요청은 버킷별로 구분된 일일 읽기 및 쓰기 요청 수를 조회합니다.

요청:

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보다 클 수 없습니다 startDateendDate보다 늦습니다.
404 Bucket xx을(를) 찾을 수 없음 지정된 버킷이 존재하지 않습니다.

Python 코드 예제

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)


이 문서의 내용이 도움이 되었습니까?
아니오
정상적으로 제출되었습니다.피드백을 주셔서 감사합니다.앞으로도 개선을 위해 노력하겠습니다.