Spring Boot 프로젝트에서 Amazon S3에 파일을 업로드하는 2가지 방법

Spring Boot 프로젝트에서 Amazon S3에 파일을 업로드하는 2가지 방법

프로젝트에서 파일을 처리해야 하는 경우 해당 파일을 저장할 저장소가 필요합니다. 가장 좋은 솔루션은 s3입니다. Amazon S3는 AWS에서 제공하는 서비스입니다. S3는 파일 저장과 관련하여 확장성과 안정성이 뛰어난 솔루션입니다.

이 기사에서는 프로젝트의 s3에 파일을 업로드하는 방법을 보여 드리겠습니다. 귀하의 스프링 부트 프로젝트가 API를 프론트엔드에 노출시킨 마이크로서비스라고 가정합니다.

파일을 업로드하려면 2가지 방법이 있습니다.

  • 첫 번째 방법은 프론트엔드가 REST API를 통해 파일을 서버에 전달한 다음 s3 SDK를 호출하여 파일을 업로드하고 결과를 다시 프론트엔드에 반환하는 것입니다.
  • 그리고 두 번째 방법은 사전 서명된 URL이라고 하는 것입니다.* 사전 서명된 URL은 제한된 권한과 만료가 있는 URL입니다. 모든 클라이언트는 AWS 액세스 키와 비밀에 대해 걱정할 필요 없이 해당 URL을 사용하여 파일을 s3에 직접 PUT할 수 있습니다.

보면 첫 번째 옵션에서 파일이 서버로 이동한 다음 서버에서 다시 s3으로 이동합니다. 파일의 데이터 전송이 두 번 발생하고 첫 번째 옵션을 사용하지 않는 것이 좋습니다. 두 번째 옵션은 파일을 업로드해야 하는 최선의 선택입니다.

어떻게 할 수 있는지 봅시다.

  • 먼저 프론트엔드에서 호출할 REST API를 만들고 제한된 권한으로 미리 서명된 URL을 만들고 프론트엔드로 다시 돌아갑니다.
  • 프런트 엔드는 파일을 s3에 직접 업로드합니다.

pom.xml에 SDK 종속성을 추가해 보겠습니다.

s3용 빈을 생성할 새 구성 클래스 awsS3Config.java를 생성합니다.

application.yml 파일에 access-key 및 secret-key를 추가했는지 확인하십시오.

이제 s3 작업을 위해 AWS와 통신할 서비스를 생성해 보겠습니다.

위의 클래스에는 다음 매개변수를 사용하는 ‘generatePreSignedUrl’이 있습니다.

filePath : 파일을 업로드하려는 s3의 객체 키입니다.

bucketName : s3 버킷의 버킷 이름입니다.

httpMethod : 사전 서명된 URL에 대해 허용되는 HTTP 메소드입니다. 여기에 파일을 업로드하려고 하므로 HttpMethod.PUT을 여기에 전달합니다.

이제 컨트롤러에서 REST API 엔드포인트를 생성해 보겠습니다.

이 API는 10분 동안 유효하고 프론트 엔드에서 직접 파일을 업로드하기 위해 ‘PUT’ 메소드만 허용하는 사전 서명된 URL을 반환합니다.

건배!!