Skip to content

Commit 127c3f9

Browse files
authored
Merge pull request #164 from GTable/refactor/#4-Image-resizing
Refactor: 이미지 리사이징 도입
2 parents c99178e + ff98ed5 commit 127c3f9

5 files changed

Lines changed: 34 additions & 16 deletions

File tree

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/controller/MenuImageController.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,16 @@ public ResponseEntity<?> uploadMenuImage(
4747
}
4848

4949
MenuImageUploadResponse response = menuImageService.save(menuId, file);
50-
return ResponseEntity.status(HttpStatus.CREATED).body(ApiUtils.success(response));
50+
return ResponseEntity
51+
.status(
52+
HttpStatus.CREATED
53+
)
54+
.body(
55+
ApiUtils
56+
.success(
57+
response
58+
)
59+
);
5160
}
5261

5362
@DeleteMapping("/images/{menuImageId}")

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/service/MenuImageService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public MenuImageUploadResponse save(Long menuId, MultipartFile file) {
3838
// MenuImage 엔티티 생성 및 저장
3939
MenuImage menuImage = MenuImage.builder()
4040
.menu(menu)
41-
.imageUrl(uploadResult.url())
41+
.imageUrl(uploadResult.resizedUrl())
4242
.fileKey(uploadResult.key())
4343
.build();
4444

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/store/controller/StoreImageController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ public ResponseEntity<?> uploadStoreProfileImage(
8181
description = "주점 이미지를 삭제합니다. 이미지 ID를 사용하여 특정 이미지를 삭제할 수 있습니다."
8282
)
8383
@ApiResponse(responseCode = "200", description = "주점 이미지 삭제 성공")
84-
public ResponseEntity<?> deleteStoreImage(@PathVariable Long imageId) {
85-
storeImageService.delete(imageId);
84+
public ResponseEntity<?> deleteStoreImage(@PathVariable Long storeImageId) {
85+
storeImageService.delete(storeImageId);
8686
return ResponseEntity
8787
.status(HttpStatus.OK)
8888
.body(

nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/store/service/StoreImageService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public List<StoreImageUploadResponse> saveAll(Long storeId, List<MultipartFile>
3636
if (files == null || files.isEmpty())
3737
throw new StoreImageEmptyException();
3838

39-
String type = "store";
39+
String type = "banner";
4040
Store store = storeRepository.findById(storeId)
4141
.orElseThrow(StoreNotFoundException::new);
4242

@@ -61,7 +61,7 @@ public List<StoreImageUploadResponse> saveAll(Long storeId, List<MultipartFile>
6161
for (S3Service.S3UploadResult uploadResult : uploadResults) {
6262
StoreImage storeImage = StoreImage.builder()
6363
.store(store)
64-
.imageUrl(uploadResult.url())
64+
.imageUrl(uploadResult.resizedUrl())
6565
.fileKey(uploadResult.key())
6666
.imageType(ImageType.BANNER)
6767
.build();
@@ -76,7 +76,7 @@ public List<StoreImageUploadResponse> saveAll(Long storeId, List<MultipartFile>
7676
@Transactional
7777
public StoreImageUploadResponse saveProfileImage(Long storeId, MultipartFile file) {
7878

79-
String type = "store";
79+
String type = "profile";
8080
Store store = storeRepository.findById(storeId)
8181
.orElseThrow(StoreNotFoundException::new);
8282

@@ -93,7 +93,7 @@ public StoreImageUploadResponse saveProfileImage(Long storeId, MultipartFile fil
9393
// StoreImage 엔티티 생성 및 저장
9494
StoreImage storeImage = StoreImage.builder()
9595
.store(store)
96-
.imageUrl(uploadResult.url())
96+
.imageUrl(uploadResult.resizedUrl())
9797
.fileKey(uploadResult.key())
9898
.imageType(ImageType.PROFILE)
9999
.build();

nowait-infra/src/main/java/com/nowait/infraaws/aws/s3/S3Service.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,31 +21,40 @@ public class S3Service {
2121
private final AmazonS3Client amazonS3Client;
2222

2323
@Value("${cloud.aws.s3.bucket}")
24-
private String bucket;
24+
private String originalBucket;
2525

26-
public record S3UploadResult(String key, String url) {
26+
@Value("${cloud.aws.s3.resize-bucket}")
27+
private String resizeBucket;
28+
29+
public record S3UploadResult(String key, String originalUrl, String resizedUrl) {
2730
}
2831

2932
@Bulkhead(name = "s3UploadBulkhead", type = Bulkhead.Type.THREADPOOL)
3033
@Async("s3UploadExecutor")
31-
public CompletableFuture<S3UploadResult> upload(String type, Long refId, MultipartFile file) { // TODO MultipartFile 분리 필요 (Spring에 의존하면 안 됨)
34+
public CompletableFuture<S3UploadResult> upload(String type, Long refId,
35+
MultipartFile file) { // TODO MultipartFile 분리 필요 (Spring에 의존하면 안 됨)
3236
try (InputStream inputStream = file.getInputStream()) {
3337
String key = createFileKey(type, refId, file.getOriginalFilename());
3438
ObjectMetadata metadata = new ObjectMetadata();
3539
metadata.setContentLength(file.getSize());
3640

37-
amazonS3Client.putObject(bucket, key, inputStream, metadata);
38-
String url = amazonS3Client.getUrl(bucket, key).toString();
41+
// 1) 원본 버킷에 이미지 업로드
42+
amazonS3Client.putObject(originalBucket, key, inputStream, metadata);
43+
44+
// 2) 각 버킷의 URL 생성
45+
String originalUrl = amazonS3Client.getUrl(originalBucket, key).toString();
46+
String resizedUrl = amazonS3Client.getUrl(resizeBucket, key).toString();
3947

40-
return CompletableFuture.completedFuture(new S3UploadResult(key, url));
48+
return CompletableFuture.completedFuture(new S3UploadResult(key, originalUrl, resizedUrl));
4149
} catch (Exception e) {
4250
throw new RuntimeException("S3 업로드 실패", e);
4351
}
4452
}
4553

46-
public void delete(String filename) {
54+
public void delete(String key) {
4755
try {
48-
amazonS3Client.deleteObject(bucket, filename);
56+
amazonS3Client.deleteObject(originalBucket, key);
57+
amazonS3Client.deleteObject(resizeBucket, key);
4958
} catch (Exception e) {
5059
throw new RuntimeException("S3 파일 삭제 실패", e);
5160
}

0 commit comments

Comments
 (0)