프로젝트 소개
📅 진행기간
2023.06.01 ~ 2023.06.23
👩🏻💻 팀구성
개인프로젝트
🔎 개요
- 이미지 파일 관리 시스템
💻 개발환경
- 프로젝트 도구 : IntelliJ, VSCode
- 기술 스택 : Spring WebFlux, Vue.js, MongoDB
📚 요구사항
(1) Spring WebFlux로 웹 백엔드 API 서버 구축
- 비동기 논블로킹 방식으로 이미지를 업로드하는 API 구현
- 이미지 업로드시 이미지 서버 저장과 함께 이미지에 대한 메타 데이터가 데이터베이스(MongoDB)에 함께 저장
- 조회시 이미지와 함께 메타데이터도 확인가능
- 필수 API 명세
Method | URI | Request Param | Request Body | Description |
GET | /images | 자유롭게 정의 | 자유롭게 정의 | 이미지 전체 조회 |
GET | /image | 자유롭게 정의 | 자유롭게 정의 | 이미지 단일 조회 |
POST | /image | 자유롭게 정의 | 자유롭게 정의 | 이미지 파일 및 정보 생성 |
PATCH | /image | 자유롭게 정의 | 자유롭게 정의 | 이미지 정보 수정 |
PUT | /image | 자유롭게 정의 | 자유롭게 정의 | 이미지 정보 수정 |
DELETE | /image | 자유롭게 정의 | 자유롭게 정의 | 이미지 파일 및 정보 삭제 |
(2) Vue 2 + Vuetify로 웹 페이지 UX/UI 구현
- 이미지를 업로드 할 수 있는 input
- 업로드된 이미지 목록을 확인할 수 있는 table
- table에서 선택된 이미지의 상세 정보를 확인할 수 있는 dialog
- axios를 통해 API를 호출하고 동적으로 페이지를 렌더링
결과물 보기
https://github.com/eun-jin0910/ImageUpload
GitHub - eun-jin0910/ImageUpload
Contribute to eun-jin0910/ImageUpload development by creating an account on GitHub.
github.com
업로드 방식 성능 비교 테스트
📌 테스트 목적
- 파일 업로드 방식의 성능 및 속도 평가
📝 테스트 방법
- 각 파일 업로드 방식별로 업로드 시간 측정
📲 업로드 방식
- 일괄 업로드, 단일 업로드, 병렬 업로드, 분할 업로드
📊 테스트 결과
업로드 방식 | 일괄 업로드 | 단일 업로드 | 병렬 업로드 | 분할 업로드 |
1개 업로드 시간(초) | 0.9 | 0.9 | 0.85 | 0.98 |
10개 업로드 시간(초) | 5.04 | 3.33 | 3.17 | 3.9 |
100개 업로드 시간(초) | 실패 | 29.39 | 29.78 | 33.79 |
300개 업로드 시간(초) | 82.91 | 85.18 | 105.46 | |
500개 업로드 시간(초) | 142.9 | 144.07 | 177.46 | |
1000개 업로드 시간(초) | 326.02 | 283.59 | 372.29 |
1. 단일 업로드
설명 | 한 번에 하나의 파일만 업로드하는 방식 |
구현 방식 | 하나의 이미지를 FormData에 담아서 axios로 서버에 전송하여 이미지 업로드 처리 |
장점 | 각 파일을 개별적으로 관리할 수 있다. |
단점 | 대규모 파일 업로드하는 시간이 오래 걸린다. 여러 번의 요청과 응답이 필요하므로 네트워크 부하가 더 커질 수 있다. |
속도 | 크기가 작은 파일에 대한 처리 속도는 빠르지만, 큰 파일은 속도가 상대적으로 느리다. |
적합한 상황 | 각 파일이 서로 다른 작업을 수행하거나 개별적으로 처리해야 하는 경우 |
2. 병렬 업로드
설명 | 여러 파일을 동시에 업로드 |
구현 방식 | Promise.all()을 사용하여 병렬 파일 업로드를 구현. 여러 개의 파일이 선택되고 파일마다 서버로 업로드하기 위한 요청이 생성 |
장점 | 빠른 업로드 가능 |
단점 | 동시에 많은 파일을 처리하므로 서버 리소스의 부담이 커지며, 동시에 처리되는 파일이 많을수록 네트워크 부하가 증가 |
속도 | 많은 파일을 빠르게 처리하는데 효과적 |
적합한 상황 | 대용량 트래픽 지원이 가능하고 여러 파일을 빠르게 업로드 해야하는 경우 |
3. 분할 (단일)업로드
설명 | 대용량 파일을 작은 청크로 나누어 업로드 |
구현 방식 | 이미지를 청크 파일로 쪼개서 axios로 서버 전송 → 서버에서 청크 파일 하나씩 임시 폴더에 저장 → 분할된 파일 병합 및 새로운 파일 생성 → 업로드 처리 및 임시 파일 삭제 |
장점 | 안정성이 높음 |
단점 | 처리 로직 복잡 |
속도 | 대용량 파일에 대한 업로드 속도를 최적화 가능(분할 병렬 업로드로 처리하면 속도 빨라짐) |
적합한 상황 | 대용량 파일을 안정적으로 업로드해야 하는 경우. |
'STUDY > 프로젝트' 카테고리의 다른 글
[팀프로젝트] Oh!GYM(매칭서비스) (0) | 2023.03.17 |
---|---|
[팀프로젝트] 마음을 JAVA라(Quiz Game) (0) | 2023.03.17 |
[팀프로젝트] Lotto 프로그램 (0) | 2023.03.17 |
[팀프로젝트] 호텔 객실 예약 프로그램 (0) | 2023.03.17 |