Hello World

[펌]Spring Cloud AWS를 이용한 S3 연동 본문

Spring/Boot(4.x)

[펌]Spring Cloud AWS를 이용한 S3 연동

EnterKey 2016. 1. 10. 12:25
반응형

S3(Simple Storage Service)는 내구성과 확장성이 매우 뛰어난 객체 스토리지를 제공하는 AWS의 대표적인 서비스이다.

http://aws.amazon.com/ko/s3/

Spring Boot와 Spring Cloud AWS (http://cloud.spring.io/spring-cloud-aws/)를 이용해서 다음 작업들을 해보자

  • 특정 버킷에 업로드된 파일 목록 가져오기
  • 특정 버킷에 파일 업로드
  • 특정 버킷에 있는 파일 다운로드

먼저, AWS Console에서 accessKey, secretKey를 발급받아야한다. (참고)

1) Dependency를 구성해보자

build.gradle

SpringBoot와 SpringCloudAWS를 넣어준다.

사실 좀더 엄밀히 이야기하면 이번 예제에서는 CloudAWS 기능을 쓴다기보단, CloudAWS가 포함하고 있는 AWS SDK를 사용한다고 하는편이 좀더 맞다.  좀더 Pure한 구성을 원하면 ‘com.amazonaws:aws-java-sdk:1.10.6’ 만 포함시키는 편이 더 좋다.

 

2) AWS Credentials & S3 Client Bean 생성

accessKey와 secretKey를 이용해서 AWSCredential Bean을 생성후에 S3 Client Bean도 생성해준다.

3) S3 API 구현

워낙 간단하다. 이미 AWS S3 SDK가 많은 부분을 구현하고 있어서, 핵심로직만 집중하면된다.

4) 컨트롤러 생성

간단하게 업로드/다운로드/목록을 요청할 수 있는 컨트롤러를 생성했다.

5) 실행

1

Drag & Drop으로 파일을 올려보자~

2
파일을 선택하면 파일 정보가 표시되고, 다운로드를 할 수 있다

3

실제 S3 Console에서도 업로드가 되어있다.

Screen Shot 2015-07-28 at 12.39.05 PM

PutObjectRequest 에 별도의 옵션이 없으면 기본적인  Permission이 Master Only로 설정된다.

Screen Shot 2015-07-28 at 12.46.16 PM

Public 하게 Read권한을 추가하고 싶다면 PubObjectRequest에 CannedAcl을 설정해준다

PublicRead를 ACL추가후 다시 업로드해보면 Everyone 퍼미션이 추가되어있다.

Screen Shot 2015-07-28 at 1.44.25 PM

나는 AWS S3 SDK를 최대한 활용해서 예제를 만들었지만, Spring Cloud AWS 문서에는  Spring의 ResourceLoader와, S3 TransferManager를 이용해서 업로드하는 방식도 소개하고 있다.

  • ResourceLoader 예제

  • S3 TransferManager 예제

SpringBoot용 AutoConfiguration 모듈인 spring-cloud-aws-autoconfigure가 있지만, EC2, Stack, RDS, ElastiCache 등의 기능들이 모두 들어가있어서 S3만을 연동하는 예제에는 적합하지 않은것 같아 제외했다. AWS를 좀더 하드하게 쓴다면 spring-cloud-aws-autoconfigure를 적절하게 잘 활용하면 적은 양의 코드로 다양한 설정을 할 수 있다.

또, 예제에서는 물리적 파일의 이름을 그대로 S3 Key로 사용했지만, 실제 서비스에서는 별도의 맵핑테이블을 두고, S3에는 UUID와 같은 Unique String을 Key로 사용하고, 실제 사용자가 다운로드 하는 시점에는 UUID와 맵핑된 파일명을 내려주면 될것같다.

소스코드 : https://github.com/brant-hwang/spring-cloud-aws-example

UI는 역시나 AXISJ 장기영님 작품~ https://github.com/axisj/axisj


출처: http://brantiffy.axisj.com/archives/131



반응형
Comments