Skip to content

Commit b8e9b57

Browse files
committed
⚡ MarkSphere v1.0.12
스케줄링 코드 AWS Lambda, CloudWatch로 이전 CloudFront 도입
1 parent 5e3eb0d commit b8e9b57

10 files changed

Lines changed: 22 additions & 115 deletions

File tree

scripts/deploy.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export AWS_ACCESS_KEY=$(aws ssm get-parameter --name "/marksphere/aws-access-key
1111
export AWS_SECRET_KEY=$(aws ssm get-parameter --name "/marksphere/aws-secret-key" --with-decryption --query "Parameter.Value" --output text)
1212
export REDIS_HOST=$(aws ssm get-parameter --name "/marksphere/redis-host" --with-decryption --query "Parameter.Value" --output text)
1313
export LAMBDA_FUNCTION_NAME=$(aws ssm get-parameter --name "/marksphere/lambda-function-name" --with-decryption --query "Parameter.Value" --output text)
14+
export AWS_CLOUDFRONT_DOMAIN=$(aws ssm get-parameter --name "/marksphere/aws-cloudfront-domain" --with-decryption --query "Parameter.Value" --output text)
1415

1516
JAR_NAME=$(ls $REPOSITORY/build/libs/ | grep '.jar' | tail -n 1)
1617
JAR_PATH=$REPOSITORY/build/libs/$JAR_NAME

src/main/java/com/sonkim/bookmarking/common/s3/service/S3Service.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,13 @@
1212
import software.amazon.awssdk.services.lambda.model.InvokeRequest;
1313
import software.amazon.awssdk.services.lambda.model.InvokeResponse;
1414
import software.amazon.awssdk.services.s3.S3Client;
15-
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
1615
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
1716
import software.amazon.awssdk.services.s3.presigner.S3Presigner;
18-
import software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest;
19-
import software.amazon.awssdk.services.s3.presigner.model.PresignedGetObjectRequest;
2017
import software.amazon.awssdk.services.s3.presigner.model.PresignedPutObjectRequest;
2118
import software.amazon.awssdk.services.s3.presigner.model.PutObjectPresignRequest;
2219

23-
import java.net.URL;
20+
import java.net.URLEncoder;
21+
import java.nio.charset.StandardCharsets;
2422
import java.time.Duration;
2523
import java.util.HashMap;
2624
import java.util.Map;
@@ -39,6 +37,9 @@ public class S3Service {
3937
@Value("${aws.lambda.function-name}")
4038
private String lambdaFunctionName;
4139

40+
@Value("${aws.cloudfront.domain}")
41+
private String cloudFrontDomain;
42+
4243
public S3Service(S3Client s3Client, @Value("${aws.s3.bucket-name}") String bucketName, S3Presigner s3Presigner, LambdaClient lambdaClient, ObjectMapper objectMapper) {
4344
this.s3Client = s3Client;
4445
this.bucketName = bucketName;
@@ -47,19 +48,16 @@ public S3Service(S3Client s3Client, @Value("${aws.s3.bucket-name}") String bucke
4748
this.objectMapper = objectMapper;
4849
}
4950

50-
public URL generatePresignedGetUrl(String prefix, String key) {
51-
GetObjectRequest getObjectRequest = GetObjectRequest.builder()
52-
.bucket(bucketName)
53-
.key(prefix + key)
54-
.build();
55-
56-
GetObjectPresignRequest getObjectPresignRequest = GetObjectPresignRequest.builder()
57-
.signatureDuration(Duration.ofMinutes(10))
58-
.getObjectRequest(getObjectRequest)
59-
.build();
51+
public String generateImageUrl(String prefix, String key) {
52+
try {
53+
String encodedKey = URLEncoder.encode(key, StandardCharsets.UTF_8)
54+
.replace("+", "%20");
6055

61-
PresignedGetObjectRequest presignedGetObjectRequest = s3Presigner.presignGetObject(getObjectPresignRequest);
62-
return presignedGetObjectRequest.url();
56+
return cloudFrontDomain + "/" + prefix + encodedKey;
57+
} catch (Exception e) {
58+
log.error("Failed to encode key: {}", key, e);
59+
return cloudFrontDomain + "/" + prefix + key;
60+
}
6361
}
6462

6563
public PresignedUrlDto generatePresignedPutUrl(String fileName) {

src/main/java/com/sonkim/bookmarking/common/scheduler/S3CleanupScheduler.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

src/main/java/com/sonkim/bookmarking/common/scheduler/TagCleanupScheduler.java

Lines changed: 0 additions & 21 deletions
This file was deleted.

src/main/java/com/sonkim/bookmarking/common/scheduler/TeamCleanupScheduler.java

Lines changed: 0 additions & 28 deletions
This file was deleted.

src/main/java/com/sonkim/bookmarking/domain/bookmark/service/BookmarkService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ public List<BookmarkResponseDto> enrichBookmarksWithDetails(List<Bookmark> bookm
323323

324324
private String getFinalImageUrl(Bookmark bookmark) {
325325
if (bookmark.getImageKey() != null) {
326-
return s3Service.generatePresignedGetUrl("bookmarks/", bookmark.getImageKey()).toString();
326+
return s3Service.generateImageUrl("bookmarks/", bookmark.getImageKey());
327327
} else if (bookmark.getOriginalImageUrl() != null) {
328328
return bookmark.getOriginalImageUrl();
329329
}

src/main/java/com/sonkim/bookmarking/domain/comment/service/CommentService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ private CommentDto.AuthorInfo getAuthorInfo(User user) {
216216
String imageKey = user.getProfile().getImageKey();
217217

218218
if (imageKey != null && !imageKey.isBlank()) {
219-
imageUrl = s3Service.generatePresignedGetUrl("profile-images/", imageKey).toString();
219+
imageUrl = s3Service.generateImageUrl("profile-images/", imageKey);
220220
}
221221

222222
return CommentDto.AuthorInfo.builder()

src/main/java/com/sonkim/bookmarking/domain/mypage/service/MyPageService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public MyProfileDto.MyProfileResponseDto getMyProfile(Long userId) {
5353
String imageKey = user.getProfile().getImageKey();
5454

5555
if (imageKey != null) {
56-
imageUrl = s3Service.generatePresignedGetUrl("profile-images/", imageKey).toString();
56+
imageUrl = s3Service.generateImageUrl("profile-images/", imageKey);
5757
}
5858

5959
// DTO로 변환하여 반환

src/main/java/com/sonkim/bookmarking/domain/team/service/TeamMemberService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public List<TeamMemberDto.MemberResponseDto> getTeamMembers(Long teamId) {
7878
String imageUrl = null;
7979
String imageKey = member.getUser().getProfile().getImageKey();
8080
if (imageKey != null && !imageKey.isBlank()) {
81-
imageUrl = s3Service.generatePresignedGetUrl("profile-images/", member.getUser().getProfile().getImageKey()).toString();
81+
imageUrl = s3Service.generateImageUrl("profile-images/", member.getUser().getProfile().getImageKey());
8282
}
8383

8484
return TeamMemberDto.MemberResponseDto.builder()

src/main/resources/application.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ aws.s3.bucket-name=socialbookmarking-bucket
2727
# AWS Lambda
2828
aws.lambda.function-name=${LAMBDA_FUNCTION_NAME}
2929

30+
# AWS CloudFront
31+
aws.cloudfront.domain=${AWS_CLOUDFRONT_DOMAIN}
32+
3033
spring.data.redis.host=${REDIS_HOST}
3134
spring.data.redis.port=6379
3235

0 commit comments

Comments
 (0)