[덱스트업로드] Jeus에서 DEXTUploadX 사용 시 ResponseData프로퍼티 사용 방법

<DEXTUploadX Content-Length Header 방식 사용합니다.>

 

 

<현상> 

Jeus에서 DEXTUploadX 사용 시 ResponseData프로퍼티 값을 받아오지 못하는 문제

 

 

<원인> 

데이터를 요청하는 방식 중에 DEXTUploadX Content-Length Header 방식 사용하는데,

Jeus Transfer-Encoding:chunked 방식을 사용함으로 인해 서버에서 Write되는 정보를 받아오지 못하는 문제

 

Content-Length를 내려주기 위해서는 2가지 방법이 있습니다.

 

1. API를 이용하는 방법

 

     response.setContentLength(Write데이터.getBytes().length);

 

 

2. 환경파일 수정(WEBMain.xml)

 

      <webtob-listener>

         

            <output-buffer-size>0</output-buffer-size>

          

      </webtob-listener>

 

[주의]

2번의 경우는 fullbuffer 방식으로 시스템에 영향을 줄 수 있습니다.

예를 들어 100MByte 다운로드의 경우에는 100M 객체가 JAVAHeap에 생성되어 OOM등 메모리 이슈를 발생시킬 수 있습니다

또한 메모리에 100M 파일이 로딩된 후 다운로드가 수행되어 응답시간이 지연됩니다따라서 2번은 권고하지 않습니다.

 

 

 

 

    ※참고

 

 HTTP 1.1 기반으로 웹 서버에 파일 다운로드를 요청하는 방식에는 Content-Length Header 를 사용하는 방식과 Chunked-Encoding Header 를 사용하는 방식이 있으며 이 두 가지 방식은 아래와 같습니다. 

 

1. Content-Length Header를 사용하는 방식 

 

Content-Length Body 부분의 길이를 나타내는데 클라이언트 측에서 서버로 해당 파일에 대해 다운로드 요청을 하면 서버에서는 Response Header를 보내면서 Content-Length:1*DIGIT (Body 길이) 정보를 표시합니다. 이에 클라이언트 측에서는 Body의 길이만큼 데이터를 받은 후 서버와 Close 작업을 진행하게 됩니다. 

 

2. Chunked-Encoding Header를 사용하는 방식  

 

클라이언트 측에서 서버로 다운로드 요청을 하면 서버 측에서는 클라이언트로 Response Header Transfer-Encoding:chunked를 표시합니다. 그러면 Body 부분에서는 청크사이즈1+CRLF+데이터1+CRLF+청크사이즈2+CRLF+데이터2+CRLF+청크사이즈3+…+0 형태로 데이터를 전송하며 클라이언트 측에서는 처음 청크 사이즈를 알아낸 후 해당 길이만큼 데이터를 분리하고 다시 다음 청크 사이즈를 확인, 다음 데이터를 분리하는 과정을 반복한 다음 분리된 데이터를 합치는 작업을 통해서 서버로부터 파일에 대해서 다운로드를 받아서 처리하는 방식을 말합니다.

 

Similar Posts