담당한 기능에 대한 설명
사용한 기술 스택과 그 선택 이유
구현 과정에서의 핵심 결정사항들
성능 최적화를 위해 고려한 요소
확장성을 위한 고려사항
보안, UX 등 비기능적 요구사항에 대한 고민
오류 사항
처음에 이미지 서비스를 구현할 때는 에디터에 업로드한 이미지 파일들을 게시물 작성 완료 시에 presigned-url로 한꺼번에 PUT 요청을 보내려고 했음. 그렇게 해야 이미지를 업로드하고 작성을 완료하지 않는 경우에 스토리지 공간 낭비를 줄일 수 있기 때문이였는데, 서비스가 블로그 게시물 작성이기에 작성 중인 에디터에서 업로드한 이미지 파일이 미리보기에 보이지 않는 오류가 발생하였다.
해결 방법과 그 선택 이유
const handleImageUpload = async (blob: File, callback: Function) => {
try {
console.log('fileName', blob.name);
const response = await fetch(
`/api/blog/images?bucketName=dev-blog&fileName=${blob.name}`,
);
if (!response.ok) {
throw new Error('Failed to get presigned URL');
}
const resData = await response.json();
const presignedUrl = resData.result;
await fetch(presignedUrl, {
method: 'PUT',
headers: {
'Content-Type': blob.type,
},
body: blob,
});
const imageUrl = presignedUrl.split('?')[0];
callback(imageUrl, '이미지');
} catch (error) {
console.error('Error handling image upload:', error);
alert('이미지 업로드에 실패했습니다.');
}
};
Presigned-url을 먼저 GET요청을 통해 받아온 후에 파라미터를 제거하여서 이미지 파일을 presignedUrl에 PUT요청으로 이미지를 저장하고 서버에 파라미터를 제거한 URL로 받아온다.
성능 이슈