AWS Java SDK를 이용한 S3에 Metadata 저장

초콜렛빵·2024년 5월 22일

공부

목록 보기
2/5

S3 데이터에 메타데이터 저장

작업 도중 S3에 데이터를 올려줄 때, 해당 문서의 확장자를 알고 싶은데, 저장 시에는 이름을 uuid 형태로 이름을 변경해 저장해 key로는 알 수 없는 상태였다. 기존 서비스라면 가능할 수 있지만 다른 서비스에서 해당문서를 다운로드 했을 때, 해당 확장자에 대한 정보를 알 수가 없는 상황이었다.

그럼 이제 업로드 할 때, 메타데이터를 이용하자 라는 생각을 하게 되었다.

기존 업로드 방식

기존 업로드 방식은 단순히 File, BucketName, Key 를 이용한 데이터 저장이었다.


BasicAWSCredentials awsCredentials = new BasicAWSCredentials("your-access-key", "your-secret-key");
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                                .withRegion(Regions.AP_NORTHEAST_2)
                                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
                                .build();

// 객체 업로드
s3Client.putObject(ucketName, keyName, new File(filePath)));

변경된 방식

업로드를 할 때, PutObjectRequest 객체를 이용해서 요청을 전달하는 것으로 변경하고, 해당 Request에 메타데이터를 포함시켰다.

///기존과 s3Client는 동일

// 메타데이터 설정
ObjectMetadata metadata = new ObjectMetadata();
metadata.addUserMetadata("custom-key", "custom-value");

// PutObjectRequest 생성
PutObjectRequest request = new PutObjectRequest(bucketName, keyName, new File(filePath));
request.setMetadata(metadata);

// 객체 업로드
s3Client.putObject(request);

위와 같은 방식으로 내가 원하는 메타데이터 값을 넣어 저장하였다.

해당 메타 데이터 확인

현재 aws sdk 2.0 버전에서 메타데이터 확인 방식이 기존과 변경 되었다. ObjectMetaData 클래스가 삭제가 되었기 때문에 Map형태로 데이터를 전달받아 처리한다.

// 메타데이터 가져오기
HeadObjectRequest headObjectRequest = HeadObjectRequest.builder()
													.bucket(sourceBucketName)
                                                    .key(sourceKey)
                                                    .build();
HeadObjectResponse headObjectResponse = s3.headObject(headObjectRequest);

// 메타데이터 파싱
Map<String, String> metaData = new HashMap<>(headObjectResponse.metadata());

위와 같은형태로 metaData를 가져올 수 있으며, 이를 활용하여 메타데이터 기준으로 이후 작업을 처리할 수 있었다.

profile
차근차근 기록하고 배우는 개발자

0개의 댓글