오늘은 미디어 서비스 파일을 업로드하는 서비스를 개발하는 강의입니다.
이미지나 동영상 파일을 빠르게 업로드하고 활요하기 위해 보통 아마존의 S3같은 서비스를 활용하는데, 본 수업에서는 거의 같은 무료 서비스인 RustFS서비를 이용했습니다.
특이했던건 프론트가 벡엔드에게 이미지를 요청을 해서 S3같은 파일서버에서 파일을 읽어드리는 것이 아니라,
벡엔드의 부하를 줄이기 위해서 presigned-url을 활용해서 벡엔드가 url을 생성하고, 이 url로 프론트엔드가 직접 S3같은 파일 서버에 연락해서 이미지나 동영상 파일을 받아오는 구조를 실습했습니다.
8MB 이내 내용은 1번의 presigned-url을 이용하고, 그 이상의 데이터는 여러 presigned-url을 복수로 구성해서 8MB씩 나눠서 파일을 받는 방식이었습니다.
실무에서는 이런방식으로 시스템을 구성하는 것 같습니다.
미디어 도메인을 구현해줘. 미디어 엔티티는 다음과 같이 구성해줘.
Long id
MediaType mediaType // IMAGE, VIEO
String path
Status status // INIT, UPLOADED, COMPLETED, FAILED
Long userId
String uploadId
JSON attributes // 확장 메타데이터
그리고 오브젝트 스토리지로 rustfs를 사용할거야. rustfs:1.0.0-alpha.72 이 이미지를 사용하면 돼
미디어 업로드를 사용하기 위해서는 presigned-url을 받아와야 하는데, POST /api/v1/media/init (fineSize <= 8MB)이 API응답으로 받아올 수 있어.
그 후 클라이언트는 미디어가 8MB 이하면 해당 presigned-url로 단일업로드하고, 초과하면 8MB 단위로 미디어를 분할해서 여러 presigned-url로 업로드하면 돼.
그래서 받은 etag로 완료 API를 호출하면 돼. 완료API는 POST /api/v1/media/uploaded 이거를 사용하면 돼. 그러면 서버에서는 media 에 해당 상태 등을 업데이트해주면 돼.
가능한 부분을 병렬로 빠르게 처리해줘.
http/media/ 에 media.sh를 옮기고, 여기서 sample image, video(10MB 이상)를 다운로드 받고 이를 통해 각각 단일업로드, 멀티파트업로드를 테스트하도록 해줘.
rustfs 를 도커 컨테이너 설정해줘.
access, secret key는 rustfsadmin으로 모두 바꿔주고, buck은 media로 바꿔줘. 그리고 서울 지역을 리전으로 바꿔줘.
rustfs admin UI도 활성화하고 포트 연결되도록 해줘.
미디어 presigned-url 조회 API도 만들어줘. GET /media/{id}/presigned-url
애플리케이션 실행해서 테스트해줘
# 강사분이 에러가 발생해서 추가로 작성한 프롬프트입니다.
(MediaUploadedResponse가 있는 경우) MediaUploadedResponse는 굳이 필요없을 것 같아.
(bash 스크립트에 !에 있는 경우) ""안에 있는 ! 들은 다 빼.
(멀티파트 URL 파싱에 문제가 있는 경우) 멀티파트 URL 파싱 수정해서 테스트해줘
rustfs에 presigned-url 받아서 멀티파트 업로드하는 부분 재시도 해봐. pathStyledAccessEnabled 이 부분도 함께 고려해줘
저의 테스트결과 claude code가 72버전이 안정적이지 않아서 82버전을 제안해줘서 그렇게 진행했습니다.
rustfs/rustfs:1.0.0-alpha.82

기특하게 테스트까지 마무리하는데 정확히 99% 사용했습니다.
역시 pro는 항상 사용량에 목마른거 같아요. 그래도.... 많이 사용하지 않는 저로선 max는 낭비라고 생각합니다.
하지만 테스트를 했을 때, 역시 문제가 있네요. 3시간 이후 작업했습니다.

역시 클로드네요. 테스트해달라고 하니깐 하나씩 테스트하면서 코드를 수정해서 결국 작동했습니다.

이미지도 비디오도 잘 작동합니다.

한개씩 따라하고 는 있지만, 어딘지 모르게 이해가 안가는 느낌입니다. 내가 무엇인가를 제대로 이해하고 코드를 짜는게 아니고, 강사의 설명을 대략적으로 듣고 Claude Code가 코드를 짜주니,, 그리고 스프링에 대해서 익숙하지 않아서 다소 막연함 감이 있습니다
다시 복습하면서 내용을 곰씹어보면서 내것으로 만드는 기회를 가져야 할 것 같습니다.
'온라인강의' 카테고리의 다른 글
| 초보자들을 위한 Redis 자료구조 & 활용 기초 (0) | 2026.02.07 |
|---|---|
| [인프런 챌린지] 4주 완성 백엔드 설계 챌린지 섹션7 타임라인 서비스(4주차) (0) | 2026.02.05 |
| [인프런 챌린지] 4주 완성 백엔드 설계 챌린지 (3주차) (0) | 2026.02.02 |
| [인프런 챌린지] 4주 완성 백엔드 설계 챌린지 (2주차) (0) | 2026.01.29 |
| [인프런 챌린지] 4주 완성 백엔드 설계 챌린지 (1주차) (0) | 2026.01.28 |