login register Sysop! about ME  
qrcode
    최초 작성일 :    2001년 09월 07일
  최종 수정일 :    2001년 09월 07일
  작성자 :    Hanhead (정재훈)
  편집자 :    Taeyo (김 태영)
  읽음수 :    87,707

강좌 목록으로 돌아가기

필자의 잡담~

오늘도 홧팅입니다. ^^

들어가기 전

무어라고 감사의 말씀을 드려야할지 이렇게 많은 관심을 보여주셔서 정말 감사드립니다.그리 대단잖은 강좌에 많은 관심과 애정을 보여주셔서 정말 감사드립니다.그 기대를 저버리는 결과가 되지 않기 위해 노력하겠습니다.그리고 본 강좌를 보시는 분들께 다시한번 강조드리고 싶은 것은 직접 본 강좌의 내용과 그에 따라 나오는 개념들에 관해 직접 실행해보고 고민해보지 않으면 아무런 효과가 없는 강좌이니 스스로의 고생을 감수하시면서 본 강좌의 내용을 탐독하시기를 다시한번 부탁드립니다.

CDO Object Model에 관한 다시한번의 고찰

전 강좌의 CDO Object Model과 Library를 보시고 고민해보신 분이라면 누구나 "도대체 이해하기가 힘들다"라고 생각하실 것입니다.만일 이해를 완전히 하신 분이라면 더 이상 강좌의 내용에 연연하지 마시고 직접 웹메일을 제작할 수 있는 길이 보이 실 것입니다.이에 대부분의 이해하지 못 하셨을 거라고 생각되는 분들을 위해 본 강좌의 내용은 진행될 것입니다.약속드린대로 아래와 같이 자작된 CDO Object Model에 관한 다른 그림을 살펴보도록 하겠습니다.

[CDO Object Model에 관한 다른 그림보기]


위의 오브젝트모델를 맞다 틀리다 라는 관점에 바라보기 보다는 저 개인적으로 object model을 이해하기 편하게 하기 위해 고민(조금은 어설픈 배열)과 고생(저 그림을 못그린데 포토샵을 쑈한 결과)을 그쳐서 그래도 이해하시기 편한 형태로 아니 설명드리기 편한 형태로 변형한 것입니다.

자, 우선 Object Model에서 개인적으로 가장 핵심이 된다라고 생각하는 부분은 강조하기 위해 크~~~게 그려 놓은 Message와 Bodypart일 것입니다.

아참 그 전에 하나 하나 간략하게 먼저 소개를 하면

Configration :

SMTP등 Message의 Server Configration을 Fields Collection으로 편리하게 제공되고 있는 개체로 전 강좌에서 살펴보셨지만 바로 현재 웹서버내지는 애플리케이션 서버가 아닌 다른 서버에 SMTP를 이용할 수 있는 가능성을 제공하는 개체죠.

 

DropDirectory :

마찬가지 Message가 쌓이는 디렉토리(SMTP의 기본 설정은 \inetpub\mailroot\drop이라는 디렉토리 입니다.)에 관한 설정을 Field Collection 편리한 형태로 제공하고 있습니다. 중요한 특정 디렉토리가 \inetpub\mailroot\drop 가 아닌 다른 디렉토리를 Drop Directory로 지정할 수 있는 가능성을 보여주는 개체입니다.

 

Messages :

척 보시면 아시겠지만 Drop Directory에 있는 Message File(.eml)을 Message 개체로 모아서~~~ 쌓아서~~~ Collection Object의 형태로 제공되어지고 있는 개체입니다. 그럼 이 Collection 개체로 for each 해버리면 메일리스트가 쫘~~악~~~ 하지만...... ㅠ.ㅠ Message의 순서가 엉망일 겁니다. 다시 말해 Collection Object의 형태임으로 Sorting, Filtering이 되지 않습니다. 이것의 저희가 극복하여할 첫 번째 문제점. 하지만 쉽습니다.ㅋㅋㅋ 담에 살펴보시죠^^;

 

Message :

이 개체는 Messages 개체가 들어있는 메세지 파일을 대변하는 개체입니다.......... 라고 생각하면 아주 간단합니다. 하지만~~~~~ 그렇게 이 개체를 바라 봤다가는 한참을 당황하기 일쑤입니다. 이 개체는 하나의 개체라고 파악해서는 곤란합니다. 다시말해 메세지 파일을 특정 개체(Message)로 제공하는데 있어 여러가지(3가지)의 Interface가 있습니다. 위의 그림으로 이해하기는 약간을 곤란 할 것 같은데 iMessage, iBodyPart, iDataSource라는 3가지의 인터페이스가 존재합니다.

먼저 iMessage는 위의 Object Model에서 Message라는 커다란 어미 돼지의 젖먹듯이 붙어 있는 하위 개체들의 형태로 지원됩니다.

그리고 먼저 iDataSource라는 인터페이스를 보면 마찬가지 Message 개체 위에 Configration에서 내려오는 길이 아닌 왔다가 갔다가 할 수 있는 오른쪽의 DataSource라는 조금 커 보이는 개체가 바로 iDataSource인데 이것은 ADO의 Stream개체의 힘을 빌어서 파일로의 접근이 가능한 길을 제시합니다. 다시말해 DropDirectory가 아닌 다른 경로에서 Message 개체의 생성이 가능하다는 것이죠. 그리고 완성된 것으로 보이지 않습니다. 왜냐면 미래를 위해 예비해두었다는 메서드와 속성들이 괘나 있는 것 보면 아직도 이 방향으로 업데이트가 더 있을 거라고 생각되는데 전 개인적으로 뭐가 좋은 일이 있을 것 같은데 MS에서 왜 망설이는지 알 수가 없네요. 뭔 속셈인지....아니겠죠 준비중이겠죠.. 빨리 되어라 나도 멋진 거 말들어야한다.ㅋㅋㅋㅋ

그리고 마지막으로 iBodyPart인데 이것을 이해할려구 하면 우선 해결해야할 것이 바로 위의 그림에서 Bodypart라는 커다란 강아지 밑에 강아지들이 젖먹는 형태에서 왔다가 갔다가 하는 bodyparts와 bodypart의 관계인데 이건 저의 어슬픈 설명만으로 이해한다면 사상누각(와.... 4자 성어 받아 적으세요)이고 MIME에 관한 간단한 이해가 필수 있습니다. 그래서 정진우님의 강좌에서 MIME에 관한 부분을 다시 공부하시고 연구하셔서 다시 본 강좌에 임해주시면 감사드리겠습니다.

자 공부다하고 오셨나요? 그럼 제가 설명을 드려보겠습니다. MIME으로 되어 있는 문서를 살펴보게되면 아래와 같이 메일의 예를 들어 보겠습니다.

x-sender: jdnrl@asper.pe.kr
x-receiver: asper@asper.pe.kr
Received: from mail pickup service by mail.asper.pe.kr with Microsoft SMTPSVC;
Thu, 23 Aug 2001 21:36:46 +0900
Content-Class: urn:content-classes:message
From: <jdnrl@asper.pe.kr>
To: <asper@asper.pe.kr>
Subject: =?ks_c_5601-1987?B?vsiz58fPvLy/5C4uILLAIL7LsO29zcC6sM3AzCDA1r7uIA==? ==?ks_c_5601-1987?B?v7DEobrSsbjHz7DtIMDMuN7Az8C7IL6ysNQgtce++r7uv+QuLg==?=
Date: Thu, 23 Aug 2001 21:36:46 +0900
Message-ID: <006b01c12bd0$45c11c00$5403cad3@websvr01>
MIME-Version: 1.0
Content-Type: multipart/mixed;boundary="----=_NextPart_000_006C_01C12C1B.B5AB0DF0"
X-Mailer: Microsoft CDO for Windows 2000
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200
Thread-Index: AcEr0EW+4/dFhKaYRneMYIaWS5C2tg==
X-OriginalArrivalTime: 23 Aug 2001 12:36:46.0859 (UTC) FILETIME=[45E015B0:01C12BD0]

This is a multi-part message in MIME format.

------=_NextPart_000_006C_01C12C1B.B5AB0DF0
Content-Type: text/plain;
charset="ks_c_5601-1987"
Content-Transfer-Encoding: base64

Xl47OyDBpLi7t84gssAgvsuw7b3NwLqw1CDA1r7uvK0gv7DEobrSsbjHz7DtIMDMt7iw1CDAzLje
....중간 생략 ....
sNS1tSC52bLjuriw7SCx17extaW1tSC05MDMIL7Is6q/zbytILW1v/LAuyDDu8fPsNQgtce++r3A
tM+02S4uDQqywCC1tb/Nwda8vL/kLi4uLg==

------=_NextPart_000_006C_01C12C1B.B5AB0DF0
Content-Disposition: attachment;
filename="test.zip"
Content-Type: application/x-zip-compressed;
name="test.zip"
Content-Transfer-Encoding: base64

UEsDBBQAAgAIAPisFyuCeznfPwEAAAoJAAAMAAAARGJzY3JpcHQuc3FsvZJRSoRQGIWfE9zD/zYK
EvlfWsDVJIZMw4whROTmSAnONdSZlQVBb+2gHbSAVtBb2qDMONPETN7efjmcw3fO1fQs6lvgU8O2
... 중간 생략...
AK+rFyu8qIaQhgcAAG8YAAAIAAAAAAAAAAEAIAAAAGkBAAB0ZXN0LmFzcFBLBQYAAAAAAgACAHAA
AAAVCQAAAAA=

------=_NextPart_000_006C_01C12C1B.B5AB0DF0--


자 위의 메일 메서지에서서 파란글자는 Mail Header이고 빨간 부분이 바로 Mail Content라고 할 수 있을 것이다.(파란휴지 줄까~~~ 빨강 휴지 줄까~~~ 이히히히히 ^ㅠ^)

Mail의 Header는 iMessage Interface의 Fields로 제공되어진다. 메일본문은 bodypart로 제공되어지는데 이 메일의 본문을 다시 한번 보도록 하자.

------=_NextPart_000_006C_01C12C1B.B5AB0DF0
Content-Type: text/plain;
charset="ks_c_5601-1987"
Content-Transfer-Encoding: base64

Xl47OyDBpLi7t84gssAgvsuw7b3NwLqw1CDA1r7uvK0gv7DEobrSsbjHz7DtIMDMt7iw1CDAzLje
....중간 생략 ....
sNS1tSC52bLjuriw7SCx17extaW1tSC05MDMIL7Is6q/zbytILW1v/LAuyDDu8fPsNQgtce++r3A
tM+02S4uDQqywCC1tb/Nwda8vL/kLi4uLg==

------=_NextPart_000_006C_01C12C1B.B5AB0DF0
Content-Disposition: attachment;
filename="test.zip"
Content-Type: application/x-zip-compressed;
name="test.zip"
Content-Transfer-Encoding: base64

UEsDBBQAAgAIAPisFyuCeznfPwEAAAoJAAAMAAAARGJzY3JpcHQuc3FsvZJRSoRQGIWfE9zD/zYK
EvlfWsDVJIZMw4whROTmSAnONdSZlQVBb+2gHbSAVtBb2qDMONPETN7efjmcw3fO1fQs6lvgU8O2
... 중간 생략...
AK+rFyu8qIaQhgcAAG8YAAAIAAAAAAAAAAEAIAAAAGkBAAB0ZXN0LmFzcFBLBQYAAAAAAgACAHAA
AAAVCQAAAAA=

------=_NextPart_000_006C_01C12C1B.B5AB0DF0--

빨간 경계선(빨강휴지 어~~~ 무서워)을 기준으로 여러개의 bodypart를 가진 bodyparts라는 사실을 확인할 수 있을 것이다.

맞다.. bodypart라는 것은 무조건하고 bodypart가 되는 것이 아니라 그 실체가 bodyparts일 가능성이 농후한 지라(70년대 성우식 문장) 다시한번 두들겨패서 bodypart로 만들어야한다. 그리고 MIME에 관한 이해가 더욱 있다면 이 bodypart를 의심해서 다시 두들겨 패고 bodyparts이라면 이 bodypart를 의심해서 다시 두들겨 패고 bodyparts이라면 이 bodypart를 의심해서 다시 두들겨 패고 bodyparts이라면 이 bodypart를 의심해서 다시 두들겨 패고 bodyparts이라면 bodypart.......(에고 숨차라... 헉헉헉....) 하여튼 bodypart가 될때까지 두들겨패야한다. 무대뽀 정신을 가지고 쇠뿔이 뽑힐때까지....

Content-Type: text/plain;
charset="ks_c_5601-1987"
Content-Transfer-Encoding: base64

Xl47OyDBpLi7t84gssAgvsuw7b3NwLqw1CDA1r7uvK0gv7DEobrSsbjHz7DtIMDMt7iw1CDAzLje
....중간 생략 ....
sNS1tSC52bLjuriw7SCx17extaW1tSC05MDMIL7Is6q/zbytILW1v/LAuyDDu8fPsNQgtce++r3A
tM+02S4uDQqywCC1tb/Nwda8vL/kLi4uLg==

이렇게 만들어진 BodyPart는 다시 header와 content가 존재하는데 이것은 전체를 묶어서 Stream으로 다시 header부분은 Fields로 제공되고 content부는 Stream으로 이쁘게 제공되어 진다.

 

이번 강좌를 마치며...

좀 더 길게하고 싶지만 오전 내내 시간을 보내서 ... 죄송합니다. 조금씩 자주 올리도록 하겠습니다.
그리고 위의 내용은 단순히 이해만을 위한 것이지만 이런 정도의 이해없이 한다는 것은 물론 빼끼면 되지만 그것이 아니라면 절대로 웹메일 못만드실 겁니다.

이정도의 연마가 있으셨으면 다시 MSDN가셔서 라이브러리와의 싸움도 해보시구요^^ 다음 시간은 이해를 바탕으로 몇가지 예제를 만들어볼까나.... 아니면 바로 웹메일 만들까나 생각중인데 의견 주세요.

asper@asper.pe.kr (죄송하지만 질문은 사절입니다.)


authored by


 
 
.NET과 Java 동영상 기반의 교육사이트

로딩 중입니다...

서버 프레임워크 지원 : NeoDEEX
based on ASP.NET 3.5
Creative Commons License
{5}
{2} 읽음   :{3} ({4})