From a3f50309a7acccb9f27029416ca5016e57c15286 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Fri, 27 Dec 2024 18:19:53 +0900 Subject: [PATCH 01/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/uggthon/team01/config/SwaggerConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java index 857f644..a03283f 100644 --- a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java +++ b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java @@ -11,7 +11,7 @@ // Swagger 접속 주소 // http://localhost:8080/swagger-ui/index.html#/ -// https://{ip-address}:8080/swagger-ui/index.html +// https://16.171.3.150:8080/swagger-ui/index.html @Configuration public class SwaggerConfig { From 1aaf255b6bf3b3440e8f9df3b45264a21cd46062 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Fri, 27 Dec 2024 21:41:02 +0900 Subject: [PATCH 02/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/uggthon/team01/config/SwaggerConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java index a03283f..e67ac05 100644 --- a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java +++ b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java @@ -11,7 +11,7 @@ // Swagger 접속 주소 // http://localhost:8080/swagger-ui/index.html#/ -// https://16.171.3.150:8080/swagger-ui/index.html +// https://13.60.84.223:8080/swagger-ui/index.html @Configuration public class SwaggerConfig { @@ -26,7 +26,7 @@ public OpenAPI customOpenAPI() { localServer.setDescription("Local Server"); Server prodServer = new Server(); - prodServer.setUrl("https://16.171.3.150:8080/swagger-ui/index.html"); + prodServer.setUrl("https://13.60.84.223:8080/swagger-ui/index.html"); prodServer.setDescription("Production Server"); return new OpenAPI() From 46d27e489811b1417e78aafc2dcf56a8a1f50944 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Fri, 27 Dec 2024 21:44:11 +0900 Subject: [PATCH 03/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/uggthon/team01/config/SwaggerConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java index e67ac05..0ee0921 100644 --- a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java +++ b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java @@ -26,7 +26,7 @@ public OpenAPI customOpenAPI() { localServer.setDescription("Local Server"); Server prodServer = new Server(); - prodServer.setUrl("https://13.60.84.223:8080/swagger-ui/index.html"); + prodServer.setUrl("http://13.60.84.223:8080/swagger-ui/index.html"); prodServer.setDescription("Production Server"); return new OpenAPI() From d245b442221c68e023c3f8efb5253fe3b0965638 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Fri, 27 Dec 2024 21:49:43 +0900 Subject: [PATCH 04/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/uggthon/team01/config/SwaggerConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java index 0ee0921..e67ac05 100644 --- a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java +++ b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java @@ -26,7 +26,7 @@ public OpenAPI customOpenAPI() { localServer.setDescription("Local Server"); Server prodServer = new Server(); - prodServer.setUrl("http://13.60.84.223:8080/swagger-ui/index.html"); + prodServer.setUrl("https://13.60.84.223:8080/swagger-ui/index.html"); prodServer.setDescription("Production Server"); return new OpenAPI() From 5f1cba8941cf46bae14b8e9af6f08e24a0bdd2c6 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Fri, 27 Dec 2024 21:51:48 +0900 Subject: [PATCH 05/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 31ae8ad..f2d62a0 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -94,7 +94,7 @@ jobs: # 3. 최신 이미지를 컨테이너화하여 실행 - name: docker run new container - run: sudo docker run --name helfoome --rm -d -p 8080:8080 -e TZ=Asia/Seoul ${{ secrets.DOCKERHUB_USERNAME }}/team01 + run: sudo docker run --name team01 --rm -d -p 8080:8080 -e TZ=Asia/Seoul ${{ secrets.DOCKERHUB_USERNAME }}/team01 # 4. 미사용 이미지를 정리 - name: delete old docker image From 6934c3efa53f65df5a8055afd83b524116ec4a34 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Fri, 27 Dec 2024 23:05:38 +0900 Subject: [PATCH 06/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/uggthon/team01/config/SwaggerConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java index e67ac05..5890d96 100644 --- a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java +++ b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java @@ -11,7 +11,7 @@ // Swagger 접속 주소 // http://localhost:8080/swagger-ui/index.html#/ -// https://13.60.84.223:8080/swagger-ui/index.html +// https://13.60.182.19:8080/swagger-ui/index.html @Configuration public class SwaggerConfig { @@ -26,7 +26,7 @@ public OpenAPI customOpenAPI() { localServer.setDescription("Local Server"); Server prodServer = new Server(); - prodServer.setUrl("https://13.60.84.223:8080/swagger-ui/index.html"); + prodServer.setUrl("https://13.60.182.19:8080/swagger-ui/index.html"); prodServer.setDescription("Production Server"); return new OpenAPI() From 685bb48fdad3b606b813e860f71bbcfaa970cbbb Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Fri, 27 Dec 2024 23:41:55 +0900 Subject: [PATCH 07/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0f6ae90..1ed4222 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ -# JDK21 -FROM openjdk:21 +# JDK17 +FROM openjdk:17 # 인자 설정, jar 파일 복제 COPY build/libs/*.jar app.jar From 6d33d7c0006318305bc500eadcf1f5e5878b9f57 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Sat, 28 Dec 2024 00:25:59 +0900 Subject: [PATCH 08/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1ed4222..7874d52 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,17 @@ # JDK17 FROM openjdk:17 +# 환경 변수 설정 +ENV SPRING_APPLICATION_NAME=team01 \ + SERVER_PORT=8080 \ + SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver \ + SPRING_DATASOURCE_URL=jdbc:mysql://database-uggthon.c7qi28ak2iln.eu-north-1.rds.amazonaws.com:3306/uggthon?serverTimezone=UTC&characterEncoding=UTF-8 \ + SPRING_DATASOURCE_USERNAME=admin \ + SPRING_DATASOURCE_PASSWORD=uggthon12 \ + SPRING_JPA_HIBERNATE_DDL_AUTO=update + # 인자 설정, jar 파일 복제 COPY build/libs/*.jar app.jar # 실행 명령어 -ENTRYPOINT ["java", "-jar", "app.jar"] +ENTRYPOINT ["java", "-jar", "app.jar"] \ No newline at end of file From f98fef7dd5fa6686a6393514fe8a8575b7c64f28 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Sat, 28 Dec 2024 00:32:05 +0900 Subject: [PATCH 09/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 7874d52..e0cdd84 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ FROM openjdk:17 ENV SPRING_APPLICATION_NAME=team01 \ SERVER_PORT=8080 \ SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver \ - SPRING_DATASOURCE_URL=jdbc:mysql://database-uggthon.c7qi28ak2iln.eu-north-1.rds.amazonaws.com:3306/uggthon?serverTimezone=UTC&characterEncoding=UTF-8 \ + SPRING_DATASOURCE_URL="jdbc:mysql://database-uggthon.c7qi28ak2iln.eu-north-1.rds.amazonaws.com:3306/uggthon?serverTimezone=UTC&characterEncoding=UTF-8" \ SPRING_DATASOURCE_USERNAME=admin \ SPRING_DATASOURCE_PASSWORD=uggthon12 \ SPRING_JPA_HIBERNATE_DDL_AUTO=update From 110480ea20354ee8dfc32e78ffaaed111af42c0d Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Sat, 28 Dec 2024 00:40:11 +0900 Subject: [PATCH 10/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index b9fa8d7..c30b27a 100644 --- a/build.gradle +++ b/build.gradle @@ -36,7 +36,7 @@ dependencies { compileOnly 'org.projectlombok:lombok' // DB - runtimeOnly 'com.mysql:mysql-connector-j' + runtimeOnly 'com.mysql:mysql-connector-java' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' From 6513c5092304a0c17fbabdfd9411c6bb31d8dc56 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Sat, 28 Dec 2024 00:44:33 +0900 Subject: [PATCH 11/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c30b27a..9434dcb 100644 --- a/build.gradle +++ b/build.gradle @@ -36,7 +36,7 @@ dependencies { compileOnly 'org.projectlombok:lombok' // DB - runtimeOnly 'com.mysql:mysql-connector-java' + implementation 'mysql:mysql-connector-java:8.0.33' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' From d0c71a7d5b1ebe5a3f0feb07a4621ef94203ab1b Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Sat, 28 Dec 2024 00:54:58 +0900 Subject: [PATCH 12/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index e0cdd84..9eda918 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,6 @@ # JDK17 FROM openjdk:17 -# 환경 변수 설정 -ENV SPRING_APPLICATION_NAME=team01 \ - SERVER_PORT=8080 \ - SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver \ - SPRING_DATASOURCE_URL="jdbc:mysql://database-uggthon.c7qi28ak2iln.eu-north-1.rds.amazonaws.com:3306/uggthon?serverTimezone=UTC&characterEncoding=UTF-8" \ - SPRING_DATASOURCE_USERNAME=admin \ - SPRING_DATASOURCE_PASSWORD=uggthon12 \ - SPRING_JPA_HIBERNATE_DDL_AUTO=update - # 인자 설정, jar 파일 복제 COPY build/libs/*.jar app.jar From 35f4fd19719f83b9fe1f7e2e4c37e2dacc8ce318 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Sat, 28 Dec 2024 01:27:09 +0900 Subject: [PATCH 13/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/uggthon/team01/config/SwaggerConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java index 5890d96..fdc05e4 100644 --- a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java +++ b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java @@ -11,7 +11,7 @@ // Swagger 접속 주소 // http://localhost:8080/swagger-ui/index.html#/ -// https://13.60.182.19:8080/swagger-ui/index.html +// https://13.60.216.48:8080/swagger-ui/index.html @Configuration public class SwaggerConfig { @@ -26,7 +26,7 @@ public OpenAPI customOpenAPI() { localServer.setDescription("Local Server"); Server prodServer = new Server(); - prodServer.setUrl("https://13.60.182.19:8080/swagger-ui/index.html"); + prodServer.setUrl("https://13.60.216.48:8080/swagger-ui/index.html"); prodServer.setDescription("Production Server"); return new OpenAPI() From c174140458e9f5db903d7613197f8383dee5e982 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Sat, 28 Dec 2024 01:52:52 +0900 Subject: [PATCH 14/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/uggthon/team01/config/S3Config.java | 33 ++++++ .../uggthon/team01/config/SwaggerConfig.java | 2 +- .../com/uggthon/team01/service/S3Service.java | 111 ++++++++++++++++++ 3 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/uggthon/team01/config/S3Config.java create mode 100644 src/main/java/com/uggthon/team01/service/S3Service.java diff --git a/src/main/java/com/uggthon/team01/config/S3Config.java b/src/main/java/com/uggthon/team01/config/S3Config.java new file mode 100644 index 0000000..b08fc81 --- /dev/null +++ b/src/main/java/com/uggthon/team01/config/S3Config.java @@ -0,0 +1,33 @@ +package com.uggthon.team01.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.services.s3.AmazonS3Client; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; + +@Configuration +public class S3Config { + + @Value("${aws.credentials.access-key}") + private String accessKey; + + @Value("${aws.credentials.secret-key}") + private String secretKey; + + @Value("${aws.region}") + private String region; + + @Bean + public AmazonS3Client amazonS3Client() { + BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey); + return (AmazonS3Client) + AmazonS3ClientBuilder.standard() + .withRegion(region) + .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)) + .build(); + } +} diff --git a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java index fdc05e4..d3c1b15 100644 --- a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java +++ b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java @@ -26,7 +26,7 @@ public OpenAPI customOpenAPI() { localServer.setDescription("Local Server"); Server prodServer = new Server(); - prodServer.setUrl("https://13.60.216.48:8080/swagger-ui/index.html"); + prodServer.setUrl("http://13.60.216.48:8080/swagger-ui/index.html"); prodServer.setDescription("Production Server"); return new OpenAPI() diff --git a/src/main/java/com/uggthon/team01/service/S3Service.java b/src/main/java/com/uggthon/team01/service/S3Service.java new file mode 100644 index 0000000..84b9db2 --- /dev/null +++ b/src/main/java/com/uggthon/team01/service/S3Service.java @@ -0,0 +1,111 @@ +package com.uggthon.team01.service; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.UUID; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import com.amazonaws.auth.AWSStaticCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.regions.Regions; +import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.AmazonS3ClientBuilder; +import com.amazonaws.services.s3.model.CannedAccessControlList; +import com.amazonaws.services.s3.model.PutObjectRequest; + +import lombok.extern.slf4j.Slf4j; + +// 이 서비스는 데베에 저장하는 서비스 X +// S3에 실제 파일을 업로드 (이름 겹치치 않게 파일이름 = 날짜-파일이름 으로 변경해서 올리는 기능) +// 이미지를 업로드할 일이 생기면 본인 서비스에서 요기 함수 호출해서 s3에 파일 업로드하고 +// 파일 경로랑 원본 파일명은 호출한 서비스에서 따로 저장해주셔야됭미 + +@Slf4j +@Service +public class S3Service { + + private final AmazonS3 s3Client; + + @Value("${aws.s3.bucket}") + private String bucketName; + + public S3Service( + @Value("${aws.credentials.access-key}") String accessKey, + @Value("${aws.credentials.secret-key}") String secretKey, + @Value("${aws.region}") String region) { + BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey); + this.s3Client = + AmazonS3ClientBuilder.standard() + .withRegion(Regions.fromName(region)) + .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) + .build(); + } + + // dirName은 S3의 어떤 폴더인지 같이 넣어주면 됨 예를들면 profileImage.. shopImage.....etc + public String upload(MultipartFile multipartFile, String dirName) throws IOException { + String originalFileName = multipartFile.getOriginalFilename(); + String uuid = UUID.randomUUID().toString(); + String uniqueFileName = uuid + "_" + originalFileName.replaceAll("\\s", "_"); + + String fileName = dirName + "/" + uniqueFileName; + log.info("fileName: " + fileName); + + File uploadFile = convert(multipartFile); + String uploadImageUrl = putS3(uploadFile, fileName); + removeNewFile(uploadFile); + return uploadImageUrl; + } + + private File convert(MultipartFile file) throws IOException { + File convertFile = new File(file.getOriginalFilename()); + if (convertFile.createNewFile()) { + try (FileOutputStream fos = new FileOutputStream(convertFile)) { + fos.write(file.getBytes()); + } + return convertFile; + } + throw new IllegalArgumentException("파일 변환에 실패했습니다: " + file.getOriginalFilename()); + } + + private String putS3(File uploadFile, String fileName) { + s3Client.putObject( + new PutObjectRequest(bucketName, fileName, uploadFile) + .withCannedAcl(CannedAccessControlList.PublicRead)); + return s3Client.getUrl(bucketName, fileName).toString(); + } + + // 전환할 때 임시파일이 생성돼서 삭제해야함 + private void removeNewFile(File targetFile) { + if (targetFile.delete()) { + log.info("파일이 삭제되었습니다."); + } else { + log.info("파일이 삭제되지 못했습니다."); + } + } + + public void deleteFile(String fileName) { + try { + // URL 디코딩을 통해 원래의 파일 이름을 가져옴 + String decodedFileName = URLDecoder.decode(fileName, "UTF-8"); + log.info("Deleting file from S3: " + decodedFileName); + s3Client.deleteObject(bucketName, decodedFileName); + } catch (UnsupportedEncodingException e) { + log.error("Error while decoding the file name: {}", e.getMessage()); + } + } + + public String updateFile(MultipartFile newFile, String oldFileName, String dirName) + throws IOException { + // 기존 파일 삭제 + log.info("S3 oldFileName: " + oldFileName); + deleteFile(oldFileName); + // 새 파일 업로드 + return upload(newFile, dirName); + } +} From d309fa1a6737ae53cbb01bc859732a1da6f8d6cf Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Sat, 28 Dec 2024 02:09:03 +0900 Subject: [PATCH 15/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/uggthon/team01/config/SwaggerConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java index d3c1b15..f29fb8b 100644 --- a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java +++ b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java @@ -11,7 +11,7 @@ // Swagger 접속 주소 // http://localhost:8080/swagger-ui/index.html#/ -// https://13.60.216.48:8080/swagger-ui/index.html +// https://16.171.7.237:8080/swagger-ui/index.html @Configuration public class SwaggerConfig { @@ -26,7 +26,7 @@ public OpenAPI customOpenAPI() { localServer.setDescription("Local Server"); Server prodServer = new Server(); - prodServer.setUrl("http://13.60.216.48:8080/swagger-ui/index.html"); + prodServer.setUrl("http://16.171.7.237:8080/swagger-ui/index.html"); prodServer.setDescription("Production Server"); return new OpenAPI() From 85356a31ef52f29432e6981d32b171e1a5f42431 Mon Sep 17 00:00:00 2001 From: YoonHeeJun Date: Sat, 28 Dec 2024 02:41:47 +0900 Subject: [PATCH 16/16] =?UTF-8?q?:rocket:=20Deploy:=20=EB=B0=B0=ED=8F=AC?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/uggthon/team01/config/SwaggerConfig.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java index f29fb8b..b40ab60 100644 --- a/src/main/java/com/uggthon/team01/config/SwaggerConfig.java +++ b/src/main/java/com/uggthon/team01/config/SwaggerConfig.java @@ -11,7 +11,7 @@ // Swagger 접속 주소 // http://localhost:8080/swagger-ui/index.html#/ -// https://16.171.7.237:8080/swagger-ui/index.html +// https://13.60.193.191:8080/swagger-ui/index.html @Configuration public class SwaggerConfig { @@ -26,7 +26,7 @@ public OpenAPI customOpenAPI() { localServer.setDescription("Local Server"); Server prodServer = new Server(); - prodServer.setUrl("http://16.171.7.237:8080/swagger-ui/index.html"); + prodServer.setUrl("http://13.60.193.191:8080/swagger-ui/index.html"); prodServer.setDescription("Production Server"); return new OpenAPI()