Amazon Web Services

AWS S3 간단 사용기

열린기술자·2016년 5월 18일·조회 7,352

1. 사용기에 앞서

정말 사용기랄 것도 없다. 아무튼 AWS 프리 티어를 통해 S3 스토리지를 이용해보았다.

당시 프리 티어 기준으로는 "5GB Amazon S3 표준 스토리지, Get 요청 20,000건, Put 요청 2,000건"이 제공되었다. 프리 티어 제공량과 과금 조건은 시점에 따라 바뀔 수 있으니, 실제 사용 전에는 AWS 공식 프리 티어 페이지에서 현재 조건을 다시 확인하는 것이 좋다.


2. 특징

  1. 생성할 버킷(Bucket) 이름은 전 세계적으로 고유해야 한다.
  2. 버킷이 생성되면 파일 탐색기와 비슷한 화면이 뜬다.
  3. 하위 폴더처럼 보이는 경로를 만들 수 있고, 루트 경로에 바로 업로드할 수도 있다.
  4. 모든 파일은 각각 URL을 갖는다. 다만 기본적으로는 외부에서 접근할 수 없으므로 권한을 부여해야 한다. 공개 읽기 권한을 줄 수도 있지만, 최근에는 퍼블릭 액세스 차단 설정을 함께 확인해야 한다.
  5. 파일은 이동할 수 있다. 콘솔에서는 잘라내기와 붙여넣기처럼 보이지만, 객체 스토리지 관점에서는 복사 후 원본 삭제에 가깝다.
  6. 버킷 수 제한은 AWS 계정의 서비스 할당량에 따른다. 예전에는 계정당 기본 100개로 안내되었지만, 현재 일반 목적 버킷은 계정당 기본 10,000개로 안내되며 필요한 경우 서비스 할당량 증가를 요청할 수 있다.

S3는 일반 파일 시스템이라기보다 객체 스토리지에 가깝다. 그래서 폴더처럼 보이는 구조도 실제로는 객체 키의 접두사(prefix)를 콘솔에서 폴더처럼 보여주는 방식이다. 이 차이를 알고 있으면 권한 설정이나 경로 설계에서 덜 헷갈린다.


3. 프리 티어 모니터링

프리 티어 사용량 모니터링 방법은 다음 링크를 확인해 보시오.

AWS 프리 티어 사용량 모니터링 안내

다음은 대금 및 비용 관리 대시보드를 통해 모니터링한 화면이다.

테스트할 때는 객체 업로드 용량뿐 아니라 요청 수(GET, PUT 등)도 함께 확인하는 것이 좋다. 작은 파일을 자주 올리고 내려받는 테스트에서는 저장 용량보다 요청 수가 먼저 눈에 띌 수 있다.


4. S3 RRS란?

"Reduced Redundancy Storage(RRS)는 중요하지 않고 재생성 가능한 데이터를 Amazon S3 스탠다드 스토리지보다 낮은 수준의 중복성으로 저장할 수 있는 Amazon S3의 스토리지 옵션입니다."

다만 RRS는 현재 새로 설계하는 시스템에서 적극적으로 선택할 만한 옵션은 아니다. 비용 최적화가 목적이라면 S3 Standard-IA, One Zone-IA, Glacier 계열 등 현재 제공되는 스토리지 클래스를 요구사항에 맞게 비교하는 편이 낫다.


5. 응용

5-1. 특정 사용자에게만 특정 콘텐츠를 보여주고자 한다면?

Pre-signed object URL 기법을 사용하면 된다. 다음 링크를 참고하라.

AWS SDK for Java를 사용하여 미리 서명된 객체 URL 생성

샘플 코드는 다음과 같다.

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider()); 
       
java.util.Date expiration = new java.util.Date();
long msec = expiration.getTime();
msec += 1000 * 60 * 60; // 1 hour.
expiration.setTime(msec);
             
GeneratePresignedUrlRequest generatePresignedUrlRequest = 
              new GeneratePresignedUrlRequest(bucketName, objectKey);
generatePresignedUrlRequest.setMethod(HttpMethod.GET); // Default.
generatePresignedUrlRequest.setExpiration(expiration);
             
URL s = s3client.generatePresignedUrl(generatePresignedUrlRequest); 

미리 서명된 URL은 지정한 만료 시간 동안만 유효하다. 따라서 파일 자체를 공개로 열어두지 않고도, 로그인한 사용자나 결제 완료 사용자에게만 제한적으로 다운로드 링크를 전달하는 식으로 활용할 수 있다.

5-2. RRS

이미지 섬네일처럼 원본에서 다시 생성할 수 있는 데이터 저장에 활용 가능하다. 다만 앞에서 언급했듯이, 새로 구축하는 경우에는 현재 권장되는 S3 스토리지 클래스를 먼저 검토하는 편이 좋다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.