티스토리 뷰

JAVA & Spring

[Spring boot] AWS S3 연동

py0922 2024. 8. 4. 22:10
SMALL

build.gradle

// AWS s3
implementation 'software.amazon.awssdk:s3:2.20.14'

 

application.yml

보안을 위해 AWS S3와 관련된 access key나 secret key 등은 모두 application.properties파일에 적어주고 ${}를 통해 참고하도록 해주었다.

cloud:
    aws:
        credentials:
            accessKey: ${AWS_ACCESS_KEY}
            secretKey: ${AWS_SECRET_KEY}
        region:
            static: ${AWS_REGION}
        stack:
            auto: false

application:
    bucket:
        name: ${AWS_BUCKET_NAME}

 

S3Service

 Spring boot의 Scheduled를 이용하여 자동 삭제 기능을 찾느라 다른 블로그를 많이 찾아봤다

다른 블로그에는 AmazonS3Client를 많이 사용한 모습을 볼 수 있었다

내가 사용할 건 S3Client이다

AmazonS3Client는 Java의 v1용 AWS SDK이고, S3Client는 Java의 v2용 AWS SDK이라고 한다.

v2의 SDK가 v1 SDK에 비해 AWS 서비스와 상호 작용하는 데 있어 현대적이고 차단되지 않은 접근 방식을 제공한다고 해서 S3Client를 사용하려고 한다

@Service
public class S3Service {

    private final S3Client s3Client;

    @Autowired
    public S3Service(S3Client s3Client) {
        this.s3Client = s3Client;
    }

    @Value("${AWS_BUCKET_NAME}")
    private String bucketName;

    @Value("${AWS_REGION}")
    private String region;

    public String uploadFileToS3(File file){
        try{
            String  fileName = file.getName();
            PutObjectRequest putObjectRequest = PutObjectRequest.builder()
                    .bucket(bucketName)
                    .key(fileName)
                    .build();

            PutObjectResponse response = s3Client.putObject(putObjectRequest, file.toPath());

            // 파일의 S3 경로 반환
            return "https://%s.s3.%s.amazonaws.com/%s".formatted(bucketName, region, fileName);

        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("Failed to upload file to S3", e);
        }
    }
}

 

반응형
LIST
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함