Skip to content

Commit f11faf2

Browse files
skyeong42seoyeonson
authored andcommitted
Feat: S3 log ์ถ”๊ฐ€
1 parent d1ca8ff commit f11faf2

File tree

1 file changed

+39
-10
lines changed

1 file changed

+39
-10
lines changed
Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package cmf.commitField.global.aws.s3;
22

33
import lombok.RequiredArgsConstructor;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
46
import org.springframework.stereotype.Service;
57
import org.springframework.web.multipart.MultipartFile;
68
import software.amazon.awssdk.core.sync.RequestBody;
@@ -11,29 +13,55 @@
1113
import java.io.IOException;
1214
import java.util.UUID;
1315

16+
1417
@Service
1518
@RequiredArgsConstructor
1619
public class S3Service {
1720
private final S3Client s3Client;
1821
private static final String BUCKET_NAME = "cmf-bucket-dev-seoyeon-1";
1922
private static final String REGION = "ap-northeast-2";
23+
private static final long MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB
24+
private final Logger logger = LoggerFactory.getLogger(S3Service.class.getName());
2025

2126
// ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ
2227
public String uploadFile(MultipartFile file, String dirName) throws IOException {
23-
String fileName = dirName + "/" + UUID.randomUUID() + "_" + file.getOriginalFilename();
24-
PutObjectRequest putObjectRequest = PutObjectRequest.builder()
25-
.bucket(BUCKET_NAME)
26-
.key(fileName)
27-
.contentType(file.getContentType())
28-
// .acl(ObjectCannedACL.PUBLIC_READ) // Public Read ๊ถŒํ•œ ์ถ”๊ฐ€
29-
.build();
28+
try {
29+
30+
// ํŒŒ์ผ ํฌ๊ธฐ ๊ฒ€์ฆ
31+
validateFileSize(file);
3032

31-
s3Client.putObject(putObjectRequest,
32-
RequestBody.fromInputStream(file.getInputStream(), file.getSize()));
33+
// UUID๋กœ ๊ณ ์œ ํ•œ ํŒŒ์ผ๋ช… ์ƒ์„ฑ
34+
String fileName = dirName + "/" + UUID.randomUUID() + "_" + file.getOriginalFilename();
35+
// PutObjectRequest ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
36+
PutObjectRequest putObjectRequest = PutObjectRequest.builder()
37+
.bucket(BUCKET_NAME)
38+
.key(fileName)
39+
.contentType(file.getContentType())
40+
// .acl(ObjectCannedACL.PUBLIC_READ) // Public Read ๊ถŒํ•œ ์ถ”๊ฐ€
41+
.build();
42+
// ํŒŒ์ผ S3์— ์—…๋กœ๋“œ
43+
s3Client.putObject(putObjectRequest,
44+
RequestBody.fromInputStream(file.getInputStream(), file.getSize()));
45+
logger.info("ํŒŒ์ผ ์—…๋กœ๋“œ ์„ฑ๊ณต");
3346

34-
return "https://" + BUCKET_NAME + ".s3." + REGION + ".amazonaws.com/" + fileName;
47+
// S3 ํŒŒ์ผ URL ๋ฐ˜ํ™˜
48+
return "https://" + BUCKET_NAME + ".s3." + REGION + ".amazonaws.com/" + fileName;
49+
50+
} catch (IOException e) {
51+
logger.error("ํŒŒ์ผ ์—…๋กœ๋“œ ์‹คํŒจ: {}", e.getMessage());
52+
throw new IOException("ํŒŒ์ผ ์—…๋กœ๋“œ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ", e);
53+
}
54+
}
55+
56+
// ํŒŒ์ผ ํฌ๊ธฐ ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ
57+
private void validateFileSize(MultipartFile file) throws IOException {
58+
if (file.getSize() > MAX_FILE_SIZE) {
59+
throw new IOException("ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ 5MB๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ์—…๋กœ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
60+
}
3561
}
3662

63+
64+
3765
// ํŒŒ์ผ ์‚ญ์ œ ๊ธฐ๋Šฅ
3866
public void deleteFile(String fileName) {
3967
DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder()
@@ -42,5 +70,6 @@ public void deleteFile(String fileName) {
4270
.build();
4371

4472
s3Client.deleteObject(deleteObjectRequest);
73+
logger.info("ํŒŒ์ผ ์‚ญ์ œ ์„ฑ๊ณต: {}", fileName);
4574
}
4675
}

0 commit comments

Comments
ย (0)