DEXTUploadX5 대용량 파일 업로드 완벽 가이드 (초보자용)
소개
안녕하세요! 오늘은 DEXTUploadX5를 사용하여 2GB 이상의 대용량 파일을 업로드하는 방법에 대해 알아보겠습니다. 대용량 파일은 전송 중 끊길 위험이 높기 때문에 일반적인 업로드와는 다른 특별한 처리 방식이 필요합니다. 초보자분들도 쉽게 이해하고 적용하실 수 있도록 핵심만 짚어서 설명해 드릴게요!
1. 💡 대용량 파일 업로드란?
DEXTUpload 제품군에서 2GB 이상의 크기를 가지는 파일을 업로드하는 것을 ‘대용량 파일 업로드’라고 부릅니다. 핵심은 파일을 통째로 보내는 것이 아니라, 일정 크기(청크)로 잘게 쪼개서 여러 번 나누어 전송한다는 점입니다.
- 안정성 확보: 중간에 네트워크가 끊겨도 전송이 실패한 조각부터 다시 전송하는 이어올리기가 기본적으로 지원됩니다.
- 요청 수 증가: 예를 들어 2.5GB 파일을 10MB 크기로 쪼개서 전송한다면 약 2,500번의 서버 요청이 발생합니다. 이는 정상적인 동작입니다.
2. ⚙️ 클라이언트(브라우저) 측 설정 (DEXTUploadX5)
대용량 업로드를 위해서는 업로드 모드를 변경하고 파일을 분할할 크기를 지정해야 합니다.
// 컴포넌트 생성 완료 이벤트에서 설정합니다.
function onDX5Created(id) {
var dx = dx5.get(id);
// 1. 업로드 경로를 설정합니다.
dx.setUploadURL("http://domain/path/extension-upload.do");
// 2. 업로드 방식을 대용량 전용 모드(EXTS)로 설정합니다.
dx.setUploadMode("EXTS");
// 3. 파일을 분할하는 블록 크기를 바이트 단위로 설정합니다. (예: 10MB)
dx.setUploadBlockSize(10 * 1024 * 1024);
}
3. 🖥️ 서버 측 설정 (예: DEXTUploadNJ)
쪼개져서 서버로 들어오는 수많은 파일 조각들을 하나로 합치는 복잡한 작업은 서버 컴포넌트(DEXTUploadNJ 등)가 알아서 자동으로 처리해 줍니다. 개발자님은 완전히 합쳐진 최종 파일을 원하는 위치로 이동(저장)시키기만 하면 됩니다.
web.xml에ExtensionFileUploadFilter를 등록하기만 하면 필터 단에서 파일 조각들을 임시 폴더에 알아서 병합합니다.- 병합이 완료되면 개발자님의 컨트롤러나 서블릿으로 제어가 넘어오며, 여기서
item.save()함수를 호출하여 최종 저장 위치만 지정해주면 끝납니다.
4. ⚠️ 구현 시 반드시 유의해야 할 점 (유의사항)
- 단독 처리 불가: 대용량 파일 업로드는 DEXTUploadX5 단독으로는 불가능합니다. 반드시 DEXTUploadNJ(Java) 등 자사의 서버 컴포넌트 제품과 연동해야만 동작합니다.
- Spring Framework 충돌 주의: Spring 환경에서 구현하실 때, 기존에 설정된
CommonMultipartResolver또는StandardServletMultipartResolver가 있다면 제거해야 합니다. (DEXTUploadNJ 2.6.0 버전 이상에서는 전용 Spring 필터를 제공하므로 설정 충돌을 쉽게 피할 수 있습니다.) - 응답(Response) 처리: 파일 조각이 모두 전송되고 조립이 끝나면, 서버에서 응답을 반환합니다.
onDX5UploadCompleted이벤트는 전체 업로드가 끝났을 때 단 한 번만 호출되므로, 이 안에서getResponses()함수를 사용해 개별 파일의 서버 응답 데이터를 배열 형태로 확인해야 합니다. - 다운로드 파일 크기 제한 점검: 대용량 파일을 성공적으로 업로드하도록 구현했다면, 추후 사용자가 해당 파일을 정상적으로 내려받을 수 있어야 합니다. 매뉴얼의 ‘다운로드하기’ 설정 부분을 반드시 참고하시어, 컴포넌트나 서버의 다운로드 파일 크기 제한(Limit)이 업로드할 대용량 파일 크기보다 작게 설정되어 있지 않은지(또는 무제한인지) 꼭 확인해 주세요.
제품소개 페이지 : https://www.dextsolution.com/product/uploadX5_01.aspx
문의처 : info@dextsolution.com , 대표번호 : 02-6719-6200
