Object Storage를 PHP로 조작하기

NAVER CLOUD PLATFORM
NAVER CLOUD PLATFORM
8 min readJul 11, 2019

안녕하세요, 네이버 클라우드 플랫폼입니다.

Object Storage는 CLI와 3rd Party Tool, 그리고 API를 이용한 조작이 가능합니다. API는 각 개발 언어별로 SDK를 통해 지원하고 있습니다. 그런데 Object Storage 사용자 가이드를 보면 현재 다음과 같이 Java, Python, Javascript만 지원하고 있습니다.

PHP는 페이스북을 비롯한 미디어 위키, 워드프레스, 제로보드 등 대형 사이트뿐만 아니라 국내에서도 수많은 사이트가 PHP로 개발되고 있고 많은 개발자들이 PHP를 애용하고 있습니다.

오늘은 PHP를 이용하여 Object Storage를 조작하기 위한 기초적인 설정과 기본 구문을 소개해 드리고자 합니다. SDK는 PHP 용 AWS SDK를 이용할 것인데 네이버 클라우드 플랫폼의 Object Storage는 AWS의 S3와 호환이 되기 때문에 AWS PHP SDK를 이용하여 조작해 보겠습니다.

(1) PHP SDK 설치​

의존성을 관리하고 설치해주는 Composer를 통해 PHP SDK를 설치해 보겠습니다. PHP SDK 설치 버전의 경우, PHP SDK 버전 2이며, 해당 버전을 기준으로 설명합니다.

기본적으로 PHP는 설치되어 있어야 하고 다음 사이트의 내용과 같이 Windows 버전은 Composer-Serup.exe를 다운로드 받아서 실행하여야 하고 Linux의 경우 명령줄에서 명령어를 실행하여야 합니다.​

https://getcomposer.org/download/에서 Composer를 설치합니다.

리눅스를 기준으로 설명하면 다음 명령줄을 그대로 복사해서 실행하면 됩니다.

curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ 

프로젝트 최상위 경로에 composer.json 파일을 생성하고, 아래와 같이 입력합니다.

{
"require": {
"aws/aws-sdk-php": "2.*"
}
}

그리고 Composer를 이용하여 SDK를 설치합니다.

composer.phar install

이제 설치는 완료되었습니다. SDK가 정상적으로 설치되었다면 리눅스의 경우 apache의 root document directory인 /var/www/html 아래에 Aws라는 디렉토리와 vendor이라는 디렉토리가 있어야 합니다.​

SDK를 이용하여 Object Storage의 버킷 리스트를 출력해 보겠습니다. 그전에 Object Storage 접근을 위한 Access Key와 Secret Key에 대한 정보가 필요합니다.​

네이버 클라우드 플랫폼 홈페이지에서 로그인 후 마이페이지 > 인증키 관리로 들어가서 Access key와 Secret Key를 확인합니다.

만약 Access Key가 1234567, Secret Key가 abcdefg라고 가정하고 PHP 코드를 만들어 보겠습니다. 많은 예제가 다음과 같이 되어 있죠.

<?php
require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-east-1'
]);

$result = $s3->listBuckets([]);

echo "<br>";

for($i=0;$i<count($result[Buckets]);$i++)
{
echo $result[Buckets][$i][Name];
echo "<br>";
}

?>

그리고 접근해보면 다음과 같은 화면이 나옵니다.

코드를 유심히 보면 endpoint를 지정하는 부분이 없습니다.

그리고 Apache의 Error_log를 보면 다음과 같이 에러가 출력되어 있습니다.

[Mon Apr 22 20:12:51.701993 2019] [:error] [pid 22516] [client 10.32.28.144:37765] PHP Catchable fatal error: Argument 1 passed to Aws\\Common\\Client\\AbstractClient::__construct() must be an instance of Aws\\Common\\Credentials\\CredentialsInterface, array given, called in /var/www/html/s3-orgbucket.php on line 10 and defined in /var/www/html/vendor/aws/aws-sdk-php/src/Aws/Common/Client/AbstractClient.php on line 73

뭔가 추가적인 설정이 필요한 것 같네요.

(2) Endpoint 지정​

문제의 원인은 S3 클래스에 endpoint에 대한 변수나 메소드가 없기 때문이며 이를 해결하기 위해서는 endpoint가 포함된 정적 메소드를 이용하여야 합니다.

때문에 다음 부분을

$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-east-1'
]);

아래와 같이 수정하여야 합니다.

$s3 = Aws\S3\S3Client::factory(array(
'key' => 사용자의 API_KEY,
'secret' =>사용자의 Secret_Key,
'endpoint' => 'https://kr.object.ncloudstorage.com',));
$s3 = Aws\S3\S3Client::factory(array(

전체적인 코드는 다음과 같습니다.

<?php
require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$s3 = Aws\S3\S3Client::factory(array(
'key' => 사용자의 API_KEY,
'secret' =>사용자의 Secret_Key,
'endpoint' => 'https://kr.object.ncloudstorage.com',));
$result = $s3->listBuckets([]);

echo "<br>";

for($i=0;$i<count($result[Buckets]);$i++)
{
echo $result[Buckets][$i][Name];
echo "<br>";
}

?>

그리고 실행해 보면 버킷 리스트가 정상적으로 출력되는 것을 확인할 수 있습니다.

​그리고 네이버 클라우드 플랫폼 Management Console의 Object Storage를 보면 정상적으로 리스트가 출력된 것을 확인할 수 있습니다.

이와 같이 PHP에서 객체를 생성할 때 정적 메소드를 사용하면 네이버 클라우드 플랫폼의 Object Storage도 PHP를 이용할 수 있습니다. 이제 기존 PHP 코드에 네이버 클라우드 플랫폼 Object Storage도 손쉽게 연동하여 사용 가능합니다.

글을 마무리하며…

PHP를 이용하여 Object Storage를 조작하기 위한 기초적인 설정과 기본 구문을 소개해드렸는데요, 도움이 되셨으면 좋겠습니다.

서비스 사용 및 구축 중에 이슈가 발생하신 경우 네이버 클라우드 플랫폼 고객센터로 문의하시면 빠른 지원 받으실 수 있습니다. 끝까지 읽어주셔서 감사합니다. 앞으로도 네이버 클라우드 플랫폼에 많은 관심 부탁드립니다!

--

--

NAVER CLOUD PLATFORM
NAVER CLOUD PLATFORM

We provide cloud-based information technology services for industry leaders from startups to enterprises.