diff --git a/src/main/java/ongjong/namanmoo/service/AwsS3Service.java b/src/main/java/ongjong/namanmoo/service/AwsS3Service.java index a7de7ed..4069b2a 100644 --- a/src/main/java/ongjong/namanmoo/service/AwsS3Service.java +++ b/src/main/java/ongjong/namanmoo/service/AwsS3Service.java @@ -28,22 +28,43 @@ public class AwsS3Service { private final AmazonS3 amazonS3Client; private final String bucket; - + private final String region; + + /** + * AwsS3Service 생성자. + * + * @param accessKeyId AWS 액세스 키 ID + * @param secretKey AWS 시크릿 액세스 키 + * @param bucket S3 버킷 이름 + * @param region AWS 리전 + */ public AwsS3Service( - @Value("${cloud.aws.credentials.access-key}") String accessKeyId, @Value("${cloud.aws.credentials.secret-key}") String secretKey, @Value("${cloud.aws.s3.bucket}") String bucket, @Value("${cloud.aws.region.static}") String region) { + // AWS 인증 정보 생성 BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKeyId, secretKey); + + // AmazonS3 클라이언트 생성 this.amazonS3Client = AmazonS3ClientBuilder.standard() .withRegion(region) .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) .build(); + + // 필드 초기화 this.bucket = bucket; + this.region = region; } + /** + * MultipartFile을 S3에 업로드하고 업로드된 파일의 URL을 반환하는 메소드. + * + * @param multipartFile 업로드할 MultipartFile + * @return 업로드된 파일의 URL + * @throws IOException 파일 변환 또는 업로드 중 발생하는 예외 + */ public String uploadFile(MultipartFile multipartFile) throws IOException { log.debug("Converting MultipartFile to File..."); File uploadFile = convertFile(multipartFile) @@ -59,6 +80,13 @@ public String uploadFile(MultipartFile multipartFile) throws IOException { return uploadImageUrl; } + /** + * MultipartFile을 File 객체로 변환하는 메소드. + * + * @param file 변환할 MultipartFile + * @return Optional 변환된 File 객체를 포함하는 Optional + * @throws IOException 파일 변환 중 발생하는 예외 + */ private Optional convertFile(MultipartFile file) throws IOException { String fileName = UUID.randomUUID() + "_" + file.getOriginalFilename(); File convertFile = new File(fileName); @@ -73,10 +101,23 @@ private Optional convertFile(MultipartFile file) throws IOException { return Optional.empty(); } + /** + * 업로드될 파일의 고유한 파일 이름을 생성하는 메소드. + * + * @param uploadFile 업로드할 파일 + * @return String 고유한 파일 이름 + */ private String generateFileName(File uploadFile) { return UUID.randomUUID() + "_" + uploadFile.getName(); } + /** + * S3에 파일을 업로드하고 업로드된 파일의 URL을 반환하는 메소드. + * + * @param uploadFile 업로드할 파일 + * @param fileName 업로드할 파일의 이름 + * @return 업로드된 파일의 URL + */ private String uploadFileToS3(File uploadFile, String fileName) { amazonS3Client.putObject( new PutObjectRequest(bucket, fileName, uploadFile) @@ -88,11 +129,22 @@ private String uploadFileToS3(File uploadFile, String fileName) { return getS3FileURL(fileName); } + /** + * 업로드된 파일의 URL을 생성하는 메소드. + * + * @param fileName 파일 이름 + * @return 업로드된 파일의 URL + */ private String getS3FileURL(String fileName) { - String defaultUrl = "https://s3.amazonaws.com/"; - return defaultUrl + bucket + "/" + fileName; + String defaultUrl = String.format("https://%s.s3.%s.amazonaws.com/", bucket, region); + return defaultUrl + fileName; } + /** + * 임시 파일을 삭제하는 메소드. + * + * @param targetFile 삭제할 파일 + */ private void removeNewFile(File targetFile) { if (targetFile.delete()) { log.info("File delete success"); @@ -101,8 +153,13 @@ private void removeNewFile(File targetFile) { } } + /** + * S3에서 파일을 삭제하는 메소드. + * + * @param fileName 삭제할 파일의 이름 + */ public void delete(String fileName) { log.info("File Delete : " + fileName); amazonS3Client.deleteObject(bucket, fileName); } -} +} \ No newline at end of file