멋사 백엔드 심화 과정이 끝나고, 피드백을 받았던 내용을 프로젝트에 적용하였다.
프로젝트에서 받았던 피드백은 다음과 같았다.
Q : AWS S3 버킷에 이미지를 등록할때 최적화를 생각 하셨나요?
A : 아뇨 S3 버킷에 이미지를 등록할때 최적화는 생각하지 못했고, S3 버킷에 이미지가 업로드 되는 것만 확인 했습니다.
Q : 이미지를 등록할때 이미지를 "리사이징" 해서 등록해서 이미지를 조회 하게 되면 성능상 이점이 있습니다. ~~등등등
프로젝트에서 AWS S3 버킷에 이미지를 등록하는 기능을 내가 맡았고,
질문에 대한 대답 또한 내가 하였다.
이미지 리사이징 이란 ?
간단하게 설명 하자면, 이미지 즉 사진의 크기를 코드를 통해 조절하는 것 입니다.
문서를 찾아보며 이미지 리사이징 하는 방법이 여럿 존재 했습니다.
Marvin 라이브러리Thumbnailator 라이브러리Marvin 라이브러리를 사용하기 위해서는 아래와 같은 의존성을 추가 해야 합니다.
implementation 'com.github.downgoon:marvin:1.5.5'
implementation 'com.github.downgoon:MarvinPlugins:1.5.5'
Marvin 라이브러리를 사용해서 이미지를 리사이징 하는 자료들이 많았지만, 진행하던 프로젝트에서 Marvin 관련 의존성을 추가하게 되면
아래와 같은 에러 코드가 발생해서 Marvin 라이브러리를 사용하지 못햇습니다.
(해당 에러는 콘솔에 log(로그) 출력이 너무 길게 되어 발생한 에러)
Thumbnailator 라이브러리를 사용해서 이미지 리사이징을 진행 하였습니다.S3 버킷을 만드는 방법은 저번 블로그로 대체 하겠습니다.
Thumbnailator라이브러리를 사용하기 위해서는 아래의 의존성을 추가 해줘야 합니다.
implementation 'net.coobird:thumbnailator:0.4.19'
이미지를 리사이징 하는 메소드 입니다.
private void createS3Bucket(String bucketName, String fileName, MultipartFile image) throws IOException {
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(image.getContentType());
// 이미지 리사이징
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// 너비와 높이를 400, 400으로 리사이징 합니다.
Thumbnails.of(image.getInputStream()).size(400, 400).toOutputStream(outputStream);
byte[] buffer = outputStream.toByteArray();
metadata.setContentLength(buffer.length);
ByteArrayInputStream inputStream = new ByteArrayInputStream(buffer);
// 리사이징된 이미지를 bucketName파라미터를 통해 리사이즈 버킷에 저장
amazonS3Client.putObject(bucketName, fileName, inputStream, metadata);
}
이미지를 리사이징 했을경우 버킷에 저장되는 크기 즉 용량이 조절 되므로, 이미지 관련해서 조회를 했을경우 성능상 이점을 얻을 수 있을 것 이다.
프로젝트에 대한 피드백을 받고, 피드백에 맞는 결과물을 도출하기까지의 과정이 너무 재밌었다.
부족했던 부분을 채울 수 있었고 실제로 프로젝트에 적용까지 되니까 좋았다.