[덱스트업로드] 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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다