Closed cotchan closed 2 years ago
S3
img.jpg
presigned_url
image_name
request 예시
{ "img_files": ["test1.jpg"] }
response 예시
{ "origin_name": "test1.jpg", "image_name": "15785614-e0e9-4d4f-97aa-9a09abb05a6dtest1.jpg", "presigned_url": "https://project-club-bucket.s3.ap-northeast-2.amazonaws.com/chat-image/15785614-e0e9-4d4f-97aa-9a09abb05a6dtest1.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20220626T084527Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=AKIA4EAIYFA45U7IOW6L%2F20220626%2Fap-northeast-2%2Fs3%2Faws4_request&X-Amz-Signature=20efb322e9ae20ccc939afd1f9e18352266b1d449d7b123b1c16ad84f5f0c924" }
복수개의 이미지
String message
List<String> imgUrls
Optional
message
@Getter @NoArgsConstructor public class ChatMessage { private Long senderId; private MessageType messageType; private String message; private List<String> imgUrls = new ArrayList<>(); private LocalDateTime createdAt; public Optional<String> getMessage() { return ofNullable(message); } public static ChatMessage ofMessage(Long senderId, MessageType messageType, String message) { checkArgument(senderId != null, "senderId 값은 필수입니다."); checkArgument(messageType != null, "messageType 값은 필수입니다."); checkArgument(isNotEmpty(message), "message 값은 필수입니다."); return ChatMessage.builder() .senderId(senderId) .messageType(messageType) .message(message) .imgUrls(null) .build(); } public static ChatMessage ofImage(Long senderId, List<String> imgUrls) { checkArgument(senderId != null, "senderId 값은 필수입니다."); checkArgument(imgUrls != null, "imgUrls 값은 필수입니다."); checkArgument(imgUrls.size() <= 10, "message 값은 필수입니다."); return ChatMessage.builder() .senderId(senderId) .messageType(MessageType.IMAGE) .message(null) .imgUrls(imgUrls) .build(); } //... }
작업내용
PR
83
84
목차
채팅방에서 '이미지' 전송 시 sync를 맞출 수 있도록 추가 API 개발
문제상황
S3
에서 조회 가능해결방법
img.jpg
파일에 대해 이미지를 실제 저장할presigned_url
과 메시지 전송 시 사용할image_name
을 함께 리턴request 예시
response 예시
채팅방에서 '이미지' 복수 개 전송할 수 있도록 처리
문제상황
복수개의 이미지
를 한 번에 보내기 위한 코드 수정이 필요String message
하나로 처리했지만 추가적인 이미지 요청은List<String> imgUrls
필드가 필요String message
로 정의하여 하나씩 보낼 수도 있지만 해당 방식은 10개 이미지를 전송시 10번의 POST 요청이 나간다는 문제 발생String message
와List<String> imgUrls
를 모두 가지고 있어야 하므로 추가적인 코드 작업이 필요String message
필드에 값이 있지만 이미지 메시지의 경우String message
값은 null이 되고List<String> imgUrls
필드에 값이 있게 된다.해결방법
Optional
과 생성자 팩토리 메서드를 사용하여message
필드가 null이 될 수 있음을 명시하고 이미지 메시지와 그 외 메시지를 생성하는 로직을 분리