일단 Thumbnailator 이라는 라이브러리가 필요합니다.
자바에서 꽤 유명한 썸네일 생성용 라이브러리 로 확인이 됩니다.
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.20</version>
</dependency>
다음과 같이 maven 설정을 해주고 불러와줍니다.
private static final int PROFILE_THUMB_SIZE = 200;
private static final double PROFILE_QUALITY = 0.8;
String originalFilename = file.getOriginalFilename();
String fileExtension = Objects.requireNonNull(originalFilename).substring(
originalFilename.lastIndexOf(".")
);
File image = ImageIO.read(file.getInputStream()) // 이미지 버퍼로 저장
int width = PROFILE_THUMB_SIZE; // width
int height = PROFILE_THUMB_SIZE; // height
double quality = PROFILE_QUALITY; // 이미지 퀄리티 ( 0 ~ 1.0 )
String subDirectory = "profile"; // 서브 폴더
String thumbDirectory = "thumb"; // 썸네일 폴더
String newFilename = UUID.randomUUID().toString() + fileExtension; // 파일명
// "/uploads/profile/thumb/f68da6e2-04a9-401f-bc55-9ea1cdca4aca.jpg"
String outputFile = this.fileStorageLocation.
resolve(subDirectory).
resolve(thumbDirectory).
resolve(newFilename);
Thumbnails.of(image)
.size(width, height)
.crop(Positions.CENTER) // 중앙 크롭을 하겠다
.outputQuality(quality) // 품질 ( 0 ~ 1.0 )
.toFile(outputFile); //
위와 같이 설정 해주고, 썸네일 만들어주면 자동으로 위 경로를 따라 썸네일 이미지가 만들어 집니다.

실제 5.51MB 의 용량이 큰 이미지로 테스트 해보겠습니다.

1920 x 1920 으로 만들고 quality 0.85로 맞추면 514 KB 까지 줄어들고

프로필 이미지 처럼 200x200 사이즈에 quality 0.8 하게되면 10.2 KB까지 용량이 줄어들게 됩니다.
'BackEnd > Spring' 카테고리의 다른 글
| 🔬 Java/Spring Boot 변수 명명 규칙: 단수 vs 복수 정리 (0) | 2025.11.01 |
|---|---|
| [ ERROR ] 🔥🔥 cannot find symbol 🔥🔥 (0) | 2025.10.30 |
