-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[BSVR-68] 미디어 업로드를 위한 presigned url 생성 컴포넌트 #16
Conversation
import lombok.Getter; | ||
|
||
@Getter | ||
public enum ImageExtension { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
1차 MVP에서는 영상을 관리하지 않기 때문에, 이미지 확장자만 추가했어!
안드에게 문의해보니 보통 사진이 jpg, jpeg, png로 들어온다고 답변 받아서 요 값들로 enum 생성한 상태!
import lombok.Getter; | ||
|
||
@Getter | ||
public enum StadiumSeatMediaExtension { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
공연장 좌석 배치도를 관리하기 위한 확장자 enum!
1차 MVP에서 좌석 배치도는 디자인 파트에서 코드 삽입한 svg 파일만 사용할 수 있어.
@Service | ||
@Builder | ||
@RequiredArgsConstructor | ||
public class FileNameGenerator { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
presigned url 생성할 때 버켓과 키 값이 필요해. 키에 활용할 파일 이름 생성자를 컴포넌트로 분리했어.
private final ReviewStorageProperties reviewStorageProperties; | ||
private final StadiumStorageProperties stadiumStorageProperties; | ||
|
||
private static final long EXPIRE_MS = 1000 * 60 * 2L; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
presigned url을 서버가 발급해주면 클라이언트가 해당 url로 바로 파일을 업로드하는 구조!
이때 발급한 Url이 얼마동안 유효한지 만료 시간을 정해주어야 해.
이미지 업로드 플로우를 생각해보면 url을 받고 바로 파일 업로드가 이루어질테니까, 넉넉하게 2분 정도로 설정했어~
@Bean | ||
@Primary | ||
@Override | ||
public AmazonS3 getAmazonS3() { | ||
return Mockito.mock(AmazonS3.class); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PresignedUrlGenerator 테스트를 위해 추가한 Fake!
어차피 S3 메서드는 S3에서 잘 테스트해주었을테니까, 굳이 우리가 테스트를 위해 실제로 S3에 요청을 보낼 필요는 없다고 생각했어.
FakeAmazonS3Config가 ObjectStorageConfig를 상속받기 때문에, Test 프로파일이어도 실제 AmazonS3가 빈에 등록될 수 있어. 그래서 FakeConfig에는 @primary로 우선순위를 설정해서 빈이 먼저 등록되게 하고, @Profile("test")를 이용해서 테스트 프로파일일 때만 동작하게 처리했어.
import lombok.RequiredArgsConstructor; | ||
|
||
@RequiredArgsConstructor | ||
public class FakeTimeUsecase implements TimeUsecase { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
파일 이름 생성기에서 LocalDateTime.now()를 이용하기 때문에, 테스트하기 쉽도록 Fake 구현체를 만들었어.
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.Test; | ||
|
||
class PresignedUrlGeneratorTest { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이걸 테스트하는게 맞을까? 뭘 테스트 해야 할까?? << 고민하다가, 예외 처리만 검증해주기로 결정..!
어차피 presigned url은 amazon s3 메서드를 사용하기 때문에, 인자만 잘 던져주면 잘 생성될 거라고 생각했어.
따라서 의도한대로 예외처리가 잘 되는지만 테스트 코드로 검증해주었어.
This PR exceeds the recommended size of 1000 lines. Please make sure you are NOT addressing multiple issues with one PR. Note this PR might be rejected due to its size. |
This PR exceeds the recommended size of 1000 lines. Please make sure you are NOT addressing multiple issues with one PR. Note this PR might be rejected due to its size. |
📌 개요 (필수)
🔨 작업 사항 (필수)
🌱 연관 내용 (선택)
💻 실행 화면 (필수)