본문 바로가기
개발용어

DIME이란, DIME 예제 코드 Java, DIME 예제 코드 C#, MIME DIME 비교

by devscb 2022. 10. 16.
반응형

 

DIME이란, DIME 예제 코드 Java, DIME 예제 코드 C#, MIME DIME 비교





 DIME이란?


DIME은 웹 서비스/SOAP를 통해 파일을 전송하기 위한 규약입니다.
DIME은 Direct Internet Message Encapsulation의 약자입니다.
DIME 인터넷을 통한 바이너리 및 캡슐화된 데이터의 스트리밍을 위해 마이크로소프트가 2000년대 초에 제안한 인터넷 표준이었습니다만
표준으로 채택되지는 못하였습니다.
표준이 아니더라도 MS 외의 소프트웨어에도 Java 측에서도 DIME을 구현한 사례는 존재합니다. (ex Apach AXIS)
하지만 표준이 아니게 되어서인지, 보안상이유 때문인지 금방 지원하지 않게 되었습니다. (apache AXIS 2.x 버전에서는 지원불가, 1.x에서만 지원가능)


 DIME 예제코드 - C#


아래와 같이 DimeAttachment 클래스를 이용하여 손쉽게 파일 첨부가 가능합니다.

[WebMethod]
public void GetDoc()
{
 SoapContext respContext = ResponseSoapContext.Current;
 DimeAttachment dimeAttach = new DimeAttachment("application/msword",
      TypeFormat.MediaType, @"D:\Images\Test.doc");
 respContext.Attachments.Add(dimeAttach);
}



 DIME 예제 코드 - Java



import java.io.File;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;

import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.attachments.AttachmentPart;
import org.apache.axis.attachments.Attachments;

 
public class .... {
  public void attach() {
    File file = ...;    
    MessageContext mc = ...;
    Message response = mc.getResponseMessage();
    
    response.getAttachmentsImpl().setSendType(Attachments.SEND_TYPE_DIME);

    DataHandler dh = new DataHandler(new FileDataSource(file));
    AttachmentPart attach = (AttachmentPart) response.createAttachmentPart(dh);
    response.addAttachmentPart(attach);
  }   
}


  DIME 패킷구조


DIME은 데이터 레코드의 컨텐츠 길이를 포함하고, 구분 문자열은 필요하지 않습니다.
MIME multipart 에 비해 단순한 메커니즘으로, 상호운영성에 좋습니다.
DIME의 경우 MIME과 달리 구분 문자열을 생성하는 로직도 불필요하고, 헤더 파싱 로직도 불필요 합니다.
DIME 레코드를 파싱하거나 생성하는 가장 복잡한 부분은 데이터 레코드 헤더의 고정길이만큼만 읽으면 됩니다.
DIME의 필드는 아래와 같이 data 내용이 오기전, 필드값이 지정되어 있기에 효율적인 처리가 가능합니다.





 MIME


파일 첨부를 위한 메커니즘으로 DIME 외에도 MIME (Multipurpose Internet Mail Extensions)이 있습니다.

MIME의 경우, 데이터 길이를 사용하는 대신 어디서 다음 헤더가 시작되는지 가리키고, 구분 문자열을 사용합니다.
구분 문자열은 MIME 메시지 시작 부분에 있으며, 각 데이터 레코드 사이에 입력됩니다.
MIME 메시지를 파싱하는 코드는 다음 데이터 레코드를 알 수 있는 부분에서 구분 문자열을 발견할 때까지 데이터를 전부 확인해야합니다.
MIME 메시지 형식은 다음과 같습니다.
"Content-type:" 헤더에 boundary 파라미터를 포함하며,
이 boundary는 다음과 같이 각 메시지 파트를 구분하는 역할을 하며, 메시지의 시작과 끝부분에도 나타나게 됩니다.

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=frontier

This is a message with multiple parts in MIME format.
--frontier
Content-Type: text/plain

This is the body of the message.
--frontier
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64

PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
--frontier--

base64로 인코딩된 부분이 파일이 인코딩된 부분이며, 이를 디코딩하면 파일내용을 확인할 수 있게 됩니다.



 총평


최근 DIME을 사용하는 ESB 외부 서비스가 EOS (End of Service) 된다는 내용을 접하게 되었습니다.
DIME이 뭐지? 해서 내용을 찾아보았습니다.
찾아보니 파일첨부하는데 쓰는 용도라고 나오고, MIME과 같이 비교해서 내용이 나오기도 하더군요.
MTOM 이란 용어도 등장하는데, MTOM이나 DIME은 이번 기회에 처음 알게 된걸 보니 금방 사장된 기술이 아닌가 싶습니다.
MIME은 웹 개발하면서 들어본적이 있는 용어였습니다.
DIME은 사실상 MS에서 기술을 밀다가 사장된거 같은데, 안타깝게도 제가 회사에서 운영하는 소프트웨어에도 이 기술을 쓰고 있었습니다.
아.. 선배님들.. 왜 이런 기술을 쓰고 있었습니까.. 이런 생각이 들었습니다.
WCF에서 쓰고 있었는데, WCF에서는 이를 대체할 방법이 없는거 같아서 여러 방면으로 대안을 찾아보고 있습니다.
그리고 해당 글에서는 코드작성이 좀 빈약한 느낌도 드는데, 기회가 된다면 직접작성해보고 패킷분석까지 해봐야 좀 더 쉬운 설명이 되지 않을까 싶스니다.
예전부터 드는 생각이었는데, 어쩌다 WCF를 쓰게 되었는지가 궁금해집니다.

#DIME,#MIME,#파일,#첨부,#파일첨부,#file,#attachment,#fileattachment

 

https://devscb.com/post/133

 

What is DIME, DIME example code Java, DIME example code C#, MIME DIME comparison

What is DIME, DIME example code Java, DIME example code C#, MIME DIME comparison What is DIME?DIME is a protocol for transferring files via web services/SOAP.DIME stands for Direct Internet Messa

devscb.com

 

728x90
반응형

댓글