도입 이유

돌봄 워크 프로젝트에서 사진 저자을 클라우드가 아닌 로컬에 저장하는 방식을 이어오다 클라우드로 이전해야 겠다고 생각했다. 그래서, 기존 팀원이 구현해 놓은 로컬 폴더에 사진을 저장하는 방식으로 리팩토링을 진행해 내 서버에 저장하였다.

☕️ AWS S3 & Presigned URL 방식

제공해주신 Java 코드 스니펫들은 AWS S3와 상호작용하여 파일을 업로드하는 기능을 구현한 것으로 보입니다. 특히 Presigned URL을 사용하고, S3 Multipart Upload 기능을 염두에 둔 DTO 설계가 포함되어 잇다.

차이점

S3 Multipart Upload는 "어떻게 큰 파일을 S3에 올릴 것인가?"에 대한 업로드 전략/프로세스

함께 사용되는 방식

S3 Multipart Upload 과정에서, 특히 Upload Part (파트 업로드) 단계에서 Presigned URL이 매우 유용하게 사용됩니다.


세팅

package com.balybus.galaxy.global.config;

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class S3Config {
    @Value("${cloud.aws.credentials.access-key}")
    private String accessKey;
    @Value("${cloud.aws.credentials.secret-key}")
    private String secretKey;
    @Value("${cloud.aws.region.static}")
    private String region;

    @Bean
    public AmazonS3Client amazonS3Client() {
        BasicAWSCredentials awsCredentials= new BasicAWSCredentials(accessKey, secretKey);
        return (AmazonS3Client) AmazonS3ClientBuilder.standard()
                .withRegion(region)
                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
                .build();
    }
}


Controller & Service 설명

1. Presigned URL 생성 API 컨트롤러