{"id":2513,"date":"2023-11-15T18:46:51","date_gmt":"2023-11-15T09:46:51","guid":{"rendered":"https:\/\/manvscloud.com\/?p=2513"},"modified":"2023-11-16T22:06:49","modified_gmt":"2023-11-16T13:06:49","slug":"ncloud-object-storage-%ed%99%9c%ec%9a%a9-%ea%bf%80%ed%8c%81-1-%ed%8c%8c%ec%9d%bc-%eb%8b%a4%ec%9a%b4%eb%a1%9c%eb%93%9c-%ec%97%86%ec%9d%b4-%ec%a7%81%ec%a0%91-%ec%9d%bd%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/manvscloud.com\/?p=2513","title":{"rendered":"[NCLOUD] Object Storage \ud65c\uc6a9 \uafc0\ud301 #1 : \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc \uc5c6\uc774 \uc9c1\uc811 \uc77d\uae30"},"content":{"rendered":"\n<p>\uc548\ub155\ud558\uc138\uc694 MANVSCLOUD \uae40\uc218\ud604\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>Object Storage\ub294 \ub370\uc774\ud130 \uc800\uc7a5\uacfc \uad00\ub9ac\uc758 \ud6a8\uc728\uc131\uc744 \ub192\uc5ec\uc8fc\ub294 \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc\uc758 \uc911\uc694\ud55c \uc11c\ube44\uc2a4 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \ub9ce\uc740 \uc0ac\uc6a9\uc790\ub4e4\uc740 \uae30\uc874 \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc5d0 \uc775\uc219\ud558\uc5ec Object Storage\ub97c \ub2e4\uc591\ud558\uac8c \ud65c\uc6a9\ud558\uc9c0 \ubabb\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. Windows\uc5d0\uc11c\ub294 .txt \ud30c\uc77c\uc744 \uc77d\uace0 \uc2f6\uc744 \uacbd\uc6b0 .txt \ud30c\uc77c\uc744 \ub354\ube14 \ud074\ub9ad\ud558\uc5ec \uc2e4\ud589\ud558\uba74 \ub410\uace0 Linux\uc5d0\uc11c\ub294 cat\uc774\ub098 vi \ub4f1 \uba85\ub839\uc5b4\ub85c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc Object Storage\uc5d0 \uc800\uc7a5\ub41c .txt \ud30c\uc77c\uc758 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uae30 \uc704\ud574\uc11c \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc \uc6f9 \uc0ac\uc774\ud2b8\uc5d0 \uc811\uc18d\ud558\uc5ec \ub85c\uadf8\uc778\ud558\uace0 \ub2e4\uc6b4\ub85c\ub4dc \ud55c \ub4a4\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc\ub41c \ud30c\uc77c\uc744 \ud655\uc778\ud558\uac70\ub098 \ud574\ub2f9 Object\uc758 URL\uc744 \uc774\uc6a9\ud558\uc5ec \ub2e4\uc6b4\ub85c\ub4dc \ud55c \ub4a4\uc5d0 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. <\/p>\n\n\n\n<p>Object Storage\ub0b4\uc5d0 \uc788\ub294 .txt, .json, .xml \ub4f1 \ub2e4\uc591\ud55c \ud14d\uc2a4\ud2b8 \ud30c\uc77c\ub4e4\uc744 \ub2e4\uc6b4\ub85c\ub4dc\uc5c6\uc774 \ubc14\ub85c \ud655\uc778\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc740 \uc5c6\uc744\uae4c\uc694?<\/p>\n\n\n\n<p>\ub2f9\uc5f0\ud788 \uac00\ub2a5\ud569\ub2c8\ub2e4. <br>\uc624\ub298\uc740 Object Storage\uc5d0 \uc800\uc7a5\ub41c \ud14d\uc2a4\ud2b8 \ud30c\uc77c\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ud558\uc9c0 \uc54a\uace0 \ub0b4\uc6a9\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-white-color has-vivid-green-cyan-background-color has-text-color has-background\"> Object Storage : \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc \uc5c6\uc774 \ud14d\uc2a4\ud2b8 \ud30c\uc77c \uc77d\uae30<\/h3>\n\n\n\n<p>\uba3c\uc800 \uc774 \uacfc\uc815\uc5d0\uc11c\ub294 xml.etree.ElementTree as ET \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p><code>xml.etree.ElementTree<\/code>\ub294 Python \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc77c\ubd80\ub85c XML \ubb38\uc11c\ub97c \ud30c\uc2f1\ud558\uace0 \uc0dd\uc131\ud558\uae30 \uc704\ud55c \uac04\ub2e8\ud558\uace0 \ud6a8\uc728\uc801\uc778 API\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774 \ubaa8\ub4c8\uc740 XML \ub370\uc774\ud130\uc640 \uc0c1\ud638 \uc791\uc6a9\ud558\ub294 \ub370 \ud544\uc694\ud55c \uae30\ub2a5\uc744 \ud3ec\ud568\ud558\uba70 XML \ud30c\uc77c\uc744 \uc77d\uace0 \uc218\uc815\ud558\uace0 \uc0dd\uc131\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><code>xml.etree.ElementTree<\/code> \ubaa8\ub4c8\uc744 \uc774\uc6a9\ud558\uc5ec \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc\uc758 Object Storage\ub85c\ubd80\ud130 \ubc1b\uc740 XML \ud615\uc2dd\uc758 \uc751\ub2f5\uc744 \ud30c\uc2f1\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p> \uc774 \ubaa8\ub4c8\uc744 \uc774\uc6a9\ud558\uba74 \ud30c\uc77c\uc744 \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc5d0 \ub530\ub85c \uc800\uc7a5\ud558\uc9c0 \uc54a\uace0 \ud30c\uc77c\uc758 \ub0b4\uc6a9\uc744 \uba54\ubaa8\ub9ac \uc0c1\uc5d0\uc11c \uc9c1\uc811 \uc77d\uc5b4\ub4e4\uc774\uace0 \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import hashlib\nimport hmac\nimport datetime\nimport requests\nimport urllib.parse\nimport xml.etree.ElementTree as ET\n\n\ndef get_hash(key, msg):\n    return hmac.new(key, msg.encode('utf-8'), hashlib.sha256).digest()\n\ndef create_signed_headers(headers):\n    signed_headers = []\n\n    for k in sorted(headers):\n        signed_headers.append('%s;' % k)\n\n    return ''.join(signed_headers)[:-1]\n\ndef create_standardized_headers(headers):\n    signed_headers = []\n\n    for k in sorted(headers):\n        signed_headers.append('%s:%s\\n' % (k, headers[k]))\n\n    return ''.join(signed_headers)\n\ndef create_standardized_query_parameters(request_parameters):\n    standardized_query_parameters = []\n\n    if request_parameters:\n        for k in sorted(request_parameters):\n            standardized_query_parameters.append('%s=%s' % (k, urllib.parse.quote(request_parameters[k], safe='')))\n\n        return '&amp;'.join(standardized_query_parameters)\n    else:\n        return ''\n\nclass ObjectStorageSample:\n    def __init__(self):\n        self.region = 'kr-standard'\n        self.endpoint = 'https:\/\/kr.object.ncloudstorage.com'\n        self.host = 'kr.object.ncloudstorage.com'\n        self.access_key = '[ACCESS_KEY_ID]'\n        self.secret_key = '[SECRET_KEY]'\n\n        self.payload_hash = 'UNSIGNED-PAYLOAD'\n        self.hashing_algorithm = 'AWS4-HMAC-SHA256'\n        self.service_name = 's3'\n        self.request_type = 'aws4_request'\n\n        self.time_format = '%Y%m%dT%H%M%SZ'\n        self.date_format = '%Y%m%d'\n\n    def _create_credential_scope(self, date_stamp):\n        return date_stamp + '\/' + self.region + '\/' + self.service_name + '\/' + self.request_type\n\n    def _create_canonical_request(self, http_method, request_path, request_parameters, headers):\n        standardized_query_parameters = create_standardized_query_parameters(request_parameters)\n        standardized_headers = create_standardized_headers(headers)\n        signed_headers = create_signed_headers(headers)\n\n        canonical_request = (http_method + '\\n' +\n                             request_path + '\\n' +\n                             standardized_query_parameters + '\\n' +\n                             standardized_headers + '\\n' +\n                             signed_headers + '\\n' +\n                             self.payload_hash)\n\n        return canonical_request\n\n    def _create_string_to_sign(self, time_stamp, credential_scope, canonical_request):\n        string_to_sign = (self.hashing_algorithm + '\\n' +\n                          time_stamp + '\\n' +\n                          credential_scope + '\\n' +\n                          hashlib.sha256(canonical_request.encode('utf-8')).hexdigest())\n\n        return string_to_sign\n\n    def _create_signature_key(self, date_stamp):\n        key_date = get_hash(('AWS4' + self.secret_key).encode('utf-8'), date_stamp)\n        key_string = get_hash(key_date, self.region)\n        key_service = get_hash(key_string, self.service_name)\n        key_signing = get_hash(key_service, self.request_type)\n        return key_signing\n\n    def _create_authorization_header(self, headers, signature_key, string_to_sign, credential_scope):\n        signed_headers = create_signed_headers(headers)\n        signature = hmac.new(signature_key, string_to_sign.encode('utf-8'), hashlib.sha256).hexdigest()\n\n        return (self.hashing_algorithm + ' ' +\n                'Credential=' + self.access_key + '\/' + credential_scope + ', ' +\n                'SignedHeaders=' + signed_headers + ', ' +\n                'Signature=' + signature)\n\n    def _sign(self, http_method, request_path, headers, time, request_parameters=None):\n        time_stamp = time.strftime(self.time_format)\n        date_stamp = time.strftime(self.date_format)\n\n        credential_scope = self._create_credential_scope(date_stamp)\n        canonical_request = self._create_canonical_request(http_method, request_path, request_parameters, headers)\n        string_to_sign = self._create_string_to_sign(time_stamp, credential_scope, canonical_request)\n        signature_key = self._create_signature_key(date_stamp)\n\n        headers['authorization'] = self._create_authorization_header(headers, signature_key, string_to_sign, credential_scope)\n\n\n    def list_objects(self, bucket_name, request_parameters=None):\n        http_method = 'GET'\n\n        time = datetime.datetime.utcnow()\n        time_stamp = time.strftime(self.time_format)\n\n        headers = {'x-amz-date': time_stamp,\n                   'x-amz-content-sha256': self.payload_hash,\n                   'host': self.host}\n\n        request_path = '\/%s' % bucket_name\n\n        self._sign(http_method, request_path, headers, time, request_parameters)\n        request_url = self.endpoint + request_path\n        r = requests.get(request_url, headers=headers, params=request_parameters)\n\n        if r.status_code == 200:\n            root = ET.fromstring(r.content)\n            objects = []\n\n            for content in root.findall('{http:\/\/s3.amazonaws.com\/doc\/2006-03-01\/}Contents'):\n                key = content.find('{http:\/\/s3.amazonaws.com\/doc\/2006-03-01\/}Key').text\n                if key.endswith('.txt'): \n                    last_modified = content.find('{http:\/\/s3.amazonaws.com\/doc\/2006-03-01\/}LastModified').text\n                    objects.append({'Key': key, 'LastModified': last_modified})\n\n            objects.sort(key=lambda x: x['LastModified'], reverse=True)\n            return objects\n        else:\n            return []\n\n    def read_txt_object(self, bucket_name, object_name): \n        http_method = 'GET'\n\n        time = datetime.datetime.utcnow()\n        time_stamp = time.strftime(self.time_format)\n\n        headers = {'x-amz-date': time_stamp,\n                   'x-amz-content-sha256': self.payload_hash,\n                   'host': self.host}\n\n        request_path = '\/%s\/%s' % (bucket_name, object_name)\n\n        self._sign(http_method, request_path, headers, time)\n        request_url = self.endpoint + request_path\n        r = requests.get(request_url, headers=headers)\n\n        if r.status_code == 200:\n            return r.content.decode('utf-8')\n\n\nif __name__ == '__main__':\n    sample = ObjectStorageSample()\n    objects = sample.list_objects('[BUCKET_NAME]', {'max-keys': '10'})\n\n    if objects:\n        most_recent_object = objects[0]  # \uac00\uc7a5 \ucd5c\uc2e0\uc758 .txt \ud30c\uc77c\n        recent_text = sample.read_txt_object('[BUCKET_NAME]', most_recent_object['Key'])\n\n        print(recent_text)<\/pre>\n\n\n\n<p>\uc704 \ucf54\ub4dc\ub294 \ud2b9\uc815 Object Storage \ubc84\ud0b7\uc5d0\uc11c \uac00\uc7a5 \ucd5c\uc2e0\uc758 .txt \ud30c\uc77c\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ud558\uc9c0 \uc54a\uace0 \ub0b4\uc6a9\uc744 \ucd9c\ub825\ud560 \uc218 \uc788\ub294 \ucf54\ub4dc\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ucf54\ub4dc\uc5d0 \ud3ec\ud568\ub41c [ACCESS_KEY_ID], [SECRET_KEY], [BUCKET_NAME]\ub294 \uac01 \ud56d\ubaa9\uc5d0 \ub9de\uac8c \uc218\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<ul>\n<li>[ACCESS_KEY_ID] : Object Storage\uc5d0 \ub300\ud55c \uad8c\ud55c\uc744 \ubcf4\uc720\ud55c Sub Account\uc758 Access Key<\/li>\n\n\n\n<li>[SECRET_KEY] : Object Storage\uc5d0 \ub300\ud55c \uad8c\ud55c\uc744 \ubcf4\uc720\ud55c Sub Account\uc758 Secret Key<\/li>\n\n\n\n<li>[BUCKET_NAME] : \ud14d\uc2a4\ud2b8 \ud30c\uc77c\uc774 \uc800\uc7a5\ub41c Object Storage\uc758 Bucket Name<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"680\" height=\"261\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/11\/15183215\/image-6.png\" alt=\"\" class=\"wp-image-2518\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/11\/15183215\/image-6.png 680w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/11\/15183215\/image-6-300x115.png 300w\" sizes=\"(max-width: 680px) 100vw, 680px\" \/><\/figure>\n\n\n\n<p>\uc704\uc640 \uac19\uc774 .txt \ud30c\uc77c\uc774 Object Storage \ubc84\ud0b7\uc5d0 \uc5c5\ub85c\ub4dc \ub418\uc5b4\uc788\ub294 \uacbd\uc6b0 Object Storage API\ub97c \uc774\uc6a9\ud558\uc5ec \ud574\ub2f9 \ud30c\uc77c\uc744 \ucc3e\uc544 \uc77d\uc744 \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc2e4\ud589 \uacb0\uacfc \uc544\ub798\uc640 \uac19\uc774 .txt \ud30c\uc77c\uc758 \ub0b4\uc6a9\uc774 \uc798 \ucd9c\ub825\ub418\ub294 \uac83\uae4c\uc9c0 \ud655\uc778\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"540\" height=\"50\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/11\/15183327\/image-7.png\" alt=\"\" class=\"wp-image-2519\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/11\/15183327\/image-7.png 540w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2023\/11\/15183327\/image-7-300x28.png 300w\" sizes=\"(max-width: 540px) 100vw, 540px\" \/><\/figure>\n\n\n\n<p>\uc6b0\ub9ac\ub294 \uc774\ub7ec\ud55c \ubc29\ubc95\uc744 \ud1b5\ud574 Object Storage\uc5d0 \uc800\uc7a5\ub41c \ud30c\uc77c\uc744 \ub2e4\uc6b4\ub85c\ub4dc\uc5c6\uc774\ub3c4 \ub0b4\uc6a9\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. .txt \ud30c\uc77c \uc678 .json \ud30c\uc77c \uc5ed\uc2dc \ub3d9\uc77c\ud558\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc73c\uba70 json \ubaa8\ub4c8\uc744 \uc774\uc6a9\ud558\uc5ec \ud30c\uc2f1 \ud6c4 \uc6d0\ud558\ub294 \uac12\ub9cc \uac00\uc838\uc62c \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading has-white-color has-cyan-bluish-gray-background-color has-text-color has-background\"> Personal Comments<\/h3>\n\n\n\n<p>\uc774 \uae00\uc744 \ud1b5\ud574 \uc6b0\ub9ac\ub294 Object Storage\uc5d0\uc11c \ud30c\uc77c\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ud558\uc9c0 \uc54a\uace0 \uc9c1\uc811 \uc77d\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc774 \uacfc\uc815\uc740 \uc791\uc5c5 \uc2dc\uac04\uc744 \ub2e8\ucd95\uc2dc\ud0a4\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c \uc774\ub7ec\ud55c \ubc29\ubc95\uc744 \ud1b5\ud574 \ub2e4\uc591\ud55c Object Storage \uc0ac\uc6a9 \ubc29\ubc95\uc744 \uc0dd\uac01\ud574\ubcfc \uc218\ub3c4 \uc788\uc744 \uac83\uc785\ub2c8\ub2e4. <\/p>\n\n\n\n<p>\uae34 \uae00 \uc77d\uc5b4\uc8fc\uc154\uc11c \uac10\uc0ac\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"137\" src=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/10202040\/ncloud-master.png\" alt=\"\" class=\"wp-image-1221\" srcset=\"https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/10202040\/ncloud-master.png 800w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/10202040\/ncloud-master-300x51.png 300w, https:\/\/cdn.manvscloud.com\/wp-content\/uploads\/2021\/08\/10202040\/ncloud-master-768x132.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\uc548\ub155\ud558\uc138\uc694 MANVSCLOUD \uae40\uc218\ud604\uc785\ub2c8\ub2e4. Object Storage\ub294 \ub370\uc774\ud130 \uc800\uc7a5\uacfc \uad00\ub9ac\uc758 \ud6a8\uc728\uc131\uc744 \ub192\uc5ec\uc8fc\ub294 \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc\uc758 \uc911\uc694\ud55c \uc11c\ube44\uc2a4 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \ub9ce\uc740 \uc0ac\uc6a9\uc790\ub4e4\uc740 \uae30\uc874 \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc5d0 \uc775\uc219\ud558\uc5ec Object Storage\ub97c \ub2e4\uc591\ud558\uac8c \ud65c\uc6a9\ud558\uc9c0 \ubabb\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. Windows\uc5d0\uc11c\ub294 .txt \ud30c\uc77c\uc744 \uc77d\uace0 \uc2f6\uc744 \uacbd\uc6b0 .txt \ud30c\uc77c\uc744 \ub354\ube14 \ud074\ub9ad\ud558\uc5ec \uc2e4\ud589\ud558\uba74 \ub410\uace0 Linux\uc5d0\uc11c\ub294 cat\uc774\ub098 vi \ub4f1 \uba85\ub839\uc5b4\ub85c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc Object Storage\uc5d0 \uc800\uc7a5\ub41c .txt \ud30c\uc77c\uc758 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uae30 \uc704\ud574\uc11c \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc \uc6f9 \uc0ac\uc774\ud2b8\uc5d0 \uc811\uc18d\ud558\uc5ec \ub85c\uadf8\uc778\ud558\uace0 \ub2e4\uc6b4\ub85c\ub4dc \ud55c \ub4a4\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc\ub41c \ud30c\uc77c\uc744 \ud655\uc778\ud558\uac70\ub098 \ud574\ub2f9 Object\uc758 URL\uc744 \uc774\uc6a9\ud558\uc5ec \ub2e4\uc6b4\ub85c\ub4dc \ud55c \ub4a4\uc5d0 \ub0b4\uc6a9\uc744 \ud655\uc778\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. Object Storage\ub0b4\uc5d0 \uc788\ub294 .txt, .json, .xml \ub4f1 \ub2e4\uc591\ud55c \ud14d\uc2a4\ud2b8 \ud30c\uc77c\ub4e4\uc744 \ub2e4\uc6b4\ub85c\ub4dc\uc5c6\uc774 \ubc14\ub85c \ud655\uc778\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc740 \uc5c6\uc744\uae4c\uc694? \ub2f9\uc5f0\ud788 \uac00\ub2a5\ud569\ub2c8\ub2e4. \uc624\ub298\uc740 Object Storage\uc5d0 \uc800\uc7a5\ub41c \ud14d\uc2a4\ud2b8 \ud30c\uc77c\uc744 \ub2e4\uc6b4\ub85c\ub4dc \ud558\uc9c0 \uc54a\uace0 \ub0b4\uc6a9\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\ub3c4\ub85d \ud558\uaca0\uc2b5\ub2c8\ub2e4. Object Storage : \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc \uc5c6\uc774 \ud14d\uc2a4\ud2b8 \ud30c\uc77c \uc77d\uae30 \uba3c\uc800 \uc774 \uacfc\uc815\uc5d0\uc11c\ub294 xml.etree.ElementTree as ET \ubaa8\ub4c8\uc744 \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4. xml.etree.ElementTree\ub294 Python \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc77c\ubd80\ub85c XML \ubb38\uc11c\ub97c \ud30c\uc2f1\ud558\uace0 \uc0dd\uc131\ud558\uae30 \uc704\ud55c \uac04\ub2e8\ud558\uace0 \ud6a8\uc728\uc801\uc778 API\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774 \ubaa8\ub4c8\uc740 XML \ub370\uc774\ud130\uc640 \uc0c1\ud638 \uc791\uc6a9\ud558\ub294 \ub370 \ud544\uc694\ud55c \uae30\ub2a5\uc744 \ud3ec\ud568\ud558\uba70 XML \ud30c\uc77c\uc744 \uc77d\uace0 \uc218\uc815\ud558\uace0 \uc0dd\uc131\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. xml.etree.ElementTree \ubaa8\ub4c8\uc744 \uc774\uc6a9\ud558\uc5ec \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc\uc758 Object Storage\ub85c\ubd80\ud130 \ubc1b\uc740 XML \ud615\uc2dd\uc758 \uc751\ub2f5\uc744 \ud30c\uc2f1\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4. \uc774 \ubaa8\ub4c8\uc744 \uc774\uc6a9\ud558\uba74 \ud30c\uc77c\uc744 \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc5d0 \ub530\ub85c \uc800\uc7a5\ud558\uc9c0 \uc54a\uace0 \ud30c\uc77c\uc758 \ub0b4\uc6a9\uc744 \uba54\ubaa8\ub9ac \uc0c1\uc5d0\uc11c \uc9c1\uc811 \uc77d\uc5b4\ub4e4\uc774\uace0 \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc704 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"Object Storage\ub294 \ub370\uc774\ud130 \uc800\uc7a5\uacfc \uad00\ub9ac\uc758 \ud6a8\uc728\uc131\uc744 \ub192\uc5ec\uc8fc\ub294 \ub124\uc774\ubc84 \ud074\ub77c\uc6b0\ub4dc\uc758 \uc911\uc694\ud55c \uc11c\ube44\uc2a4 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4. \ub9ce\uc740 \uc0ac\uc6a9\uc790\ub4e4\uc740 \uae30\uc874 \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc5d0 \uc775\uc219\ud558\uc5ec Object Storage\ub97c \ub2e4\uc591\ud558\uac8c \ud65c\uc6a9\ud558\uc9c0 \ubabb\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.","jetpack_seo_html_title":"[NCLOUD] Object Storage \ud65c\uc6a9 \uafc0\ud301 #1 : \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc \uc5c6\uc774 \uc9c1\uc811 \uc77d\uae30","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[249,32,87,91,17,90,16,354,126,148,89,202,398],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2513"}],"collection":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2513"}],"version-history":[{"count":4,"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2513\/revisions"}],"predecessor-version":[{"id":2520,"href":"https:\/\/manvscloud.com\/index.php?rest_route=\/wp\/v2\/posts\/2513\/revisions\/2520"}],"wp:attachment":[{"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manvscloud.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}