Azure Blob Storage 파일 업로드
Azure의 Data Storage 서비스에는 Blob Storage, Table Storage, Queue Storage, File Storage 등이 있다. DEXTUploadX5는 Blob Storage 서비스에 파일을 업로드할 수 있는 기능을 제공한다.
DEXTUploadX5 제품이 Azure Blob Storage에 파일을 업로드하기 위해서는, 서로 다른 출처끼리 통신을 허용해야 하기 때문에, 스토리지를 사용하는 계정의 Blob 서비스에 CORS 설정을 해주어야 한다. 업로드 및 다운로드 기능을 사용하기 위해서 HEAD, GET, POST, PUT, OPTIONS 요청 메소드와 content-type,x-request-with,x-ms-* 요청헤더를 허용해야 하고, 운영 시점에는 Allowed Origins 속성을 '*' 값으로 설정하지 않도록 주의해야 한다.

- 공유액세스 토큰을 이용하여 업로드하기
-
DEXTUploadX5는 Azure Blob Storage로 파일을 직접 업로드하기 위해서 공유액세스 토큰이 필요하다. 공유액세스 토큰은 보안을 위해서 백엔드에서 생성하여 DEXTUploadX5에 전달해야 한다.
Azure Blob Storage에 업로드하기 위해서는 업로드 모드를 'AZRBS'로 설정하고, setAZRBSUploadConfig 메소드를 사용하여 필요한 설정값들을 제공해야 한다.
dx.setUploadMode("AZRBS"); dx.setAZRBSUploadConfig({ accountName: "photomanager", containerName: "photos", sasListURL: "https://domain/path/get-list-sastoken", sasUploadURL: "https://domain/path/get-upload-sastoken" });위 코드에서 accountName은 Azure Blob Storage 계정 이름, containerName은 Blob Storage 컨테이너 이름을 의미한다. sasListURL과 sasUploadURL은 각각 공유액세스 토큰을 얻기 위한 URL이다.
플랫폼에 적합한 Azure Storage SDK를 이용하여 서버 측에서 업로드 과정에 필요한 공유액세스 토큰을 얻는 단계를 구현하면, 액세스키와 같은 보안 정보를 노출하지 않고서 파일 업로드 과정만 DEXTUploadX5가 처리하도록 할 수 있다.
공유액세스 토큰을 얻는 과정을 이해하기 위해서 Java Web Application, ASP.NET 환경에서 사용가능한 예제들이 제공되므로, 제공된 예제를 참고하여 구현하도록 한다.
-
Java 그리고 Maven을 사용하는 환경인 경우 Azure SDK를 얻는 법
<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-blob</artifactId> <version>12.x.x</version> </dependency> -
Java 그리고 Gradle를 사용하는 환경인 경우 Azure SDK를 얻는 법
implementation 'com.azure:azure-storage-blob:12.x.x'
-
ASP.NET 환경인 경우 Azure Storage SDK를 얻는 법
NuGet 패키지 관리자를 사용하여 Azure.Storage.Blobs 패키지를 설치하면, Azure.Identity.dll, Azure.Storage.Blobs.dll, Azure.Storage.Common.dll, netstandard.dll을 얻을 수 있다.
버킷에 올라가는 파일은 Blob 이름으로 구분한다. 일반적으로 Blob 이름은 파일명을 사용하지만, 이름이 같은 파일들끼리 서로 덮어쓰는 문제를 해결하기 위해서, Blob 이름을 좀 더 구체화할 필요가 있다. 제품은 기본적으로 Blob 이름을 파일 이름으로 사용하며, 파일 이름이 아닌 다른 형식으로 설정하기 위해서는 makeKey 속성에 Blob 이름을 생성하는 함수를 설정하면 된다. 여기서 Key와 Blob 이름은 동일한 의미로 사용된다.
dx.setAZRBSUploadConfig({ ... // Blob 이름: 컴포넌트이름/파일이름 makeKey: item => `${item.controlId}/${item.name}` });Azure Blob Storage는 Amazon S3처럼 Blob 이름에 '/' 문자를 넣으면 마치 폴더 구조를 가지는 것처럼 파일을 구분할 수 있다.
-
- 특징
-
- DEXTUploadX5는 Azure Blob Storage 서비스에서 지원하는 멀티파트 업로드 방식을 사용하므로, 대용량 파일 업로드가 가능하다.
- 이어 올리기 기능는 최대 7일 이내에서만 유효하다. 커밋되지 않은 Blob의 블록들은 7일까지만 유지된다.
- 대용량 파일을 업로드하는 경우 chunkSize 값을 변경해야 할 수 있다.
- Azure Blob Storage로 파일을 업로드하는 경우, 진행창에 표시되는 진행률이 타 업로드 방식들에 비해 자연스럽지 않을 수 있다.
- 메타데이터도 업로드가 된다. 다만 값은 BASE64로 인코딩된다.