2018. 1. 11. 14:30ㆍ개발을 파헤치다/PHP
Composer 설치
Composer는 PHP에서 사용하는 의존성 관리 도구입니다.
프로젝트에서 필요한 라이브러리들을 선언해두면 이 Composer라는 녀석이 필요한 패키지들을 프로젝트 안에 모두 설치해주죠.
AWS SDK를 사용하기 위해 일단 이 Composer라는 녀석부터 설치해보도록 하겠습니다.
curl -sS https://getcomposer.org/installer | php
curl을 사용해 Composer를 설치해줍니다.
AWS SDK 설치
이제 프로젝트의 최상위 폴더에 composer.json이라는 파일을 만들어 줍니다.
vi composer.json
이 파일에 AWS SDK를 설치하라는 선언을 해줄겁니다.
{
"require": {
"aws/aws-sdk-php": "^3.34"
}
}
이렇게 선언을 해 주고 Composer가 설치하도록 명령을 해줍시다.
php composer.phar install
설치가 성공적으로 끝나면 프로젝트 폴더 안에 vendor라는 폴더가 생깁니다.
안에 들어가 보면 autoload.php라는 파일이 생성됩니다. 이를 통해 AWS SDK를 로드해서 사용할 수 있습니다.
AWS SDK 사용
연결 생성하기
$connect_param = array('region' => 'us-west-2', 'version' => 'latest',
'credentials' => array('key' => 'access key ID값', 'secret' => 'secret access key값'));
$connect= new Aws\S3\S3Client($connect_param); //S3에 접속
연결을 하는데 필요한 인자값은 2가지 입니다.
- region
- version
region은 현재 AWS S3를 사용하는 지역정보이고 version은 말 그대로 SDK 버전을 의미합니다.
여기에 한 가지 인자가 더 들어가는데 바로 credentials입니다.
이 부분은 허용된 사용자만 AWS SDK를 통해서 S3에 접근할 수 있도록 하는 인자값입니다.
소중한 서버에 아무나 접속해서 파일들을 수정해서는 안되겠죠?
credential는 연관 배열 형태로 만드는데 key는 접근 ID값이고 secret은 접근하기 위한 패스워드 정도로 생각하시면 편하겠네요.
AWS S3에 파일 업로드하기
$result = $connect->putObject(Array(
'ACL' => 'public-read',
'SourceFile' => '로컬 파일 경로',
'Bucket' => '파일을 저장할 버킷 이름',
'Key' => '파일이 저장될 Key값'
));
- ACL → 액세스 제어 목록이라는 녀석인데 이 값을 사용해서 버킷과 객체에 대한 접근 권한을 관리할 수 있습니다.
- SourceFile → S3로 보낼 파일의 경로를 뜻합니다.
- Bucket → 파일이 저장될 S3의 버킷 이름을 뜻합니다.
- Key → 버킷안에 저장될 Key값입니다. 파일 이름이 될 수 있겠죠.
Bucket에 폴더 개념은 없지만 Prefix를 추가해서 폴더처럼 구분할 수 있는 기능이 있습니다.
아래 그림처럼 한 버킷안에서 구분지어서 파일을 저장하고 싶다면 이 Key 인자값에 '폴더이름/키값'으로 주면 된다.
예를 들어 1.jpg를 user_profile이라는 폴더 아래 저장하고 싶다면 'Key' 인자에 user_profile/1.jpg라고 값을 넣어주면 된다.
결과값
[
'ETag' => '<string>',
'Expiration' => '<string>',
'ObjectURL' => '<string>',
'RequestCharged' => 'requester',
'SSECustomerAlgorithm' => '<string>',
'SSECustomerKeyMD5' => '<string>',
'SSEKMSKeyId' => '<string>',
'ServerSideEncryption' => 'AES256|aws:kms',
'VersionId' => '<string>',
]
- ETag → 업로드 된 객체의 태그값
- Expiration → 만료 시간이 설정되어 있으면 객체가 소멸되는 날짜를 알려준다
- ObjectURL → S3에 저장된 파일 주소
- RequestCharged → 요청에 대해 요청자가 요금을 지불했음을 알려준다
- SSECustomerAlgorithm → 사용자가 암호화 요청을 하면 암호화가 되었는지 확인한 후 헤더값을 넣어서 Response를 준다.
- SSECustomerKeyMD5 → 사용자가 요청한 암호화 키값의 정합성을 판단하여 Response에 헤더값을 넣어 보내준다.
- SSEKMSKeyId → 객체 암호화에 사용된 AWS key값을 나타낸다.
- ServerSideEncryption → 서버단에서 사용한 암호화 알고리즘을 나타낸다. 예를 들어 AES256
- VersionId → 객체의 버전을 나타낸다
AWS S3 파일 삭제하기
인자값 구성이 위와 같이 되어있습니다.
Delete에 지울 객체들을 넣어야 합니다.
Delete안의 Objects 키 값에 대한 Value로 지울 파일들 목록을 넣어줍니다.
이때 파일 목록을 연관 배열로 만들어 줍니다.
Key값에 파일이름(S3에 저장된 파일 Key값)을 넣어주면 되죠.
구현은 아래와 같습니다.
$img_list = array("1.jpg", "2.jpg", "3.jpg");
$toDelete_img_list = array();
for($i = 0; $i < sizeof($img_list); $i++)
{
//{Key, '파일이름'}으로 이루어진 배열을 만듭니다.
array_push($toDelete_img_list, array('Key' => $img_list[$i]));
}
$objects = array('Objects' => $toDelete_img_list);
$result = $connect->deleteObjects(Array(
'Bucket' => '버킷 이름',
'Delete' => $objects
));
결과값
[
'Deleted' => [
[
'DeleteMarker' => true || false,
'RequestCharged' => 'requester',
'VersionId' => '<string>',
],
// ...
],
'Errors' => [
[
'Code' => '<string>',
'Key' => '<string>',
'Message' => '<string>',
'VersionId' => '<string>',
],
// ...
],
'RequestCharged' => 'requester',
]
- DeleteMarker → 해당 버전의 객체가 완전히 지워졌는지 여부
- RequestCharged → 요청 요금이 부과되었는지 여부
- VersionId → 삭제된 객체의 버전 아이디
- Code → 에러 코드값
- Key → 객체의 키 값
- Message → 에러 메시지
- VersionId → 객체의 버전 아이디
Reference
- PHP용 AWS SDK를 사용하여 객체 업로드 → http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/UploadObjSingleOpPHP.html
- PHP 의존성 관리도구 Composer → http://www.haruair.com/blog/1860
- PHP용 AWS SDK 환경 설정 → http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/UsingTheMPphpAPI.html
- PHP용 AWS SDK Quick Start → http://docs.aws.amazon.com/aws-sdk-php/v2/guide/quick-start.html
- PHP AWS SDK Install → http://docs.aws.amazon.com/aws-sdk-php/v2/guide/installation.html
- AWS S3 Client Constructor Param → http://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.AwsClient.html#___construct
- AWS SDK Basic Usage → http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html
- AWS Credentials → http://docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/credentials.html
- AWS ACL을 사용한 액세스 관리 → http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/S3_ACLs_UsingACLs.html
- AWS SDK Put Object → http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject
- AWS SDK delete objects → http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#deleteobjects
- AWS Metadata 및 폴더개념 → http://docs.aws.amazon.com/ko_kr/AmazonS3/latest/dev/UsingMetadata.html
'개발을 파헤치다 > PHP' 카테고리의 다른 글
[Wordpress] Wordpress REST API 활용법! 이미지 정보 가져오는 방법 (0) | 2021.12.16 |
---|---|
[Wordpress Plugin] 워드프레스 플러그인 설정 페이지 만드는 방법 (0) | 2021.11.19 |
PHP용 AWS S3 Client 사용하기 (0) | 2018.01.12 |
PHP와 Javascript에서 JSON 데이터 처리하기 (2) | 2018.01.10 |
PHP Class 기본 사용법 (0) | 2017.12.31 |