Skip to content

Commit

Permalink
Merge pull request #57 from Team-Lecue/feat/#56-add_image_cache
Browse files Browse the repository at this point in the history
[FEAT] 기존 S3 url을 CloudFront를 통한 url로 변경
  • Loading branch information
dong2ast authored Jan 15, 2024
2 parents a29341f + 3c5be42 commit 010dbca
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 28 deletions.
15 changes: 7 additions & 8 deletions src/main/java/org/sopt/lequuServer/InitDb.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ public void init() {
}

private static final List<String> CHARACTER_STICKERS = Arrays.asList(
"https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/character_1.svg",
"https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/character_2.svg",
"https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/character_3.svg",
"https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/character_4.svg",
"https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/character_5.svg",
"https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/stickers/character_6.svg"
"https://dzfv99wxq6tx0.cloudfront.net/stickers/character_1.svg",
"https://dzfv99wxq6tx0.cloudfront.net/stickers/character_2.svg",
"https://dzfv99wxq6tx0.cloudfront.net/stickers/character_3.svg",
"https://dzfv99wxq6tx0.cloudfront.net/stickers/character_4.svg",
"https://dzfv99wxq6tx0.cloudfront.net/stickers/character_5.svg",
"https://dzfv99wxq6tx0.cloudfront.net/stickers/character_6.svg"
);

@Component
Expand All @@ -55,7 +55,6 @@ public void dbInit() {
.socialPlatform(SocialPlatform.KAKAO)
.socialId("3251153440")
.build();
member1.updateNickname("레큐");
member1.updateSocialInfo("레큐", "http://k.kakaocdn.net/dn/1G9kp/btsAot8liOn/8CWudi3uy07rvFNUkk3ER0/img_640x640.jpg");
em.persist(member1);

Expand Down Expand Up @@ -169,4 +168,4 @@ private boolean isDatabaseEmpty() {
return count == 0;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package org.sopt.lequuServer.domain.book.facade;

import static org.sopt.lequuServer.global.s3.enums.ImageFolderName.BOOK_FAVORITE_IMAGE_FOLDER_NAME;

import java.util.List;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.sopt.lequuServer.domain.book.dto.request.BookCreateRequestDto;
import org.sopt.lequuServer.domain.book.dto.response.BookCreateResponseDto;
Expand All @@ -18,11 +22,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.UUID;

import static org.sopt.lequuServer.global.s3.enums.ImageFolderName.BOOK_FAVORITE_IMAGE_FOLDER_NAME;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
Expand Down Expand Up @@ -52,7 +51,9 @@ public BookCreateResponseDto createBook(BookCreateRequestDto request, Long membe
// UUID 생성
String bookUuid = UUID.randomUUID().toString();
// Presigned URL 이미지 업로드하기 위한 이미지 파일명 가져오기
String imageUrl = s3Service.getURL(BOOK_FAVORITE_IMAGE_FOLDER_NAME.getValue() + request.favoriteImage());
// String imageUrl = s3Service.getURL(BOOK_FAVORITE_IMAGE_FOLDER_NAME.getValue() + request.favoriteImage());
String imageUrl = s3Service.getCloudFrontURL(
BOOK_FAVORITE_IMAGE_FOLDER_NAME.getValue() + request.favoriteImage());

Book book = Book.builder()
.uuid(bookUuid)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.sopt.lequuServer.domain.note.facade;

import static org.sopt.lequuServer.global.s3.enums.ImageFolderName.NOTE_BACKGROUND_IMAGE_FOLDER_NAME;

import lombok.RequiredArgsConstructor;
import org.sopt.lequuServer.domain.book.model.Book;
import org.sopt.lequuServer.domain.book.repository.BookRepository;
Expand All @@ -13,8 +15,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import static org.sopt.lequuServer.global.s3.enums.ImageFolderName.NOTE_BACKGROUND_IMAGE_FOLDER_NAME;

@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
Expand All @@ -32,7 +32,8 @@ public NoteCreateResponseDto createNote(Long userId, NoteCreateDto noteCreateDto

String background = noteCreateDto.background();
if (background.endsWith(".jpg")) {
background = s3Service.getURL(NOTE_BACKGROUND_IMAGE_FOLDER_NAME.getValue() + noteCreateDto.background());
// background = s3Service.getURL(NOTE_BACKGROUND_IMAGE_FOLDER_NAME.getValue() + noteCreateDto.background());
background = s3Service.getCloudFrontURL(NOTE_BACKGROUND_IMAGE_FOLDER_NAME.getValue() + noteCreateDto.background());
}

return noteService.saveNote(Note.of(noteCreateDto.content(), background, noteCreateDto.textColor(), member, book), member, book);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class PreSignedUrlResponse {
@Schema(description = "반환된 Presigned URL로 PUT 하면 저장될 이미지 제목", example = "60c49750-0b2f-4fad-b340-9ffbb0074ebf.jpg")
private String fileName;

@Schema(description = "PUT 해야하는 Presigned URL", example = "https://lequu-server-bucket.s3.ap-northeast-2.amazonaws.com/books/favorite_image/60c49750-0b2f-4fad-b340-9ffbb0074ebf.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240109T033832Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=AKIA522AYZTVU66QK4A2%2F20240109%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Signature=eb628c3d15f9056b82436ff73dd8714071fa43ad97b0073ef0ca182d5ee074c2")
@Schema(description = "PUT 해야하는 Presigned URL", example = "https://dzfv99wxq6tx0.cloudfront.net/books/favorite_image/60c49750-0b2f-4fad-b340-9ffbb0074ebf.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240109T033832Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=AKIA522AYZTVU66QK4A2%2F20240109%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Signature=eb628c3d15f9056b82436ff73dd8714071fa43ad97b0073ef0ca182d5ee074c2")
private String url;

public static PreSignedUrlResponse of(String fileName, String url) {
Expand Down
27 changes: 17 additions & 10 deletions src/main/java/org/sopt/lequuServer/global/s3/service/S3Service.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
package org.sopt.lequuServer.global.s3.service;

import static org.sopt.lequuServer.global.exception.enums.ErrorType.GET_UPLOAD_PRESIGNED_URL_ERROR;
import static org.sopt.lequuServer.global.exception.enums.ErrorType.IMAGE_EXTENSION_ERROR;
import static org.sopt.lequuServer.global.exception.enums.ErrorType.IMAGE_SIZE_ERROR;

import java.io.IOException;
import java.net.URL;
import java.time.Duration;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import lombok.val;
import org.sopt.lequuServer.global.config.AWSConfig;
import org.sopt.lequuServer.global.exception.model.CustomException;
Expand All @@ -16,19 +26,11 @@
import software.amazon.awssdk.services.s3.presigner.S3Presigner;
import software.amazon.awssdk.services.s3.presigner.model.PutObjectPresignRequest;

import java.io.IOException;
import java.net.URL;
import java.time.Duration;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;

import static org.sopt.lequuServer.global.exception.enums.ErrorType.*;

@Service
public class S3Service {

private final String bucketName;
private final String cloudFront;
private final AWSConfig awsConfig;

// 파일 확장자 제한 jpeg, png, jpg, webp
Expand All @@ -38,8 +40,9 @@ public class S3Service {
// PreSigned URL 만료시간 60분
private static final Long PRE_SIGNED_URL_EXPIRE_MINUTE = 60L;

public S3Service(@Value("${cloud.aws.credentials.s3-bucket-name}") final String bucketName, AWSConfig awsConfig) {
public S3Service(@Value("${cloud.aws.credentials.s3-bucket-name}") final String bucketName, @Value("${cloud.aws.credentials.cloud-front}") final String cloudFront, AWSConfig awsConfig) {
this.bucketName = bucketName;
this.cloudFront = cloudFront;
this.awsConfig = awsConfig;
}

Expand Down Expand Up @@ -150,4 +153,8 @@ public String getURL(final String imageKey) {
throw new RuntimeException(e.getMessage());
}
}

public String getCloudFrontURL(final String imageKey) {
return "https://" + cloudFront + "/" + imageKey;
}
}
1 change: 1 addition & 0 deletions src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ cloud:
secretKey: ${SECRET_KEY}
aws-region: ap-northeast-2
s3-bucket-name: ${BUCKET_NAME}
cloud-front: ${CLOUD_FRONT}

springdoc:
packages-to-scan: org.sopt.lequuServer
Expand Down

0 comments on commit 010dbca

Please sign in to comment.