<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:georss="http://www.georss.org/georss" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>I'm A&lt;font color="RED"&gt;LIVE&lt;/font&gt;</title>
    <link>http://www.mhvb.net/funnyfox/</link>
    <description>Dongbum Lee's Blog</description>
    <copyright>이동범(Dongbum Lee)</copyright>
    <lastBuildDate>Mon, 07 Sep 2009 07:12:44 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.1.8102.813</generator>
    <managingEditor>lee.dongbum@gmail.com</managingEditor>
    <webMaster>lee.dongbum@gmail.com</webMaster>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Dongbum" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <trackback:ping>http://www.mhvb.net/funnyfox/Trackback.aspx?guid=18174c19-9233-496b-8ac3-19b29d94f1ba</trackback:ping>
      <pingback:server>http://www.mhvb.net/funnyfox/pingback.aspx</pingback:server>
      <pingback:target>http://www.mhvb.net/funnyfox/PermaLink,guid,18174c19-9233-496b-8ac3-19b29d94f1ba.aspx</pingback:target>
      <dc:creator>이동범</dc:creator>
      <georss:point>37.572312 126.958158</georss:point>
      <wfw:comment>http://www.mhvb.net/funnyfox/CommentView,guid,18174c19-9233-496b-8ac3-19b29d94f1ba.aspx</wfw:comment>
      <wfw:commentRss>http://www.mhvb.net/funnyfox/SyndicationService.asmx/GetEntryCommentsRss?guid=18174c19-9233-496b-8ac3-19b29d94f1ba</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>How to publish PHP files on Azure</em>
        </p>
        <p>
IIS에서 Fast CGI를 통해서 PHP스크립트를 구동할 수 있게 되었습니다. 
<br />
이와 함께 Azure Service Platform 에서도 역시 CGI 엔진을 통해 PHP를 구동할 수 있습니다. 
<br /><br />
PHP를 수동으로 설치할 때에는 조금 번거로운 설정들을 했어야 했지만 Web Platform Installer를 사용하면 IIS에 손쉽게 PHP를
설치할 수 있습니다. (<a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.asp.net%2fdownloads%2fessential%2f">이
곳에서 다운로드 받을 수 있습니다.</a>)
</p>
        <p>
초 간단 PHP Azure Publishing하는 방법에 대해 기술해 봅니다. (사실 Azure SDK에 나와있는 문서가 말을 너무 어렵게 써 놓은
지라 ^^)
</p>
        <p>
Visual Studio 를 사용합니다.(무료 버전인 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.asp.net%2fdownloads%2fessential%2f">Web
Developer 2008 Express</a> 도 가능합니다)
</p>
        <p>
          <u>
            <strong>1. Cloud Service 프로젝트 추가 
<br /></strong>
          </u>
          <br />
 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_1.png" width="644" height="459" /></a></p>
        <p>
          <strong>
            <u>2. 추가된 Cloud Service 프로젝트에서 *.csdef 파일 수정하기</u>
          </strong>
        </p>
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_8.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_3.png" width="644" height="228" />
          </a>
        </p>
        <p>
          <strong>
            <u>3. CGI Web Role 추가하기(Visual Basic / C# 상관없음) 
<br /></u>
          </strong>
          <br />
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_6.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_2.png" width="644" height="405" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <strong>
            <u>4. WebCGI Role 프로젝트에 php 폴더 만들기 
<br /><br /></u>
          </strong>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_10.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_4.png" width="296" height="297" />
          </a>
        </p>
        <p>
          <u>
            <strong>5. PHP CGI 파일들 모두 4번에서 생성한 폴더에 복사하기 
<br /></strong>
          </u>
          <br />
Web Platform Installer를 통해 PHP를 설치하셨다면 설치된 PHP의 위치는 %Program Files%\PHP 일 것 입니다. 
<br />
이곳의 모든 파일들과 하위 폴더들을 그림 4번에서 생성한 php 폴더 밑으로 모두 복사합니다. 
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_12.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_5.png" width="424" height="359" /></a></p>
        <p>
          <u>
            <strong>6. 추가된 PHP 폴더 아래의 소스 파일들을 프로젝트에 include 하기</strong>
          </u>
        </p>
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_20.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_9.png" width="207" height="425" />
          </a>  
<br />
파일들을 추가한 후 모든 파일들의 프로젝트 속성의 Build Action을 Content로, Copy to Output Directory를 Copy
Always 혹은 Copy if newer 로 변경해 줍니다.
</p>
        <p>
          <strong>
            <u>7. Web CGI Role의 Web.roleconfig 파일 수정하기</u>
          </strong>
          <br />
          <br />
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_14.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_6.png" width="615" height="190" />
          </a>
        </p>
        <p>
          <u>
            <strong>8. Web CGI Role의 Web.config 파일 수정하기 
<br /></strong>
          </u>
          <br />
Fast CGI Handler를 Web.config 파일에 추가해 줍니다. 
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_16.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_7.png" width="579" height="311" /></a></p>
        <p>
          <strong>
            <u>9. Cloud에 게시할 웹 스크립트 추가하기</u>
          </strong>
          <br />
          <br />
본 블로그 에서는 간단히 phpInfo(); 를 호출하는 코드가 담긴 PHP 파일을 프로젝트에 추가합니다. 
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_22.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_10.png" width="443" height="256" /></a><br />
[WebCGIRole 프로젝트에 추가된 test.php 파일 내용]
</p>
        <p>
          <strong>
            <u>10. 실행해 보기</u>
          </strong>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_28.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_13.png" width="405" height="424" />
          </a>
        </p>
        <p>
이와 같이 실행이 된다면 성공적으로 Dev Fabric에 성공적으로 게시된 것 입니다. 
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_26.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_12.png" width="436" height="312" /></a><br />
[Dev Fabric에 게시된 예]
</p>
        <p>
*잠깐! 
<br />
“컴퓨터에 ntwdblib.dll이(가) 없어 프로그램을 시작할 수 없습니다. 프로그램을 다시 설치하여 이 문제를 해결하십시오” 라는 메세지가 보인다면?
</p>
        <p>
PHP 설치 후 SQL Server 용 드라이버를 설치하셔서 그렇습니다. 
<br />
php.ini 파일에서 extension=php_mssql.dll 항목을 remark 해 주시면 해결 됩니다.
</p>
        <p>
          <u>그래도 안 된다면? php 설치 폴더의 ini 파일을 계속 참조하고 있는 듯 싶군요. 
<br /></u>
          <u>-&gt; %program files%\php\php.ini 파일을 잠시 rename 해 주시고 다시 빌드해 주세요.</u>
        </p>
        <p>
Dev Fabric에서 테스트 시에서 발생하는 오류이니 걱정하지 않으셔도 됩니다.
</p>
        <p>
          <strong>
            <u>11. Cloud 에 게시</u>
          </strong>
        </p>
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_18.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb.png" width="518" height="484" />
          </a>  
<br />
[게시 중….]
</p>
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_24.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_8.png" width="521" height="504" />
          </a>
          <br />
[Production 환경으로 publish] 
<br /><br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_30.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_11.png" width="521" height="441" /></a><br />
[Cloud 환경에서의 실행 예]
</p>
        <img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba" />
      </body>
      <title>PHP Azure 에 게시하기</title>
      <guid isPermaLink="false">http://www.mhvb.net/funnyfox/PermaLink,guid,18174c19-9233-496b-8ac3-19b29d94f1ba.aspx</guid>
      <link>http://feedproxy.google.com/~r/Dongbum/~3/gtVUQTIC718/PHP+Azure+%ec%97%90+%ea%b2%8c%ec%8b%9c%ed%95%98%ea%b8%b0.aspx</link>
      <pubDate>Mon, 07 Sep 2009 07:12:44 GMT</pubDate>
      <description>&lt;p&gt;
&lt;em&gt;How to publish PHP files on Azure&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
IIS에서 Fast CGI를 통해서 PHP스크립트를 구동할 수 있게 되었습니다. 
&lt;br /&gt;
이와 함께 Azure Service Platform 에서도 역시 CGI 엔진을 통해 PHP를 구동할 수 있습니다. 
&lt;br /&gt;
&lt;br /&gt;
PHP를 수동으로 설치할 때에는 조금 번거로운 설정들을 했어야 했지만 Web Platform Installer를 사용하면 IIS에 손쉽게 PHP를
설치할 수 있습니다. (&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.asp.net%2fdownloads%2fessential%2f"&gt;이
곳에서 다운로드 받을 수 있습니다.&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
초 간단 PHP Azure Publishing하는 방법에 대해 기술해 봅니다. (사실 Azure SDK에 나와있는 문서가 말을 너무 어렵게 써 놓은
지라 ^^)
&lt;/p&gt;
&lt;p&gt;
Visual Studio 를 사용합니다.(무료 버전인 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.asp.net%2fdownloads%2fessential%2f"&gt;Web
Developer 2008 Express&lt;/a&gt; 도 가능합니다)
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;&lt;strong&gt;1. Cloud Service 프로젝트 추가 
&lt;br /&gt;
&lt;/strong&gt;&lt;/u&gt; 
&lt;br /&gt;
&amp;#160;&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_1.png" width="644" height="459" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;2. 추가된 Cloud Service 프로젝트에서 *.csdef 파일 수정하기&lt;/u&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_3.png" width="644" height="228" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;3. CGI Web Role 추가하기(Visual Basic / C# 상관없음) 
&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt; 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_2.png" width="644" height="405" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;4. WebCGI Role 프로젝트에 php 폴더 만들기 
&lt;br /&gt;
&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt;&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_4.png" width="296" height="297" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;&lt;strong&gt;5. PHP CGI 파일들 모두 4번에서 생성한 폴더에 복사하기 
&lt;br /&gt;
&lt;/strong&gt;&lt;/u&gt; 
&lt;br /&gt;
Web Platform Installer를 통해 PHP를 설치하셨다면 설치된 PHP의 위치는 %Program Files%\PHP 일 것 입니다. 
&lt;br /&gt;
이곳의 모든 파일들과 하위 폴더들을 그림 4번에서 생성한 php 폴더 밑으로 모두 복사합니다. 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_5.png" width="424" height="359" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;&lt;strong&gt;6. 추가된 PHP 폴더 아래의 소스 파일들을 프로젝트에 include 하기&lt;/strong&gt;&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_20.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_9.png" width="207" height="425" /&gt;&lt;/a&gt;&amp;#160; 
&lt;br /&gt;
파일들을 추가한 후 모든 파일들의 프로젝트 속성의 Build Action을 Content로, Copy to Output Directory를 Copy
Always 혹은 Copy if newer 로 변경해 줍니다.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;7. Web CGI Role의 Web.roleconfig 파일 수정하기&lt;/u&gt;&lt;/strong&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_6.png" width="615" height="190" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;&lt;strong&gt;8. Web CGI Role의 Web.config 파일 수정하기 
&lt;br /&gt;
&lt;/strong&gt;&lt;/u&gt; 
&lt;br /&gt;
Fast CGI Handler를 Web.config 파일에 추가해 줍니다. 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_16.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_7.png" width="579" height="311" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;9. Cloud에 게시할 웹 스크립트 추가하기&lt;/u&gt;&lt;/strong&gt; 
&lt;br /&gt;
&lt;br /&gt;
본 블로그 에서는 간단히 phpInfo(); 를 호출하는 코드가 담긴 PHP 파일을 프로젝트에 추가합니다. 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_22.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_10.png" width="443" height="256" /&gt;&lt;/a&gt; 
&lt;br /&gt;
[WebCGIRole 프로젝트에 추가된 test.php 파일 내용]
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;10. 실행해 보기&lt;/u&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_28.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_13.png" width="405" height="424" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
이와 같이 실행이 된다면 성공적으로 Dev Fabric에 성공적으로 게시된 것 입니다. 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_26.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_12.png" width="436" height="312" /&gt;&lt;/a&gt; 
&lt;br /&gt;
[Dev Fabric에 게시된 예]
&lt;/p&gt;
&lt;p&gt;
*잠깐! 
&lt;br /&gt;
“컴퓨터에 ntwdblib.dll이(가) 없어 프로그램을 시작할 수 없습니다. 프로그램을 다시 설치하여 이 문제를 해결하십시오” 라는 메세지가 보인다면?
&lt;/p&gt;
&lt;p&gt;
PHP 설치 후 SQL Server 용 드라이버를 설치하셔서 그렇습니다. 
&lt;br /&gt;
php.ini 파일에서 extension=php_mssql.dll 항목을 remark 해 주시면 해결 됩니다.
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;그래도 안 된다면? php 설치 폴더의 ini 파일을 계속 참조하고 있는 듯 싶군요. 
&lt;br /&gt;
&lt;/u&gt;&lt;u&gt;-&amp;gt; %program files%\php\php.ini 파일을 잠시 rename 해 주시고 다시 빌드해 주세요.&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
Dev Fabric에서 테스트 시에서 발생하는 오류이니 걱정하지 않으셔도 됩니다.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;11. Cloud 에 게시&lt;/u&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_18.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb.png" width="518" height="484" /&gt;&lt;/a&gt;&amp;#160; 
&lt;br /&gt;
[게시 중….]
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_24.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_8.png" width="521" height="504" /&gt;&lt;/a&gt; 
&lt;br /&gt;
[Production 환경으로 publish] 
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fPHPAzure_E162%2fimage_30.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/PHPAzure_E162/image_thumb_11.png" width="521" height="441" /&gt;&lt;/a&gt; 
&lt;br /&gt;
[Cloud 환경에서의 실행 예]
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=18174c19-9233-496b-8ac3-19b29d94f1ba" /&gt;</description>
      <comments>http://www.mhvb.net/funnyfox/CommentView,guid,18174c19-9233-496b-8ac3-19b29d94f1ba.aspx</comments>
      <category>Azure</category>
      <category>Cloud Computing</category>
      <category>Microsoft Azure Service Platform</category>
      <category>PHP</category>
    <feedburner:origLink>http://www.mhvb.net/funnyfox/2009/09/07/PHP+Azure+%ec%97%90+%ea%b2%8c%ec%8b%9c%ed%95%98%ea%b8%b0.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.mhvb.net/funnyfox/Trackback.aspx?guid=629bd10d-f5b1-438e-83b1-4be1124c2af6</trackback:ping>
      <pingback:server>http://www.mhvb.net/funnyfox/pingback.aspx</pingback:server>
      <pingback:target>http://www.mhvb.net/funnyfox/PermaLink,guid,629bd10d-f5b1-438e-83b1-4be1124c2af6.aspx</pingback:target>
      <dc:creator>이동범</dc:creator>
      <georss:point>37.572312 126.958158</georss:point>
      <wfw:comment>http://www.mhvb.net/funnyfox/CommentView,guid,629bd10d-f5b1-438e-83b1-4be1124c2af6.aspx</wfw:comment>
      <wfw:commentRss>http://www.mhvb.net/funnyfox/SyndicationService.asmx/GetEntryCommentsRss?guid=629bd10d-f5b1-438e-83b1-4be1124c2af6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fIIS_D2C9%2fServer%2520Virtual%2520IIS_2.png">
            <img style="border-right-width: 0px; margin: 20px 20px 25px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Server Virtual IIS" border="0" alt="Server Virtual IIS" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/IIS_D2C9/Server%20Virtual%20IIS_thumb.png" width="260" height="203" />
          </a>
          <br />
IIS.net 사이트를 뒤지다가 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;url=http%3a%2f%2flearn.iis.net%2fpage.aspx%2f341%2fquick-guides%2f" target="_blank">IIS
Quick Guides</a> (<a title="http://learn.iis.net/page.aspx/341/quick-guides/" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;url=http%3a%2f%2flearn.iis.net%2fpage.aspx%2f341%2fquick-guides%2f">http://learn.iis.net/page.aspx/341/quick-guides/</a>) 
링크 자료를 찾았다. 
<br />
오호 이것 봐라.. 내부 machanism을 이해하기에는 부족해도 운영 가이드로 이용하기에는 부족함이 없어 보인다. 
<br />
한글로 하나 멋지게 번역되어 나와주면 좋겠다 싶어서 보니… 대부분의 항목들이 한글화 되어 있다.
</p>
        <p>
영문이라 투덜대는 개발자들에게도 좋을 듯 싶다. 
<br /><br />
각 항목들은 대게 Technet의 아티클들과 연결되어 있다. 그런데 이 아티클들의 링크를 보면 중간에 en-US라고 하는 부분이 있다.(바로 어떤
언어로 보여질 것인가를 결정하는 파라메터 되겠다.)
</p>
        <p>
예) Installing and Configuring Servers - <a title="http://technet.microsoft.com/en-us/library/cc755183.aspx" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;url=http%3a%2f%2ftechnet.microsoft.com%2fen-us%2flibrary%2fcc755183.aspx">http://technet.microsoft.com/en-us/library/cc755183.aspx</a></p>
        <p>
요기서 살짝 en-US를 ko-KR로 바꿔줘 보자. – 그러면 다시 redirection 되면서 한글화된 내용을 볼 수 있다. <a title="http://technet.microsoft.com/ko-kr/library/cc755183(WS.10).aspx" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;url=http%3a%2f%2ftechnet.microsoft.com%2fko-kr%2flibrary%2fcc755183(WS.10).aspx">http://technet.microsoft.com/ko-kr/library/cc755183(WS.10).aspx</a></p>
        <p>
예상외로 현업에서 개발자건 시스템 운영자건 간에 IIS에 대한 이해가 높지 않다. 
<br /><br />
Recycling의 Sexy함도 WorkerProcess 의 융통성과 Kernel Level Processing의 강력함도 이해하지 못한 채 예전
IIS 4.0 수준의 이해로 일관하는 게으른 개발자들이 주변에 너무 많다. 
<br /><br />
IIS가 불안정하고, 제한적이라고? 제발 좀 들여다 보자. 얼마나 돈 들여 사용할만한 구조를 가지고 있는 것인지 말이다. 
<br />
  
<br />
그저 가상디렉토리 하나 만들어, 웹 어플리케이션 하나 만들어 웹 컨텐츠들을 호스팅하기에는 IIS의 기능들이 너무나 아깝다. 
<br /><br />
이건 마치 포스쉐를 오토기어로 운전해 주시는 센스 없는 운전자와 다를 바가 없다. 
<br /><br />
구조를 조금 더 알고 싶은 개발자들은 참조하자. 
<br /><br />
☞ IIS 6.0 기술개요 백서 - <a title="download.microsoft.com" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;url=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f9%2f3%2f59354f90-9bb1-4374-b6c8-f68d73fd3f3b%2fMSCOM64BitArchitecture_TWP.doc">기술백서
다운로드</a> (반드시 읽고 이해하자) 
<br />
☞ Introduction to IIS 7.0 Architecture - <a title="http://learn.iis.net/page.aspx/101/introduction-to-iis7-architecture/" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;url=http%3a%2f%2flearn.iis.net%2fpage.aspx%2f101%2fintroduction-to-iis7-architecture%2f">http://learn.iis.net/page.aspx/101/introduction-to-iis7-architecture/</a><br />
☞ 한글화 된 MSDN 아티클 – Windows Vista 및 그 이상의 웹 서버를 위한 탐색 <a title="http://msdn.microsoft.com/ko-kr/magazine/cc163453.aspx" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fko-kr%2fmagazine%2fcc163453.aspx">http://msdn.microsoft.com/ko-kr/magazine/cc163453.aspx</a></p>
        <p>
          <strong>
            <u>IIS 제대로 이해하고 써 보자. 잘 튜닝된 웹 서버 한대 세 서버 안 부럽다!</u>
          </strong>
        </p>
        <img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6" />
      </body>
      <title>IIS 제대로 알고 쓰자</title>
      <guid isPermaLink="false">http://www.mhvb.net/funnyfox/PermaLink,guid,629bd10d-f5b1-438e-83b1-4be1124c2af6.aspx</guid>
      <link>http://feedproxy.google.com/~r/Dongbum/~3/K003HbSrMlk/IIS+%ec%a0%9c%eb%8c%80%eb%a1%9c+%ec%95%8c%ea%b3%a0+%ec%93%b0%ec%9e%90.aspx</link>
      <pubDate>Wed, 24 Jun 2009 06:08:35 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fIIS_D2C9%2fServer%2520Virtual%2520IIS_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 20px 20px 25px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Server Virtual IIS" border="0" alt="Server Virtual IIS" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/IIS_D2C9/Server%20Virtual%20IIS_thumb.png" width="260" height="203" /&gt;&lt;/a&gt; 
&lt;br /&gt;
IIS.net 사이트를 뒤지다가 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;amp;url=http%3a%2f%2flearn.iis.net%2fpage.aspx%2f341%2fquick-guides%2f" target="_blank"&gt;IIS
Quick Guides&lt;/a&gt; (&lt;a title="http://learn.iis.net/page.aspx/341/quick-guides/" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;amp;url=http%3a%2f%2flearn.iis.net%2fpage.aspx%2f341%2fquick-guides%2f"&gt;http://learn.iis.net/page.aspx/341/quick-guides/&lt;/a&gt;)&amp;#160;
링크 자료를 찾았다. 
&lt;br /&gt;
오호 이것 봐라.. 내부 machanism을 이해하기에는 부족해도 운영 가이드로 이용하기에는 부족함이 없어 보인다. 
&lt;br /&gt;
한글로 하나 멋지게 번역되어 나와주면 좋겠다 싶어서 보니… 대부분의 항목들이 한글화 되어 있다.
&lt;/p&gt;
&lt;p&gt;
영문이라 투덜대는 개발자들에게도 좋을 듯 싶다. 
&lt;br /&gt;
&lt;br /&gt;
각 항목들은 대게 Technet의 아티클들과 연결되어 있다. 그런데 이 아티클들의 링크를 보면 중간에 en-US라고 하는 부분이 있다.(바로 어떤
언어로 보여질 것인가를 결정하는 파라메터 되겠다.)
&lt;/p&gt;
&lt;p&gt;
예) Installing and Configuring Servers - &lt;a title="http://technet.microsoft.com/en-us/library/cc755183.aspx" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;amp;url=http%3a%2f%2ftechnet.microsoft.com%2fen-us%2flibrary%2fcc755183.aspx"&gt;http://technet.microsoft.com/en-us/library/cc755183.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
요기서 살짝 en-US를 ko-KR로 바꿔줘 보자. – 그러면 다시 redirection 되면서 한글화된 내용을 볼 수 있다. &lt;a title="http://technet.microsoft.com/ko-kr/library/cc755183(WS.10).aspx" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;amp;url=http%3a%2f%2ftechnet.microsoft.com%2fko-kr%2flibrary%2fcc755183(WS.10).aspx"&gt;http://technet.microsoft.com/ko-kr/library/cc755183(WS.10).aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
예상외로 현업에서 개발자건 시스템 운영자건 간에 IIS에 대한 이해가 높지 않다. 
&lt;br /&gt;
&lt;br /&gt;
Recycling의 Sexy함도 WorkerProcess 의 융통성과 Kernel Level Processing의 강력함도 이해하지 못한 채 예전
IIS 4.0 수준의 이해로 일관하는 게으른 개발자들이 주변에 너무 많다. 
&lt;br /&gt;
&lt;br /&gt;
IIS가 불안정하고, 제한적이라고? 제발 좀 들여다 보자. 얼마나 돈 들여 사용할만한 구조를 가지고 있는 것인지 말이다. 
&lt;br /&gt;
&amp;#160; 
&lt;br /&gt;
그저 가상디렉토리 하나 만들어, 웹 어플리케이션 하나 만들어 웹 컨텐츠들을 호스팅하기에는 IIS의 기능들이 너무나 아깝다. 
&lt;br /&gt;
&lt;br /&gt;
이건 마치 포스쉐를 오토기어로 운전해 주시는 센스 없는 운전자와 다를 바가 없다. 
&lt;br /&gt;
&lt;br /&gt;
구조를 조금 더 알고 싶은 개발자들은 참조하자. 
&lt;br /&gt;
&lt;br /&gt;
☞ IIS 6.0 기술개요 백서 - &lt;a title="download.microsoft.com" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;amp;url=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f9%2f3%2f59354f90-9bb1-4374-b6c8-f68d73fd3f3b%2fMSCOM64BitArchitecture_TWP.doc"&gt;기술백서
다운로드&lt;/a&gt; (반드시 읽고 이해하자) 
&lt;br /&gt;
☞ Introduction to IIS 7.0 Architecture - &lt;a title="http://learn.iis.net/page.aspx/101/introduction-to-iis7-architecture/" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;amp;url=http%3a%2f%2flearn.iis.net%2fpage.aspx%2f101%2fintroduction-to-iis7-architecture%2f"&gt;http://learn.iis.net/page.aspx/101/introduction-to-iis7-architecture/&lt;/a&gt; 
&lt;br /&gt;
☞ 한글화 된 MSDN 아티클 – Windows Vista 및 그 이상의 웹 서버를 위한 탐색 &lt;a title="http://msdn.microsoft.com/ko-kr/magazine/cc163453.aspx" href="http://www.mhvb.net/funnyfox/ct.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fko-kr%2fmagazine%2fcc163453.aspx"&gt;http://msdn.microsoft.com/ko-kr/magazine/cc163453.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;IIS 제대로 이해하고 써 보자. 잘 튜닝된 웹 서버 한대 세 서버 안 부럽다!&lt;/u&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=629bd10d-f5b1-438e-83b1-4be1124c2af6" /&gt;</description>
      <comments>http://www.mhvb.net/funnyfox/CommentView,guid,629bd10d-f5b1-438e-83b1-4be1124c2af6.aspx</comments>
      <category>iis</category>
      <category>IIS7</category>
      <category>Internet Information Server</category>
      <category>웹서버</category>
    <feedburner:origLink>http://www.mhvb.net/funnyfox/2009/06/24/IIS+%ec%a0%9c%eb%8c%80%eb%a1%9c+%ec%95%8c%ea%b3%a0+%ec%93%b0%ec%9e%90.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.mhvb.net/funnyfox/Trackback.aspx?guid=68cf1801-10c3-4c50-a8ec-0638d9ac810d</trackback:ping>
      <pingback:server>http://www.mhvb.net/funnyfox/pingback.aspx</pingback:server>
      <pingback:target>http://www.mhvb.net/funnyfox/PermaLink,guid,68cf1801-10c3-4c50-a8ec-0638d9ac810d.aspx</pingback:target>
      <dc:creator>이동범</dc:creator>
      <georss:point>37.572312 126.958158</georss:point>
      <wfw:comment>http://www.mhvb.net/funnyfox/CommentView,guid,68cf1801-10c3-4c50-a8ec-0638d9ac810d.aspx</wfw:comment>
      <wfw:commentRss>http://www.mhvb.net/funnyfox/SyndicationService.asmx/GetEntryCommentsRss?guid=68cf1801-10c3-4c50-a8ec-0638d9ac810d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
클라우드 컴퓨팅 환경 구축을 위한 Identity 서비스의 시작 - Geneva Framework
</p>
        <p>
클라우드 컴퓨팅에 대한 많은 소개들과 관심들이 지천이다. 많은 이들이 클라우드 컴퓨팅을 외치지만 Identity가 보장되지 않는 클라우드는 Hosting
Computing의 짝퉁일 수 밖에 없다.
</p>
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=68cf1801-10c3-4c50-a8ec-0638d9ac810d&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a> Azure
Service Platform에서 역시 가장 기본이 되야 할 부분이 바로 Identity. 
<br />
이를 위해 지원되는 서비스를 쉽게 사용할 수 있도록 지원되는 것이 Genava Framework 이다.
</p>
        <p>
하지만 멋진 PPT Sheet 를 통해서만 봤었지, 실제 테스트 환경을 구축하는 것도 실제 운영환경을 접해보는 것도 쉬운 일이 아니였다. 사실 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=68cf1801-10c3-4c50-a8ec-0638d9ac810d&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a> Internal로
VPC 이미지 4개로 릴리즈된 버전이 있긴 했으나 이 역시 구동을 위해서는 만만치 않은 하드웨어 리소스와 설정을 위한 리소스가 필요했다. 
<br /><br />
반갑게도 금번에 일반 개발자들을 위한 데모가 다가가기 쉽고 이해하기 쉽도록 새로 릴리즈 되었다. 
<br /><br />
FabrikamShipping - <a title="http://code.msdn.microsoft.com/FabrikamShipping" href="http://www.mhvb.net/funnyfox/ct.ashx?id=68cf1801-10c3-4c50-a8ec-0638d9ac810d&amp;url=http%3a%2f%2fcode.msdn.microsoft.com%2fFabrikamShipping">http://code.msdn.microsoft.com/FabrikamShipping</a></p>
        <p>
원래 이 데모의 시작은 작년 PDC에서 발표됐었던 Identity Roadmap for Software + Services 의 예제이다.(Must
See! - <a title="http://channel9.msdn.com/pdc2008/BB11/" href="http://www.mhvb.net/funnyfox/ct.ashx?id=68cf1801-10c3-4c50-a8ec-0638d9ac810d&amp;url=http%3a%2f%2fchannel9.msdn.com%2fpdc2008%2fBB11%2f">http://channel9.msdn.com/pdc2008/BB11/</a>)
</p>
        <p>
어플리케이션 환경이 점차 On Premise 에서 Hosting, Cloud로 변화해 가는 과정에서 반드시 개발자로써 알아두어야 할 부분이라 생각한다.
</p>
        <p>
*올해 초엔가 언젠가 인터넷상에서의 Identity Service에 대해 정리해 포스팅 하겠다고 큰소리를 쳐 놓고선 아직도 머릿속만 무겁다.
</p>
        <img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=68cf1801-10c3-4c50-a8ec-0638d9ac810d" />
      </body>
      <title>Everything is enabled by Identity</title>
      <guid isPermaLink="false">http://www.mhvb.net/funnyfox/PermaLink,guid,68cf1801-10c3-4c50-a8ec-0638d9ac810d.aspx</guid>
      <link>http://feedproxy.google.com/~r/Dongbum/~3/FeZtZtHfikU/Everything+Is+Enabled+By+Identity.aspx</link>
      <pubDate>Mon, 22 Jun 2009 01:59:08 GMT</pubDate>
      <description>&lt;p&gt;
클라우드 컴퓨팅 환경 구축을 위한 Identity 서비스의 시작 - Geneva Framework
&lt;/p&gt;
&lt;p&gt;
클라우드 컴퓨팅에 대한 많은 소개들과 관심들이 지천이다. 많은 이들이 클라우드 컴퓨팅을 외치지만 Identity가 보장되지 않는 클라우드는 Hosting
Computing의 짝퉁일 수 밖에 없다.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=68cf1801-10c3-4c50-a8ec-0638d9ac810d&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt; Azure
Service Platform에서 역시 가장 기본이 되야 할 부분이 바로 Identity. 
&lt;br /&gt;
이를 위해 지원되는 서비스를 쉽게 사용할 수 있도록 지원되는 것이 Genava Framework 이다.
&lt;/p&gt;
&lt;p&gt;
하지만 멋진 PPT Sheet 를 통해서만 봤었지, 실제 테스트 환경을 구축하는 것도 실제 운영환경을 접해보는 것도 쉬운 일이 아니였다. 사실 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=68cf1801-10c3-4c50-a8ec-0638d9ac810d&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt; Internal로
VPC 이미지 4개로 릴리즈된 버전이 있긴 했으나 이 역시 구동을 위해서는 만만치 않은 하드웨어 리소스와 설정을 위한 리소스가 필요했다. 
&lt;br /&gt;
&lt;br /&gt;
반갑게도 금번에 일반 개발자들을 위한 데모가 다가가기 쉽고 이해하기 쉽도록 새로 릴리즈 되었다. 
&lt;br /&gt;
&lt;br /&gt;
FabrikamShipping - &lt;a title="http://code.msdn.microsoft.com/FabrikamShipping" href="http://www.mhvb.net/funnyfox/ct.ashx?id=68cf1801-10c3-4c50-a8ec-0638d9ac810d&amp;amp;url=http%3a%2f%2fcode.msdn.microsoft.com%2fFabrikamShipping"&gt;http://code.msdn.microsoft.com/FabrikamShipping&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
원래 이 데모의 시작은 작년 PDC에서 발표됐었던 Identity Roadmap for Software + Services 의 예제이다.(Must
See! - &lt;a title="http://channel9.msdn.com/pdc2008/BB11/" href="http://www.mhvb.net/funnyfox/ct.ashx?id=68cf1801-10c3-4c50-a8ec-0638d9ac810d&amp;amp;url=http%3a%2f%2fchannel9.msdn.com%2fpdc2008%2fBB11%2f"&gt;http://channel9.msdn.com/pdc2008/BB11/&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
어플리케이션 환경이 점차 On Premise 에서 Hosting, Cloud로 변화해 가는 과정에서 반드시 개발자로써 알아두어야 할 부분이라 생각한다.
&lt;/p&gt;
&lt;p&gt;
*올해 초엔가 언젠가 인터넷상에서의 Identity Service에 대해 정리해 포스팅 하겠다고 큰소리를 쳐 놓고선 아직도 머릿속만 무겁다.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=68cf1801-10c3-4c50-a8ec-0638d9ac810d" /&gt;</description>
      <comments>http://www.mhvb.net/funnyfox/CommentView,guid,68cf1801-10c3-4c50-a8ec-0638d9ac810d.aspx</comments>
      <category>Azure</category>
      <category>Cloud Computing</category>
      <category>FabrikamShipping</category>
      <category>Geneva Framework</category>
      <category>Identity</category>
      <category>Microsoft Azure Service Platform</category>
      <category>마이크로소프트 애저</category>
      <category>애저</category>
      <category>제네바 프레임워크</category>
    <feedburner:origLink>http://www.mhvb.net/funnyfox/2009/06/22/Everything+Is+Enabled+By+Identity.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.mhvb.net/funnyfox/Trackback.aspx?guid=30aa6522-d747-4859-b667-ae52cd940811</trackback:ping>
      <pingback:server>http://www.mhvb.net/funnyfox/pingback.aspx</pingback:server>
      <pingback:target>http://www.mhvb.net/funnyfox/PermaLink,guid,30aa6522-d747-4859-b667-ae52cd940811.aspx</pingback:target>
      <dc:creator>이동범</dc:creator>
      <georss:point>37.572312 126.958158</georss:point>
      <wfw:comment>http://www.mhvb.net/funnyfox/CommentView,guid,30aa6522-d747-4859-b667-ae52cd940811.aspx</wfw:comment>
      <wfw:commentRss>http://www.mhvb.net/funnyfox/SyndicationService.asmx/GetEntryCommentsRss?guid=30aa6522-d747-4859-b667-ae52cd940811</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image58.png">
            <img style="border-bottom: 0px; border-left: 0px; margin: 20px 30px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image002_eac8a53d-bd1e-417f-a6b5-759ba8e1ec06.gif" width="255" height="64" />
          </a>
        </p>
        <p>
          <a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image58.png">
          </a>
        </p>
        <p>
 
</p>
        <p>
 
</p>
        <p>
미국의 유명한 사진 공유 사이트인 Photobucket 이 이번에 Silverlight과 Windows Live Web Messenger Toolkit을
이용한 새로운 visual search 사이트를 오픈 했습니다. - <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=30aa6522-d747-4859-b667-ae52cd940811&amp;url=http%3a%2f%2fphotobucket.com%2fvisualsearch"><b>http://photobucket.com/visualsearch</b></a><br /><br />
제가 몇 차례에 나눠 소개한 Windows Live Web Messenger Toolkit을 사용하여 이용자가 검색한 사진을 곧바로 메신저 상의 친구들과
공유하고 메세지를 주고 받을 수 있도록 하는 기능을 제공하고 있습니다. 
<br /><br />
기존처럼 미디어 컨텐츠에 대한 링크를 이메일로 상대에 전달해 주는 방식보다 실시간으로 메신저 친구에게 미디어 리소스 링크를 전달하고 이에 대한 의견이나
느낌을 공유할 수 있도록 해 주기 때문에 사용자의 realtime activity 높일 수 있을 뿐만 아니라 웹 사이트의 트래픽 향상에도 효자 노릇을
할 수 있습니다.
</p>
        <p>
게다가 HTML 와 Javascript 기반으로 구성되므로 더 이상 클라이언트에 메신저가 설치가 되어 있네, 맥이네, 리눅스네 할 것 없이 브라우저만
지원되는 환경이라면 얼마든지 친구들과 메세징을 진행할 수 있어 “플랫폼 중립”을 부르짖는 업계에게도 아주 좋은 선택이 될 수 있으리라 생각합니다.
</p>
        <p>
 <a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image004_9deff6b6-7de8-422d-802b-cf51aab8c2f1.gif" width="244" height="197" /></a><a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image11.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image006_2a6202a1-9b22-4345-a941-736e2d928420.gif" width="244" height="197" /></a><a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image21.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image008_38b72e9e-4888-426b-be07-feb57782d321.gif" width="244" height="197" /></a><a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image17.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image010_45ecbfef-a56e-41b8-a3ee-9e2d06384b67.gif" width="244" height="213" /></a><a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image24.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image012" border="0" alt="clip_image012" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image012_a869d299-1a08-4ed4-acc8-696f05010881.gif" width="227" height="142" /></a><a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image27.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image014" border="0" alt="clip_image014" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image014_a5146730-f1ea-4613-853c-36b2513552cb.gif" width="244" height="197" /></a><a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image30.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image016" border="0" alt="clip_image016" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image016_416f234f-929e-4ed8-8ef0-55edf209c6b9.gif" width="244" height="197" /></a><a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image33.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image018" border="0" alt="clip_image018" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image018_b2042de9-769e-4c99-bc7c-7dae7b0e90d3.gif" width="244" height="197" /></a><br />
[웹 메신저에 로그인] 
<br /><br /><a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image39.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002[8]" border="0" alt="clip_image002[8]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image002%5B8%5D_2a1b4622-c311-4b05-af1b-d3b63c07f13e.gif" width="244" height="197" /></a><a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image49.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004[4]" border="0" alt="clip_image004[4]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image004%5B4%5D_7d7cb60c-9bf8-42bd-b6bb-7676804ea9b8.gif" width="244" height="197" /></a><a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image46.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006[4]" border="0" alt="clip_image006[4]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image006%5B4%5D_77065ba7-49e3-4bb1-8926-f2900d8e38d2.gif" width="244" height="197" /></a><br />
[친구와 공유하기]
</p>
        <p>
          <a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image80.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002[10]" border="0" alt="clip_image002[10]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image002%5B10%5D_abfd5e15-efe3-4dc9-a5a5-f49ea92667f4.gif" width="244" height="152" />
          </a>
          <a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image78.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004[6]" border="0" alt="clip_image004[6]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image004%5B6%5D_e7d6d38b-69a5-417d-910e-4f0027ec2f6e.gif" width="184" height="192" />
          </a>
          <a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image76.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006[6]" border="0" alt="clip_image006[6]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image006%5B6%5D_1119d46d-1b9e-4440-9797-9c0ef19674b8.gif" width="244" height="197" />
          </a>
          <br />
[사진을 공유 받은 친구의 메신저 화면]
</p>
        <p>
이전에 라이브 메신저 Activity SDK를 통해 구현했었던 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=30aa6522-d747-4859-b667-ae52cd940811&amp;url=http%3a%2f%2fim.msn.co.kr%2fim%2fpartner%2fpartnerList02.asp" target="_blank">IMThis(메신저
보내기)</a> 기능들을 이제는 쉽게 HTML 과 Javascript만을 가지고 구현할 수 있게 된 거죠. 
<br /><br />
Windows Live Messenger Activity SDK를 고려하고 있는 곳이라면, 웹 사이트를 보다 Social 하게 만들 수 있는 방법은
없을까 고민하고 계신 곳이라면 고려해 보실 가치가 충분하다고 생각합니다. <img alt=":-)" src="smilies/happy.gif" /></p>
        <img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=30aa6522-d747-4859-b667-ae52cd940811" />
      </body>
      <title>Windows Live Web Messenger Toolkit이 적용된 Photobucket</title>
      <guid isPermaLink="false">http://www.mhvb.net/funnyfox/PermaLink,guid,30aa6522-d747-4859-b667-ae52cd940811.aspx</guid>
      <link>http://feedproxy.google.com/~r/Dongbum/~3/mz7qGvObRrc/Windows+Live+Web+Messenger+Toolkit%ec%9d%b4+%ec%a0%81%ec%9a%a9%eb%90%9c+Photobucket.aspx</link>
      <pubDate>Fri, 19 Jun 2009 06:27:10 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image58.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 20px 30px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image002_eac8a53d-bd1e-417f-a6b5-759ba8e1ec06.gif" width="255" height="64" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image58.png"&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
미국의 유명한 사진 공유 사이트인 Photobucket 이 이번에 Silverlight과 Windows Live Web Messenger Toolkit을
이용한 새로운 visual search 사이트를 오픈 했습니다. - &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=30aa6522-d747-4859-b667-ae52cd940811&amp;amp;url=http%3a%2f%2fphotobucket.com%2fvisualsearch"&gt;&lt;b&gt;http://photobucket.com/visualsearch&lt;/b&gt;&lt;/a&gt; 
&lt;br /&gt;
&lt;br /&gt;
제가 몇 차례에 나눠 소개한 Windows Live Web Messenger Toolkit을 사용하여 이용자가 검색한 사진을 곧바로 메신저 상의 친구들과
공유하고 메세지를 주고 받을 수 있도록 하는 기능을 제공하고 있습니다. 
&lt;br /&gt;
&lt;br /&gt;
기존처럼 미디어 컨텐츠에 대한 링크를 이메일로 상대에 전달해 주는 방식보다 실시간으로 메신저 친구에게 미디어 리소스 링크를 전달하고 이에 대한 의견이나
느낌을 공유할 수 있도록 해 주기 때문에 사용자의 realtime activity 높일 수 있을 뿐만 아니라 웹 사이트의 트래픽 향상에도 효자 노릇을
할 수 있습니다.
&lt;/p&gt;
&lt;p&gt;
게다가 HTML 와 Javascript 기반으로 구성되므로 더 이상 클라이언트에 메신저가 설치가 되어 있네, 맥이네, 리눅스네 할 것 없이 브라우저만
지원되는 환경이라면 얼마든지 친구들과 메세징을 진행할 수 있어 “플랫폼 중립”을 부르짖는 업계에게도 아주 좋은 선택이 될 수 있으리라 생각합니다.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image004_9deff6b6-7de8-422d-802b-cf51aab8c2f1.gif" width="244" height="197" /&gt;&lt;/a&gt; &lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image11.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image006_2a6202a1-9b22-4345-a941-736e2d928420.gif" width="244" height="197" /&gt;&lt;/a&gt; &lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image21.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image008_38b72e9e-4888-426b-be07-feb57782d321.gif" width="244" height="197" /&gt;&lt;/a&gt;&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image17.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image010_45ecbfef-a56e-41b8-a3ee-9e2d06384b67.gif" width="244" height="213" /&gt;&lt;/a&gt;&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image24.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image012" border="0" alt="clip_image012" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image012_a869d299-1a08-4ed4-acc8-696f05010881.gif" width="227" height="142" /&gt;&lt;/a&gt;&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image27.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image014" border="0" alt="clip_image014" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image014_a5146730-f1ea-4613-853c-36b2513552cb.gif" width="244" height="197" /&gt;&lt;/a&gt;&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image30.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image016" border="0" alt="clip_image016" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image016_416f234f-929e-4ed8-8ef0-55edf209c6b9.gif" width="244" height="197" /&gt;&lt;/a&gt;&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image33.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image018" border="0" alt="clip_image018" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image018_b2042de9-769e-4c99-bc7c-7dae7b0e90d3.gif" width="244" height="197" /&gt;&lt;/a&gt; 
&lt;br /&gt;
[웹 메신저에 로그인] 
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image39.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002[8]" border="0" alt="clip_image002[8]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image002%5B8%5D_2a1b4622-c311-4b05-af1b-d3b63c07f13e.gif" width="244" height="197" /&gt;&lt;/a&gt;&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image49.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004[4]" border="0" alt="clip_image004[4]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image004%5B4%5D_7d7cb60c-9bf8-42bd-b6bb-7676804ea9b8.gif" width="244" height="197" /&gt;&lt;/a&gt;&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image46.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006[4]" border="0" alt="clip_image006[4]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image006%5B4%5D_77065ba7-49e3-4bb1-8926-f2900d8e38d2.gif" width="244" height="197" /&gt;&lt;/a&gt; 
&lt;br /&gt;
[친구와 공유하기]
&lt;/p&gt;
&lt;p&gt;
&lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image80.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002[10]" border="0" alt="clip_image002[10]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image002%5B10%5D_abfd5e15-efe3-4dc9-a5a5-f49ea92667f4.gif" width="244" height="152" /&gt;&lt;/a&gt; &lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image78.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004[6]" border="0" alt="clip_image004[6]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image004%5B6%5D_e7d6d38b-69a5-417d-910e-4f0027ec2f6e.gif" width="184" height="192" /&gt;&lt;/a&gt; &lt;a href="file:///C:\Users\alogan\AppData\Local\Temp\WindowsLiveWriter1286139640\supfiles7609024\image76.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image006[6]" border="0" alt="clip_image006[6]" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveWebMessengerToolkitPhotobucke_D70A/clip_image006%5B6%5D_1119d46d-1b9e-4440-9797-9c0ef19674b8.gif" width="244" height="197" /&gt;&lt;/a&gt; 
&lt;br /&gt;
[사진을 공유 받은 친구의 메신저 화면]
&lt;/p&gt;
&lt;p&gt;
이전에 라이브 메신저 Activity SDK를 통해 구현했었던 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=30aa6522-d747-4859-b667-ae52cd940811&amp;amp;url=http%3a%2f%2fim.msn.co.kr%2fim%2fpartner%2fpartnerList02.asp" target="_blank"&gt;IMThis(메신저
보내기)&lt;/a&gt; 기능들을 이제는 쉽게 HTML 과 Javascript만을 가지고 구현할 수 있게 된 거죠. 
&lt;br /&gt;
&lt;br /&gt;
Windows Live Messenger Activity SDK를 고려하고 있는 곳이라면, 웹 사이트를 보다 Social 하게 만들 수 있는 방법은
없을까 고민하고 계신 곳이라면 고려해 보실 가치가 충분하다고 생각합니다. &lt;img alt=":-)" src="smilies/happy.gif"&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=30aa6522-d747-4859-b667-ae52cd940811" /&gt;</description>
      <comments>http://www.mhvb.net/funnyfox/CommentView,guid,30aa6522-d747-4859-b667-ae52cd940811.aspx</comments>
      <category>Live messenger</category>
      <category>Microsoft</category>
      <category>Windows Live</category>
      <category>Windows Live Messenger</category>
      <category>Windows Live Messenger Web Toolkit</category>
      <category>라이브 아이디</category>
      <category>윈도우 라이브</category>
      <category>윈도우 라이브 메신저 웹 툴킷</category>
    <feedburner:origLink>http://www.mhvb.net/funnyfox/2009/06/19/Windows+Live+Web+Messenger+Toolkit%ec%9d%b4+%ec%a0%81%ec%9a%a9%eb%90%9c+Photobucket.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.mhvb.net/funnyfox/Trackback.aspx?guid=6f4d4ac6-e7f6-480c-a6ae-2065ebb06420</trackback:ping>
      <pingback:server>http://www.mhvb.net/funnyfox/pingback.aspx</pingback:server>
      <pingback:target>http://www.mhvb.net/funnyfox/PermaLink,guid,6f4d4ac6-e7f6-480c-a6ae-2065ebb06420.aspx</pingback:target>
      <dc:creator>이동범</dc:creator>
      <georss:point>37.572312 126.958158</georss:point>
      <wfw:comment>http://www.mhvb.net/funnyfox/CommentView,guid,6f4d4ac6-e7f6-480c-a6ae-2065ebb06420.aspx</wfw:comment>
      <wfw:commentRss>http://www.mhvb.net/funnyfox/SyndicationService.asmx/GetEntryCommentsRss?guid=6f4d4ac6-e7f6-480c-a6ae-2065ebb06420</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
기다리던 Small Basic의 다섯 번째 릴리즈인 Small Basic v0.5 CTP가 public 하게 오픈 되었습니다. 
<br />
추가된 기능들은 커뮤니티를 통해 요청되어 오던 것들 중심이라고 하네요.
</p>
        <p>
다들 다운로드 받으러 클릭! <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=6f4d4ac6-e7f6-480c-a6ae-2065ebb06420&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fdevlabs%2fcc950524.aspx">http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx</a></p>
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=6f4d4ac6-e7f6-480c-a6ae-2065ebb06420&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fSmallBasicv0.5isnowpublic_91C6%2fclip_image001_2.jpg">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/SmallBasicv0.5isnowpublic_91C6/clip_image001_thumb.jpg" width="375" height="254" />
          </a>
        </p>
        <p>
변경된 사항들이 궁금하시면 다음의 링크를 참조하세요~<a href="http://www.mhvb.net/funnyfox/ct.ashx?id=6f4d4ac6-e7f6-480c-a6ae-2065ebb06420&amp;url=http%3a%2f%2fblogs.msdn.com%2fsmallbasic%2f">http://blogs.msdn.com/smallbasic/</a><br />
새로 태어날 제 딸에게 Small Basic을 가르쳐 보면 어떨까 하는 (안사람 들으면 싫어할) 상상을 해 봅니다. 
<br /><br />
Small Basic의 Turtle Graphics와 MS Robotics studio와 연결을 해 보면 어떨까 하는 생각을 하는데 어떨까요, 재미있지
않겠어요? <img alt=":-)" src="smilies/happy.gif" /></p>
        <img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=6f4d4ac6-e7f6-480c-a6ae-2065ebb06420" />
      </body>
      <title>Small Basic v0.5 is now public!</title>
      <guid isPermaLink="false">http://www.mhvb.net/funnyfox/PermaLink,guid,6f4d4ac6-e7f6-480c-a6ae-2065ebb06420.aspx</guid>
      <link>http://feedproxy.google.com/~r/Dongbum/~3/FHFMRBmuS_c/Small+Basic+V05+Is+Now+Public.aspx</link>
      <pubDate>Wed, 17 Jun 2009 01:31:12 GMT</pubDate>
      <description>&lt;p&gt;
기다리던 Small Basic의 다섯 번째 릴리즈인 Small Basic v0.5 CTP가 public 하게 오픈 되었습니다. 
&lt;br /&gt;
추가된 기능들은 커뮤니티를 통해 요청되어 오던 것들 중심이라고 하네요.
&lt;/p&gt;
&lt;p&gt;
다들 다운로드 받으러 클릭! &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=6f4d4ac6-e7f6-480c-a6ae-2065ebb06420&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2fdevlabs%2fcc950524.aspx"&gt;http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=6f4d4ac6-e7f6-480c-a6ae-2065ebb06420&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fSmallBasicv0.5isnowpublic_91C6%2fclip_image001_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/SmallBasicv0.5isnowpublic_91C6/clip_image001_thumb.jpg" width="375" height="254" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
변경된 사항들이 궁금하시면 다음의 링크를 참조하세요~&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=6f4d4ac6-e7f6-480c-a6ae-2065ebb06420&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fsmallbasic%2f"&gt;http://blogs.msdn.com/smallbasic/&lt;/a&gt; 
&lt;br /&gt;
새로 태어날 제 딸에게 Small Basic을 가르쳐 보면 어떨까 하는 (안사람 들으면 싫어할) 상상을 해 봅니다. 
&lt;br /&gt;
&lt;br /&gt;
Small Basic의 Turtle Graphics와 MS Robotics studio와 연결을 해 보면 어떨까 하는 생각을 하는데 어떨까요, 재미있지
않겠어요? &lt;img alt=":-)" src="smilies/happy.gif"&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=6f4d4ac6-e7f6-480c-a6ae-2065ebb06420" /&gt;</description>
      <comments>http://www.mhvb.net/funnyfox/CommentView,guid,6f4d4ac6-e7f6-480c-a6ae-2065ebb06420.aspx</comments>
      <category>.net</category>
      <category>basic</category>
      <category>Microsoft</category>
      <category>small basic</category>
      <category>개발자</category>
      <category>베이직</category>
      <category>스몰베이직</category>
    <feedburner:origLink>http://www.mhvb.net/funnyfox/2009/06/17/Small+Basic+V05+Is+Now+Public.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.mhvb.net/funnyfox/Trackback.aspx?guid=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3</trackback:ping>
      <pingback:server>http://www.mhvb.net/funnyfox/pingback.aspx</pingback:server>
      <pingback:target>http://www.mhvb.net/funnyfox/PermaLink,guid,b5aa7ce3-fc1e-41e9-b120-69101f49f5b3.aspx</pingback:target>
      <dc:creator>이동범</dc:creator>
      <georss:point>37.572312 126.958158</georss:point>
      <wfw:comment>http://www.mhvb.net/funnyfox/CommentView,guid,b5aa7ce3-fc1e-41e9-b120-69101f49f5b3.aspx</wfw:comment>
      <wfw:commentRss>http://www.mhvb.net/funnyfox/SyndicationService.asmx/GetEntryCommentsRss?guid=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>
            <em>윈도우 라이브 메신저 웹 툴킷 – 라이브 메신저의 모든 것을 웹에서</em>
          </strong>
        </p>
        <p>
이번 글에서는 간단한 예제를 만들어 보면서 라이브 메신저 툴킷의 웹 컨트롤들을 자세히 살펴봅니다.
</p>
        <p>
앞서 두 번째 포스팅(Part2)에서 메신저 UI 컨트롤 각각에 대해 소개해 드렸습니다만, 실제 구현에 대해서는 이번 글을 통해 알아 보도록 합니다. 
<br /><br />
이 글을 통한 구현에 앞서 여러 컨트롤들을 동적으로 조작해 보면서 익힐 수 있는 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fmessenger.mslivelabs.com%2f" target="_blank">Messenger
Interactive Toolkit</a>을 미리 살펴 두시는 것도 도움이 될 것 입니다. 
<br />
(링크를 따라 사이트에 가셔서 learn 을 클릭하시면 각 컨트롤들의 기능들에 대해 직접 값들을 변경해 가면서 쉽게 익힐 수 있는 페이지를 찾을 수
있습니다.) 
</p>
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart5_FCF2%2flearn_sdk_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="learn_sdk" border="0" alt="learn_sdk" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart5_FCF2/learn_sdk_thumb.png" width="390" height="100" />
          </a>
          <br />
[그림처럼 learn 을 클릭!]
</p>
        <p>
이 글을 통해 구현해 볼 것은 사용자가 메신저에 로그인을 해서 현재 온라인 상태의 메신저 친구들을 나열하고, 이 친구들을 클릭하면 Live home
Profile 페이지로 이동하는 기능을 가진 페이지 입니다. 
</p>
        <p>
아래의 동영상에서 보시는 기능을 구현 합니다.
</p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:cff5ba8f-f453-4289-8cfd-3b4156e3888b" class="wlWriterEditableSmartContent">
          <div id="06b456fb-13a8-4efd-afb5-1b321b0c4724" style="margin: 0px; padding: 0px; display: inline;">
            <div>
              <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.youtube.com%2fwatch%3fv%3diaghMxFRGVY" target="_new">
                <img src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart5_FCF2/video20a6877d803d.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('06b456fb-13a8-4efd-afb5-1b321b0c4724'); downlevelDiv.innerHTML = &quot;&lt;div&gt;&lt;object width=\&quot;425\&quot; height=\&quot;355\&quot;&gt;&lt;param name=\&quot;movie\&quot; value=\&quot;http://www.youtube.com/v/iaghMxFRGVY&amp;hl=en\&quot;&gt;&lt;\/param&gt;&lt;embed src=\&quot;http://www.youtube.com/v/iaghMxFRGVY&amp;hl=en\&quot; type=\&quot;application/x-shockwave-flash\&quot; width=\&quot;425\&quot; height=\&quot;355\&quot;&gt;&lt;\/embed&gt;&lt;\/object&gt;&lt;\/div&gt;&quot;;" alt="" />
              </a>
            </div>
          </div>
        </div>
        <p>
        </p>
        <p>
        </p>
        <p>
이제 아래의 순서에 따라 차례로 구현을 시작해 봅니다.
</p>
        <p>
          <u>Step 1. 기본 설정 
<br /></u>지난 테스트에서 사용했던 예제 프로젝트를 기준으로 진행합니다. 
<br />
기본적으로 필요한 파일들을 꼽아 보자면, 
<br /><br />
&gt; <strong>Channel.html</strong><br />
&gt; <strong>Privacy.html</strong><br />
&gt; <strong>RefreshMessengerToken.aspx 
<br /></strong>&gt; <strong>Web.config</strong></p>
        <p>
다음과 같은 파일들이 필요합니다. 각각의 기능들이 뭐냐고 물어보시는 분은 없겠죠? [ 있어요? =&gt; <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2f2009%2f06%2f09%2fWindows%2bLive%2bMessenger%2bWeb%2bToolkit%2bPart3.aspx" target="_blank">클릭</a> ] 
<br /><br /><u>Step 2. AppVarifier를 생성 위한 페이지 설정</u><br />
프로젝트에 새로운 웹 폼을 추가해 주시고 페이지 이름을 MyOnlineBuddies.aspx 로 해 줍니다. 
<br /><br />
그리고 페이지의 vb 혹은 c# 파일에 다음과 같이 코드를 추가합니다. 이 글에서 .net 을 사용한다고 해서 여러분들 역시 그럴 필요는 없습니다. 
<br />
앞서 소개해 드린 것처럼 Java/Ruby/Phython/Pearl/php 어떤 언어든 상관없이 구현이 가능합니다.
</p>
[VB.net 코드] 
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 66.8%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #0000ff">Imports</span> WindowsLive</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span> Partial <span style="color: #0000ff">Class</span> MyOnlineBuddies</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span><span style="color: #0000ff">Inherits</span> System.Web.UI.Page</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4"> 4:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5"> 5:</span><span style="color: #0000ff">Private</span> wll <span style="color: #0000ff">As</span> WindowsLiveLogin
= <span style="color: #0000ff">New</span> WindowsLiveLogin(<span style="color: #0000ff">True</span>)</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6"> 6:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7"> 7:</span><span style="color: #008000">'''
&lt;summary&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8"> 8:</span><span style="color: #008000">'''
Gets an application verifier token.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9"> 9:</span><span style="color: #008000">'''
&lt;/summary&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10"> 10:</span><span style="color: #008000">'''
&lt;returns&gt;The application verifier token&lt;/returns&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11"> 11:</span><span style="color: #0000ff">Protected</span><span style="color: #0000ff">ReadOnly</span><span style="color: #0000ff">Property</span> ApplicationVerifier() <span style="color: #0000ff">As</span><span style="color: #0000ff">String</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12"> 12:</span><span style="color: #0000ff">Get</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13"> 13:</span><span style="color: #0000ff">Return</span> wll.GetAppVerifier()</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14"> 14:</span><span style="color: #0000ff">End</span><span style="color: #0000ff">Get</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15"> 15:</span><span style="color: #0000ff">End</span><span style="color: #0000ff">Property</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16"> 16:</span><span style="color: #0000ff">End</span> Class</pre><!--CRLF--></div></div>
[C# 코드] 
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 66.78%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #0000ff">using</span> System;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span><span style="color: #0000ff">using</span> System.Web;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span><span style="color: #0000ff">using</span> System.Web.Configuration;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4"> 4:</span><span style="color: #0000ff">using</span> WindowsLive;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5"> 5:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6"> 6:</span><span style="color: #008000">///
&lt;summary&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7"> 7:</span><span style="color: #008000">///
Class for handling Default.aspx code behind.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8"> 8:</span><span style="color: #008000">///
&lt;/summary&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9"> 9:</span><span style="color: #0000ff">public</span><span style="color: #0000ff">partial</span><span style="color: #0000ff">class</span> MyOnlineBuddies:
System.Web.UI.Page</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10"> 10:</span> {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11"> 11:</span><span style="color: #0000ff">private</span> WindowsLiveLogin
wll = <span style="color: #0000ff">new</span> WindowsLiveLogin(<span style="color: #0000ff">true</span>); </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12"> 12:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13"> 13:</span><span style="color: #008000">///
&lt;summary&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14"> 14:</span><span style="color: #008000">///
Gets an application verifier.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15"> 15:</span><span style="color: #008000">///
&lt;/summary&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16"> 16:</span><span style="color: #0000ff">public</span><span style="color: #0000ff">string</span> ApplicationVerifier</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17"> 17:</span> {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18"> 18:</span> get</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19"> 19:</span> { </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20"> 20:</span><span style="color: #0000ff">return</span> wll.GetAppVerifier(); </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21"> 21:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum22"> 22:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum23"> 23:</span> }</pre><!--CRLF--></div></div><p><u>Step 3. HTML 페이지 기본 설정</u></p><p>
메신저 툴킷의 HTML UI 컨트롤은 XHTML 형식으로 구현되어 있다고 말씀 드린 것 기억하시죠? 
<br />
이 컨트롤들을 사용하기 위해 우리는 HTML 정의부에 네임스페이스를 추가해 주어야 합니다. 
<br /><br />
1. 다음과 같이 HTML 선언부를 변경해 줍니다. (이건 다 이미 우리가 살펴 본 내용들이죠)
</p><div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 66.05%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; height: 38px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.w3.org/1999/xhtml"</span><span style="color: #ff0000">xmlns:msgr</span><span style="color: #0000ff">="http://messenger.live.com/2009/ui-tags"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--></div></div><p>
2. 이어서 UI 컨트롤들이 사용하게 될 자바스크립트 라이브러리들을 로딩합니다.
</p><div id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 70%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span> &lt;head
runat=<span style="color: #006080">"server"</span>&gt;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span> &lt;title&gt;&lt;/title&gt;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span> &lt;script
type=<span style="color: #006080">"text/javascript"</span> src=<span style="color: #006080">"http://www.wlmessenger.net/api/3.0/loader.js"</span>&gt;&lt;/script&gt;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4"> 4:</span> &lt;script
type=<span style="color: #006080">"text/javascript"</span> language=<span style="color: #006080">"javascript"</span>&gt;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5"> 5:</span><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Core.Loader.load([<span style="color: #006080">'messenger.ui'</span>, <span style="color: #006080">'messenger.ui.styles.core'</span>]);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6"> 6:</span> &lt;/script&gt;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7"> 7:</span> &lt;/head&gt;</pre><!--CRLF--></div></div><p>
3. 그리고 마지막으로 메신저 AppTag를 추가해 줍니다.
</p><div id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 70%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">msgr:app</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="appTag"</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span><span style="color: #ff0000">application-verifier-token</span><span style="color: #0000ff">="&lt;%=
ApplicationVerifier %&gt;"</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4"> 4:</span><span style="color: #ff0000">privacy-url</span><span style="color: #0000ff">="Privacy.html"</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5"> 5:</span><span style="color: #ff0000">channel-url</span><span style="color: #0000ff">="Channel.html"</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6"> 6:</span><span style="color: #ff0000">token-url</span><span style="color: #0000ff">="RefreshMessengerToken.aspx"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7"> 7:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">msgr:app</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8"> 8:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--></div></div><p>
여기까지는 제 앞선 글을 순서대로 읽어 주신 분들이라면 쉽게 이해하실 수 있는 부분입니다. 
<br />
여기에다가 &lt;msgr:bar&gt;&lt;/msgr:bar&gt; 태그만 붙어주면 페이지 하단에 웹 메신저를 호스팅 할 수 있었습니다. 
<br /><br />
이번에는 이 웹바 컨트롤 대신 로그인 기능, 온라인 친구목록 가져오기 기능등을 직접 구현해 보고자 합니다. 
<br /><br /><u>Step 4. 컨트롤 추가하기</u><br />
메신저 AppTag 뒤에 다음과 같이 Sign In 컨트롤을 추가해 줍니다.
</p><div id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 70%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">msgr:sign-in</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">msgr:sign-in</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--></div></div><p>
여기까지 진행 한 상태에서 한번 페이지를 실행해 봅니다. 
<br /><br />
Sign In 버튼이 보이고, 클릭 하여 로그인을 진행하면 갑자기 Sign In 버튼이 사라져 버린 것을 확인 하셨나요? 
<br /><br />
Sign In 버튼은 사용자가 메신저에 로그인 되어 있지 않은 경우 로그인을 하도록 유도하는 버튼입니다. 
<br />
내부적으로는 앞서 살펴 보았던 msgr-consent-token 과 msgr-delegation-token 유무를 체크하여 이 쿠키들이 없는 경우에만
로그인 버튼을 보이는 로직이 구현되어 있을 것 이죠 
<br /><br />
로그인 성공과 함께 로그인 버튼이 보이지 않는 것은 당연합니다. 
<br /><br />
자, 이제 브라우저를 닫고 이어서 Profile 컨트롤을 추가해 봅니다.  cid 값에 $user를 지정해 주었습니다. 
</p><div><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 69.64%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; height: 30px; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">msgr:profile</span><span style="color: #ff0000">cid</span><span style="color: #0000ff">="$user"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">msgr:profile</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--></div></div><p>
cid 값에 특정 사용자의 cid를 지정해 주면 해당 사용자의 대화명과 오늘의 글이 그리고 메신저 이미지가 보이며, Profile 정보 페이지로 이동할
수 있는 링크가 보입니다. 여기서 $user 란 현재 로그인 한 사용자를 뜻 합니다. 
<br />
즉, 나의 Profile을 보여주겠다는 뜻이죠.
</p><div>컨트롤을 페이지에 추가하셨다면 다시 페이지를 실행해 봅니다. 
<br /><br />
처음에는 No name(Offline) 이라고 쓰여진 화면이 Sign In 버튼 아래로 보이다가, 로그인을 하면 Sign In 버튼은 사라지고 여러분의
메신저 대화명과 이미지가 보이는 것 확인 하셨나요? 
<br /><br />
Sign In 컨트롤의 경우에는 로그인 전에 보이다가 로그인과 함께 사라지는 것처럼 Profile 컨트롤의 경우에는 사용자의 로그인 이후에 나타나게
하는 것이 좋을 것 입니다. 좀 썰렁해 보이는 것이 차라리 보이지 않는 편이 나을 테니까요.  
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart5_FCF2%2fprofile_before_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="profile_before" border="0" alt="profile_before" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart5_FCF2/profile_before_thumb.png" width="344" height="122" /></a><br /><br /></div><p /><p>
 
</p><p><br />
[썰렁한 로그인 전에 보이는 Profile 컨트롤 – 영 어색하다. 차라리 로그인 이전에는 보이지 않는 편이 낫다.]
</p><p>
로그인 전에는 Sign In 버튼만 보이다가, 로그인과 동시에 Profile 컨트롤이 보이게 하면 깔끔하게 떨어지는 UI가 나오게 될 껍니다. 
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart5_FCF2%2flogin_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="login" border="0" alt="login" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart5_FCF2/login_thumb.png" width="410" height="188" /></a>  
<br />
[로그인 전에는 Sign In 버튼만 보이다가 로그인과 함께 Profile 컨트롤이 보임]
</p><p>
그래서 고안된 컨트롤이 바로 “<strong>If 컨트롤</strong>” 입니다. 
<br />
바로 적용 들어갑니다. 
<br /><br /></p><div id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 70%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">msgr:sign-in</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">msgr:sign-in</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">msgr:if</span><span style="color: #ff0000">cid</span><span style="color: #0000ff">="$user"</span><span style="color: #ff0000">condition</span><span style="color: #0000ff">="online"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4"> 4:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">msgr:profile</span><span style="color: #ff0000">cid</span><span style="color: #0000ff">="$user"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5"> 5:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">msgr:profile</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6"> 6:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">msgr:if</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--></div></div><p>
위의 HTML Tag 와 같이 Profile 태그를 &lt;msgr:if&gt; 태그로 감쌉니다. 
<br />
그리고 이 태그에도 역시 cid 를 $user로 지정하고, condition 값을  “online”으로 설정합니다. 
<br />
말 그대로 “<u><strong>로그인 한 사용자가 온라인이라면 보여줘라</strong></u>” 라고 하는 이야기가 되겠지요.
</p><p>
이와 같이 수정 하신 후 다시 실행 시키시면 로그인 전에는 Sign In 버튼만, 로그인 이후에는 Profile 컨트롤만 보이게 됩니다. 
<br /><br />
이 Profile 컨트롤은 사용자의 Presence 정보를 변경하거나 로그 오프를 할 수 있는 기능 그리고 “오늘의 한마디” 를 변경해 줄 수 있는
기능을 제공합니다.  
<br />
Profile 컨트롤의 cid는 현재 로그인 한 사용자 $user 로 설정되어 있지만 이 값을 커뮤니티의 회원들의 CID로 바꿔 줄 수 있다면?
</p><p>
아래 그림과 같은 재미있는 기능들을 쉽게 구현 할 수 도 있습니다. 
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart5_FCF2%2fsocialwithControl_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="socialwithControl" border="0" alt="socialwithControl" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart5_FCF2/socialwithControl_thumb.png" width="511" height="245" /></a>  
<br />
위의 그림은 사진 공유 사이트에 메신저 웹 툴킷의 UI 컨트롤을 구현해 놓은 예제입니다. 댓글을 단 커뮤니티 회원들의 메신저 사진 이미지와 대화 명들이
보입니다. 사용자들의 메신저 사진들이 보이는 것이기 때문에 사용자가 자신의 메신저 사진을 변경하면 이에 따라 동적으로 변경된 사진과 대화명 등이 보이게
됩니다.  
<br /><br />
여기까지의 구현으로 일단 간단히 메신저 웹 툴킷의 컨트롤을 통해 웹 상에서 메신저 상에 로그인 하고, 로그인이 성공하면 나의 Profile 컨트롤이
보이는 기능까지 완성되었습니다. 
<br /><br />
자 이제는 로그인과 함께 메신저에서처럼 내가 등록한 친구들 중 현재 온라인인 친구들의 목록을 얻어내어 동적으로 리스트 하는 기능을 구현할 차례 입니다. 
<br /><br />
지금까지는 간단히 태그를 배치하는 것 만으로 쉽게(?) 기능을 구현했습니다만, 이번 기능들부터는 약간의 주의가 요구됩니다. 
<br /><br />
일단 아래와 같이 HTML 을 구성해 줍니다. 
</p><div id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">msgr:app</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="appTag"</span><span style="color: #ff0000">application-verifier-token</span><span style="color: #0000ff">="&lt;%=
ApplicationVerifier %&gt;"</span><span style="color: #ff0000">privacy-url</span><span style="color: #0000ff">="Privacy.html"</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span><span style="color: #ff0000">channel-url</span><span style="color: #0000ff">="Channel.html"</span><span style="color: #ff0000">token-url</span><span style="color: #0000ff">="RefreshMessengerToken.aspx"</span><span style="color: #ff0000">onauthenticated</span><span style="color: #0000ff">="OnAuthenticated"</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4"> 4:</span><span style="color: #ff0000">onsignedout</span><span style="color: #0000ff">="OnSignout"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5"> 5:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">msgr:app</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6"> 6:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="layout"</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="text-align:
center; font-family: Tahoma, 맑은 고딕"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7"> 7:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">table</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="border-width:
medium; width: 500px; border-style: solid;"</span><span style="color: #ff0000">align</span><span style="color: #0000ff">="center"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8"> 8:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #ff0000">align</span><span style="color: #0000ff">="center"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9"> 9:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10"> 10:</span><span style="color: #008000">&lt;!--
Show display picture --&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11"> 11:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">msgr:if</span><span style="color: #ff0000">cid</span><span style="color: #0000ff">="$user"</span><span style="color: #ff0000">condition</span><span style="color: #0000ff">="online"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12"> 12:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">msgr:profile</span><span style="color: #ff0000">cid</span><span style="color: #0000ff">="$user"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13"> 13:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">msgr:profile</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14"> 14:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">msgr:if</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15"> 15:</span><span style="color: #008000">&lt;!--
Show sign-in control --&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16"> 16:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">msgr:sign-in</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17"> 17:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">msgr:sign-in</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18"> 18:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19"> 19:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20"> 20:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tr</span><span style="color: #ff0000">align</span><span style="color: #0000ff">="left"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21"> 21:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum22"> 22:</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">div</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="list"</span><span style="color: #ff0000">style</span><span style="color: #0000ff">="font-size:
8pt; padding-left: 7px; height: 500px; overflow: auto"</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum23"> 23:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum24"> 24:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">td</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum25"> 25:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tr</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum26"> 26:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">table</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum27"> 27:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">div</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum28"> 28:</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span></pre><!--CRLF--></div></div><p>
기본적으로 우리가 앞서 구현한 Sign In 컨트롤과 Profile 컨트롤이 If 컨트롤과 함께 배치된 것은 변함이 없습니다. 좀 예쁘게 다듬기 위해서
컨트롤들을 Table 내부에 배치 시켜 두었습니다. 
<br /><br />
주의 깊게 보셔야 할 부분은 먼저 appTag 부분입니다. 
<br /><br />
이전의 appTag와는 달리 <u>onauthenticated</u> 와 <u>onsignedout</u> 이라고 하는 부분이 추가 되었습니다. 
<br />
appTag는 기본적으로 요구되는 application-verifier-token, privacy-url, channel-url, token-url
이외에 사용자가 인증을 받고, 로그인을 하는 과정상에서의 이벤트들을 처리할 수 있는 기능이 지원됩니다.[<a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.messenger.ui.tags.apptag_properties.aspx" target="_blank">기능
전부 보기</a>] 
<br /><br />
우리는 이 기능들 중 인증이 성공적으로 완료되었을 경우의 이벤트와 로그 오프(SignOut) 할 경우의 이벤트를 사용할 예정입니다.  
<br />
두 이벤트들에 대해 소스에서는 OnAuthenticated 와 OnSignout callback 함수들이 지정 되어 있는 것을 보실 수 있습니다. 
<br /><br />
그러면 이제 각 이벤트 콜백 함수들과 이와 함께 HTML 요소들을 동적으로 구성하기 위한 기능들을 구현할 스크립트 코딩을 완성해 봅니다. 
<br /><br />
HTML 부분과 마찬가지로 일단 스크립트 부분의 전체 소스를 아래와 같이 구성합니다. 
</p><div id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span> &lt;head
runat=<span style="color: #006080">"server"</span>&gt;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span> &lt;title&gt;&lt;/title&gt;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span> &lt;script
type=<span style="color: #006080">"text/javascript"</span> src=<span style="color: #006080">"http://www.wlmessenger.net/api/3.0/loader.js"</span>&gt;&lt;/script&gt;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4"> 4:</span> &lt;script
type=<span style="color: #006080">"text/javascript"</span> language=<span style="color: #006080">"javascript"</span>&gt;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5"> 5:</span><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Core.Loader.load([<span style="color: #006080">'messenger.ui'</span>, <span style="color: #006080">'messenger.ui.styles.core'</span>]);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6"> 6:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7"> 7:</span> onlineContacts
= []; <span style="color: #008000">//online contacts 들을 담을 배열</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8"> 8:</span> timerID
= <span style="color: #0000ff">null</span>;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9"> 9:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10"> 10:</span><span style="color: #008000">///
인증이 완료되면 호출 된다.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11"> 11:</span><span style="color: #008000">///
인증이 되면 User 객체를 받아서 로그인 한 사용자의 온라인 Contact들을 배열에 담을 수 있도록 collectionChanged 이벤트에 Subscription</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12"> 12:</span><span style="color: #0000ff">function</span> OnAuthenticated(sender,
e) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13"> 13:</span> _user
= <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Messenger.UI.Tags.TagsFactory.get_user();</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14"> 14:</span> _user.get_onlineContacts().add_collectionChanged(onOnlineContactsChanged);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15"> 15:</span><span style="color: #008000">///
collectionChanged 마다 Display를 변경하게 되면 너무나 빈번하게 호출이 되는 문제가 있어,</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16"> 16:</span><span style="color: #008000">///
특정 Interval을 명시적으로 정의하여 온라인 사용자들을 갱신하도록 한다.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17"> 17:</span><span style="color: #008000">///
이 예제에서는 5초마다 Refresh 한다.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18"> 18:</span> timerID
= setInterval(displayBuddies, 5000);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19"> 19:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20"> 20:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21"> 21:</span><span style="color: #0000ff">function</span> OnSignout(sender,
e) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum22"> 22:</span> clearInterval(timerID);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum23"> 23:</span> clearlist();</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum24"> 24:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum25"> 25:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum26"> 26:</span><span style="color: #008000">///
온라인 사용자들을 Display 한다.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum27"> 27:</span><span style="color: #0000ff">function</span> displayBuddies()
{</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum28"> 28:</span> clearlist();</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum29"> 29:</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">var</span> i
= 0; i &lt; onlineContacts.length; i++) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum30"> 30:</span><span style="color: #0000ff">if</span> (onlineContacts[i].length
!= undefined)</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum31"> 31:</span> addlist(onlineContacts[i][0].get_cid());</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum32"> 32:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum33"> 33:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum34"> 34:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum35"> 35:</span><span style="color: #008000">///온라인
사용자들에 대한 CollectionChanged 이벤트가 발생 시 호출됨</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum36"> 36:</span><span style="color: #008000">///onlineContacts
배열에 사용자 정보를 추가,삭제, 갱신함.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum37"> 37:</span><span style="color: #0000ff">function</span> onOnlineContactsChanged(sender,
e) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum38"> 38:</span><span style="color: #0000ff">switch</span> (e.get_action())
{</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum39"> 39:</span><span style="color: #008000">//추가 </span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum40"> 40:</span><span style="color: #0000ff">case</span><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Core.NotifyCollectionChangedAction.add:</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum41"> 41:</span> onlineContacts.splice(e.get_newStartingIndex(),
0, e.get_newItems());</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum42"> 42:</span><span style="color: #0000ff">break</span>;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum43"> 43:</span><span style="color: #008000">//삭제 </span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum44"> 44:</span><span style="color: #0000ff">case</span><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Core.NotifyCollectionChangedAction.remove:</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum45"> 45:</span> onlineContacts.splice(e.get_oldStartingIndex(),
e.get_oldItems().length);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum46"> 46:</span><span style="color: #0000ff">break</span>;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum47"> 47:</span><span style="color: #008000">//재갱신 </span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum48"> 48:</span><span style="color: #0000ff">case</span><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Core.NotifyCollectionChangedAction.reset:</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum49"> 49:</span> onlineContacts
= <span style="color: #0000ff">new</span> Array(sender.get_count());</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum50"> 50:</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">var</span> i
= 0; i &lt; sender.get_count(); i++) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum51"> 51:</span> onlineContacts[i]
= sender.get_item(i);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum52"> 52:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum53"> 53:</span><span style="color: #0000ff">break</span>;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum54"> 54:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum55"> 55:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum56"> 56:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum57"> 57:</span><span style="color: #008000">///
DIV tag 내의 Child 요소들을 삭제</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum58"> 58:</span><span style="color: #0000ff">function</span> clearlist()
{</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum59"> 59:</span><span style="color: #0000ff">var</span> node
= document.getElementById(<span style="color: #006080">"list"</span>);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum60"> 60:</span><span style="color: #0000ff">if</span> (!node)
{</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum61"> 61:</span><span style="color: #0000ff">return</span>;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum62"> 62:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum63"> 63:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum64"> 64:</span><span style="color: #0000ff">while</span> (node.hasChildNodes())
{</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum65"> 65:</span> node.removeChild(node.firstChild);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum66"> 66:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum67"> 67:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum68"> 68:</span>  </pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum69"> 69:</span><span style="color: #008000">///
Messenger Web Toolkit UI 요소를 동적으로 생성하여 추가한다</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum70"> 70:</span><span style="color: #0000ff">function</span> addlist(contactID)
{</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum71"> 71:</span><span style="color: #0000ff">if</span> (contactID
== <span style="color: #006080">''</span>) <span style="color: #0000ff">return</span>;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum72"> 72:</span><span style="color: #0000ff">var</span> tag
= <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Messenger.UI.Tags.TagsFactory.createTag(<span style="color: #006080">'display-name'</span>,
{ cid: contactID });</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum73"> 73:</span> document.getElementById(<span style="color: #006080">"list"</span>).appendChild(tag);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum74"> 74:</span> tag
= <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Messenger.UI.Tags.TagsFactory.createTag(<span style="color: #006080">'personal-message'</span>,
{ cid: contactID });</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum75"> 75:</span> document.getElementById(<span style="color: #006080">"list"</span>).appendChild(tag);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum76"> 76:</span> document.getElementById(<span style="color: #006080">"list"</span>).appendChild(document.createElement(<span style="color: #006080">'br'</span>));</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum77"> 77:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum78"> 78:</span> &lt;/script&gt;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum79"> 79:</span> &lt;/head&gt;</pre><!--CRLF--></div></div><p>
앞 서 작성한 HTML Tag 부분과 위의 Script 부분을 모두 완성시키면 앞서 동영상 클립에서 본 것과 같은 예제 어플리케이션이 구동되는 것을
확인 하실 수 있습니다.
</p><p>
그러면 이제 자바 스크립트 소스를 자세히 살펴보도록 합니다. 
<br />
가장 먼저 AppTag 중에서 OnAuthenticated 이벤트의 Callback 함수인 OnAuthenticated 의 내부를 살펴 봅니다. 
<br />
사용자가 로그인 버튼을 클릭하고 로그인을 정상적으로 마치면 가장 먼저 호출되는 콜백 함수가 바로 OnAuthenticated 입니다.
</p><div id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #008000">///
인증이 완료되면 호출 된다.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span><span style="color: #008000">///
인증이 되면 User 객체를 받아서 로그인 한 사용자의 온라인 Contact들을 배열에 담을 수 있도록 collectionChanged 이벤트에 Subscription</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span><span style="color: #0000ff">function</span> OnAuthenticated(sender,
e) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4"> 4:</span> _user
= <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Messenger.UI.Tags.TagsFactory.get_user();</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5"> 5:</span> _user.get_onlineContacts().add_collectionChanged(onOnlineContactsChanged);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6"> 6:</span><span style="color: #008000">///
collectionChanged 마다 Display를 변경하게 되면 너무나 빈번하게 호출이 되는 문제가 있어,</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7"> 7:</span><span style="color: #008000">///
특정 Interval을 명시적으로 정의하여 온라인 사용자들을 갱신하도록 한다.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8"> 8:</span><span style="color: #008000">///
이 예제에서는 5초마다 Refresh 한다.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9"> 9:</span> timerID
= setInterval(displayBuddies, 5000);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10"> 10:</span> }</pre><!--CRLF--></div></div><div>인증에 성공하면 파라메터로 넘겨지는 e 변수에는 사용자의 Identity 객체가 전달됩니다.(<a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.core.authenticationcompletedeventhandler.aspx" target="_blank">AuthenticatedCompletedEventHandler
참조</a>) 
<br />
이 Identity 객체를 사용하여도 사용자 객체를 얻어 낼 수 있으나, 더욱 쉬운 방식으로 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.messenger.ui.tags.tagsfactory.aspx" target="_blank">TagFactory</a> 객체의 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.messenger.ui.tags.tagsfactory.user.aspx" target="_blank">user</a> 프로퍼티를
통해 본 예제에서는 메신저 친구들 목록을 얻어내기 위해 필요한 로그인 한 당사자 객체인 User 객체를 얻어 내고 있습니다.(<a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.messenger.user.aspx" target="_blank">User
객체 참조</a>)  
<br /></div><div>이렇게 얻어낸 사용자 객체의 onlineContacts (온라인 사용자 리스트) 프로퍼티의 collectionChanged 이벤트에 onOnlineContactsChanged
callback 함수를 지정해 주고 있습니다. 
<br /><br />
하루에도 몇 번씩 메신저에 로그인/ 로그오프를 빈번하게 하기 때문에 당장 로그인 했을 당시의 사용자 목록이 계속 유지될 수는 없습니다. 
<br />
그렇기 때문에 메신저 친구들의 온라인, 오프라인 정보가 변경 될 때 마다 새롭게 보여줄 온라인 친구 목록을 재 구성해 주어야 합니다. 
<br /><br />
우리 소스의 appTag에 지정된 collectionChanged 이벤트의 콜백인 onOnlineContactsChanged 함수가 바로 온라인 친구
목록을 재구성 해 주는 기능을 담당하게 될 것 입니다. 
<br /><br />
그런데 난데없이 다음 코드에 있는 setInterval 선언은 뭘까요?
</div><div> 
</div><div>원래 정확하게 메신저 친구들의 온/오프라인 변경에 따른 온라인 친구목록 구성과 목록 디스플레이의 코드는(displayBuddies) 모두
collectionChanged 이벤트의 콜백함수인 onOnlineContactsChanged 내에서 수행 되야 합니다.
</div><div> 
</div><div>하지만 워낙 빈번하게 이벤트가 발생하기 때문에 목록을 디스플레이 하기 위한 코드를 실행하기에는 적합하지 않습니다. 그래서 콜백함수에서는 온라인
친구목록의 컬렉션인 배열요소(onlineContacts)에 대한 처리를 담당하는 기능을 수행하고 부득이 디스플레이 하는 로직은 setInterval
함수를 통해 매 5초마다 업데이트(디스플레이)를 해 주는 방식으로 구현되어 있습니다. 
<br /></div><div id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #008000">///온라인
사용자들에 대한 CollectionChanged 이벤트가 발생 시 호출됨</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span><span style="color: #008000">///onlineContacts
배열에 사용자 정보를 추가,삭제, 갱신함.</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span><span style="color: #0000ff">function</span> onOnlineContactsChanged(sender,
e) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4"> 4:</span><span style="color: #0000ff">switch</span> (e.get_action())
{</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5"> 5:</span><span style="color: #008000">//추가 </span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6"> 6:</span><span style="color: #0000ff">case</span><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Core.NotifyCollectionChangedAction.add:</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7"> 7:</span> onlineContacts.splice(e.get_newStartingIndex(),
0, e.get_newItems());</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8"> 8:</span><span style="color: #0000ff">break</span>;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9"> 9:</span><span style="color: #008000">//삭제 </span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum10"> 10:</span><span style="color: #0000ff">case</span><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Core.NotifyCollectionChangedAction.remove:</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum11"> 11:</span> onlineContacts.splice(e.get_oldStartingIndex(),
e.get_oldItems().length);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum12"> 12:</span><span style="color: #0000ff">break</span>;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum13"> 13:</span><span style="color: #008000">//재갱신 </span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum14"> 14:</span><span style="color: #0000ff">case</span><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Core.NotifyCollectionChangedAction.reset:</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum15"> 15:</span> onlineContacts
= <span style="color: #0000ff">new</span> Array(sender.get_count());</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum16"> 16:</span><span style="color: #0000ff">for</span> (<span style="color: #0000ff">var</span> i
= 0; i &lt; sender.get_count(); i++) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum17"> 17:</span> onlineContacts[i]
= sender.get_item(i);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum18"> 18:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum19"> 19:</span><span style="color: #0000ff">break</span>;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum20"> 20:</span> }</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum21"> 21:</span> }</pre><!--CRLF--></div></div><div>위의 코드는 온라인 친구 목록을 동적으로 재구성하는 로직이 구현된 collectionChanged 이벤트의 콜백인 onOnlineContactsChanged
함수입니다.
</div><div>코드의 설명처럼 온라인 되는 친구, 오프라인 되는 친구, 초기에 재구성되는 경우에 따라 onlineContacts 로 선언된 외부의 배열
변수를 조작하는 코드임을 쉽게 확인할 수 있습니다.
</div><div> 
</div><div>다음으로 흥미롭게 살펴볼 코드는 동적으로 사용자 목록에 따라 메신저 웹 툴킷 UI를 구성하여 추가해 주는 로직이 담겨있는 addList 함수입니다.
</div><div id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #008000">///
Messenger Web Toolkit UI 요소를 동적으로 생성하여 추가한다</span></pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span><span style="color: #0000ff">function</span> addlist(contactID)
{</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span><span style="color: #0000ff">if</span> (contactID
== <span style="color: #006080">''</span>) <span style="color: #0000ff">return</span>;</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4"> 4:</span><span style="color: #0000ff">var</span> tag
= <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Messenger.UI.Tags.TagsFactory.createTag(<span style="color: #006080">'display-name'</span>,
{ cid: contactID });</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5"> 5:</span> document.getElementById(<span style="color: #006080">"list"</span>).appendChild(tag);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum6"> 6:</span> tag
= <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Messenger.UI.Tags.TagsFactory.createTag(<span style="color: #006080">'personal-message'</span>,
{ cid: contactID });</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum7"> 7:</span> document.getElementById(<span style="color: #006080">"list"</span>).appendChild(tag);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum8"> 8:</span> document.getElementById(<span style="color: #006080">"list"</span>).appendChild(document.createElement(<span style="color: #006080">'br'</span>));</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum9"> 9:</span> }</pre><!--CRLF--></div></div><div>이 코드를 주위 깊게 살펴야 할 이유는 일반적인 HTML 태그와 달리 우리가 사용하고 있는 메신저 웹 툴킷의 UI 들은 XHTML 구성요소를
사용하고 있기 때문에 동적 생성을 위해서는 생성기(Factory)를 거쳐야만 가능하기 때문입니다. 
</div><div>이 때문에 생성기의 사용법을 주의 깊게 살펴 봐야 합니다. 메신저 웹 툴킷의 UI에서 사용되는 태그 생성기는 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.messenger.ui.tags.tagsfactory.aspx" target="_blank"><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Messenger.UI.Tags.TagsFactory</a> 입니다. 
<br /><br />
우리의 코드에서는 동적으로 &lt;msgr:display-name&gt; 태그와 &lt;msgr:personal-message&gt; 태그를 생성하고
있습니다. 또 흥미로운 것은 이 태그에서 사용하는 속성값들(attribute)을 지정하는 방식으로 JSON 데이터 표현 방식을 사용하고 있습니다.
</div><div><br />
마지막으로 로그 오프시에 발생하는 SignedOut 이벤트의 콜백 함수인 OnSignout 함수에서는 인증 성공 시에 설정했었던 타이머를 해제하고,
동적으로 추가된 사용자 목록 UI를 청소해 주는 기능을 가진 코드가 추가되어 있습니다. 
<br /></div><div id="codeSnippetWrapper"><div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1"> 1:</span><span style="color: #0000ff">function</span> OnSignout(sender,
e) {</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2"> 2:</span> clearInterval(timerID);</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3"> 3:</span> clearlist();</pre><!--CRLF--><pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4"> 4:</span> }</pre><!--CRLF--></div></div><div>간단한 자바스크립트 코드 몇 줄과 HTML 태그를 통하여 간단히 나의 온라인 친구들 목록을 구성하는 예제를 구성해 보았습니다. 
<br /><br />
메신저 웹 툴킷은 재미있는 컨트롤들과 이들을 쉽게 연결시켜 줄 수 있는 라이브러리들을 지원하기 때문에 아이디어에 따라서는 얼마든지 훌륭한 기능들을
가진 어플리케이션들을 구현해 낼 수 있습니다. 
<br /><br />
반드시 데스크탑에 메신저가 설치되어 있지 않은 환경이라도 친구와 대화를 나누거나 친구에게 메시지를 전달 할 수 있으며, 메신저라는 강력한 커뮤니케이션
수단을 통해 웹 사이트를 보다 Socal 하게, 보다 많은 트래픽이 넘쳐나는 사이트로 만들 수 있습니다.
</div><div> 
</div><div>Social 한 사이트에서 사용자의 트래픽을 유발시킬 수 있는 수단으로는 수동적인 Feed 보다는 적극적인 사용자와 사용자간의 메시지가 더
큰 힘을 발휘할 수 있습니다. 
<br /></div><div>참고로 능동적 메시지 전달이 가질 수 있는 이점을 생각하게 해 줄 수 있는 블로그 글이 있어 소개해 드립니다.(<strong><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fblogs.msdn.com%2fangus_logan%2farchive%2f2009%2f06%2f12%2fuser-acquisition-writing-on-a-notice-board-vs-sending-a-postcard.aspx" target="_blank">User
acquisition: writing on a notice board vs. sending a postcard</a></strong>)
</div><div>왜 우리가 이 Windows Live Web Messenger Toolkit 에 관심을 가져야 하는지에 대한 보다 현실적인 이유를 느끼게
되실 것이라 생각합니다.
</div><div> 
</div><div>간단히 소개 드리려 시작한 포스트가 다섯 번째에 와서야 일단락을 짓게 되는 것 같습니다. 
</div><div>그래도 아직 Javascript 라이브러리와 Presence/ IM Control 과 관련된 기능은 제대로 맛도 보여드리지 못했는데 말이죠.
</div><div> 
</div><div>일단 Windows Live Web Messenger Toolkit과 관련된 블로그 포스팅은 이것으로 마무리 짓겠습니다.
</div><div> 
</div><div>다음 번 글에서는 윈도우 라이브 서비스에 대한 글을 써 보려 합니다.
</div><div>아직도 윈도우 라이브가 마치 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a> 사의
전유물인양, <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>의
플랫폼만을 위한 배타적인 서비스로 알고 계신 분들이 많은 듯 싶어 이러한 오해를 불식시키기 위해 윈도우 라이브 서비스 전반적인 소개와 앞으로의 방향에
대해 정리해 보도록 하겠습니다. 
<br /><br /></div><img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3" /></body>
      <title>Windows Live Messenger Web Toolkit – Part 5</title>
      <guid isPermaLink="false">http://www.mhvb.net/funnyfox/PermaLink,guid,b5aa7ce3-fc1e-41e9-b120-69101f49f5b3.aspx</guid>
      <link>http://feedproxy.google.com/~r/Dongbum/~3/pg2fxpsRleQ/Windows+Live+Messenger+Web+Toolkit+Part+5.aspx</link>
      <pubDate>Tue, 16 Jun 2009 16:33:13 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;&lt;em&gt;윈도우 라이브 메신저 웹 툴킷 – 라이브 메신저의 모든 것을 웹에서&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
이번 글에서는 간단한 예제를 만들어 보면서 라이브 메신저 툴킷의 웹 컨트롤들을 자세히 살펴봅니다.
&lt;/p&gt;
&lt;p&gt;
앞서 두 번째 포스팅(Part2)에서 메신저 UI 컨트롤 각각에 대해 소개해 드렸습니다만, 실제 구현에 대해서는 이번 글을 통해 알아 보도록 합니다. 
&lt;br /&gt;
&lt;br /&gt;
이 글을 통한 구현에 앞서 여러 컨트롤들을 동적으로 조작해 보면서 익힐 수 있는 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fmessenger.mslivelabs.com%2f" target="_blank"&gt;Messenger
Interactive Toolkit&lt;/a&gt;을 미리 살펴 두시는 것도 도움이 될 것 입니다. 
&lt;br /&gt;
(링크를 따라 사이트에 가셔서 learn 을 클릭하시면 각 컨트롤들의 기능들에 대해 직접 값들을 변경해 가면서 쉽게 익힐 수 있는 페이지를 찾을 수
있습니다.) 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart5_FCF2%2flearn_sdk_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="learn_sdk" border="0" alt="learn_sdk" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart5_FCF2/learn_sdk_thumb.png" width="390" height="100" /&gt;&lt;/a&gt; 
&lt;br /&gt;
[그림처럼 learn 을 클릭!]
&lt;/p&gt;
&lt;p&gt;
이 글을 통해 구현해 볼 것은 사용자가 메신저에 로그인을 해서 현재 온라인 상태의 메신저 친구들을 나열하고, 이 친구들을 클릭하면 Live home
Profile 페이지로 이동하는 기능을 가진 페이지 입니다. 
&lt;/p&gt;
&lt;p&gt;
아래의 동영상에서 보시는 기능을 구현 합니다.
&lt;/p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:cff5ba8f-f453-4289-8cfd-3b4156e3888b" class="wlWriterEditableSmartContent"&gt;
&lt;div id="06b456fb-13a8-4efd-afb5-1b321b0c4724" style="margin: 0px; padding: 0px; display: inline;"&gt;
&lt;div&gt;&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.youtube.com%2fwatch%3fv%3diaghMxFRGVY" target="_new"&gt;&lt;img src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart5_FCF2/video20a6877d803d.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('06b456fb-13a8-4efd-afb5-1b321b0c4724'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/iaghMxFRGVY&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/iaghMxFRGVY&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
이제 아래의 순서에 따라 차례로 구현을 시작해 봅니다.
&lt;/p&gt;
&lt;p&gt;
&lt;u&gt;Step 1. 기본 설정 
&lt;br /&gt;
&lt;/u&gt;지난 테스트에서 사용했던 예제 프로젝트를 기준으로 진행합니다. 
&lt;br /&gt;
기본적으로 필요한 파일들을 꼽아 보자면, 
&lt;br /&gt;
&lt;br /&gt;
&amp;gt; &lt;strong&gt;Channel.html&lt;/strong&gt; 
&lt;br /&gt;
&amp;gt; &lt;strong&gt;Privacy.html&lt;/strong&gt; 
&lt;br /&gt;
&amp;gt; &lt;strong&gt;RefreshMessengerToken.aspx 
&lt;br /&gt;
&lt;/strong&gt;&amp;gt; &lt;strong&gt;Web.config&lt;/strong&gt; 
&lt;/p&gt;
&lt;p&gt;
다음과 같은 파일들이 필요합니다. 각각의 기능들이 뭐냐고 물어보시는 분은 없겠죠? [ 있어요? =&amp;gt; &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2f2009%2f06%2f09%2fWindows%2bLive%2bMessenger%2bWeb%2bToolkit%2bPart3.aspx" target="_blank"&gt;클릭&lt;/a&gt; ] 
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Step 2. AppVarifier를 생성 위한 페이지 설정&lt;/u&gt; 
&lt;br /&gt;
프로젝트에 새로운 웹 폼을 추가해 주시고 페이지 이름을 MyOnlineBuddies.aspx 로 해 줍니다. 
&lt;br /&gt;
&lt;br /&gt;
그리고 페이지의 vb 혹은 c# 파일에 다음과 같이 코드를 추가합니다. 이 글에서 .net 을 사용한다고 해서 여러분들 역시 그럴 필요는 없습니다. 
&lt;br /&gt;
앞서 소개해 드린 것처럼 Java/Ruby/Phython/Pearl/php 어떤 언어든 상관없이 구현이 가능합니다.
&lt;/p&gt;
[VB.net 코드] 
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 66.8%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Imports&lt;/span&gt; WindowsLive&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; Partial &lt;span style="color: #0000ff"&gt;Class&lt;/span&gt; MyOnlineBuddies&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Inherits&lt;/span&gt; System.Web.UI.Page&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Private&lt;/span&gt; wll &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; WindowsLiveLogin
= &lt;span style="color: #0000ff"&gt;New&lt;/span&gt; WindowsLiveLogin(&lt;span style="color: #0000ff"&gt;True&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; &lt;span style="color: #008000"&gt;'''
&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt; 8:&lt;/span&gt; &lt;span style="color: #008000"&gt;'''
Gets an application verifier token.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt; 9:&lt;/span&gt; &lt;span style="color: #008000"&gt;'''
&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt; 10:&lt;/span&gt; &lt;span style="color: #008000"&gt;'''
&amp;lt;returns&amp;gt;The application verifier token&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt; 11:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;ReadOnly&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Property&lt;/span&gt; ApplicationVerifier() &lt;span style="color: #0000ff"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff"&gt;String&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt; 12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt; 13:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Return&lt;/span&gt; wll.GetAppVerifier()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt; 14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Get&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt; 15:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff"&gt;Property&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt; 16:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;End&lt;/span&gt; Class&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
[C# 코드] 
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 66.78%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; height: 210px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Web;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Web.Configuration;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; WindowsLive;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
Class for handling Default.aspx code behind.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt; 8:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt; 9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MyOnlineBuddies:
System.Web.UI.Page&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt; 10:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt; 11:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; WindowsLiveLogin
wll = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; WindowsLiveLogin(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;); &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt; 12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt; 13:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt; 14:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
Gets an application verifier.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt; 15:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt; 16:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ApplicationVerifier&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt; 17:&lt;/span&gt; {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt; 18:&lt;/span&gt; get&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt; 19:&lt;/span&gt; { &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt; 20:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; wll.GetAppVerifier(); &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt; 21:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt; 22:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt; 23:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;u&gt;Step 3. HTML 페이지 기본 설정&lt;/u&gt;
&lt;/p&gt;
&lt;p&gt;
메신저 툴킷의 HTML UI 컨트롤은 XHTML 형식으로 구현되어 있다고 말씀 드린 것 기억하시죠? 
&lt;br /&gt;
이 컨트롤들을 사용하기 위해 우리는 HTML 정의부에 네임스페이스를 추가해 주어야 합니다. 
&lt;br /&gt;
&lt;br /&gt;
1. 다음과 같이 HTML 선언부를 변경해 줍니다. (이건 다 이미 우리가 살펴 본 내용들이죠)
&lt;/p&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 66.05%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; height: 38px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns:msgr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://messenger.live.com/2009/ui-tags&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
2. 이어서 UI 컨트롤들이 사용하게 될 자바스크립트 라이브러리들을 로딩합니다.
&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 70%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &amp;lt;head
runat=&lt;span style="color: #006080"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &amp;lt;script
type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span style="color: #006080"&gt;&amp;quot;http://www.wlmessenger.net/api/3.0/loader.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; &amp;lt;script
type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; language=&lt;span style="color: #006080"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Core.Loader.load([&lt;span style="color: #006080"&gt;'messenger.ui'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'messenger.ui.styles.core'&lt;/span&gt;]);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt; &amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; &amp;lt;/head&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
3. 그리고 마지막으로 메신저 AppTag를 추가해 줍니다.
&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 70%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:app&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;appTag&amp;quot;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &lt;span style="color: #ff0000"&gt;application-verifier-token&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;lt;%=
ApplicationVerifier %&amp;gt;&amp;quot;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; &lt;span style="color: #ff0000"&gt;privacy-url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Privacy.html&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; &lt;span style="color: #ff0000"&gt;channel-url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Channel.html&amp;quot;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt; &lt;span style="color: #ff0000"&gt;token-url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;RefreshMessengerToken.aspx&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:app&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt; 8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
여기까지는 제 앞선 글을 순서대로 읽어 주신 분들이라면 쉽게 이해하실 수 있는 부분입니다. 
&lt;br /&gt;
여기에다가 &amp;lt;msgr:bar&amp;gt;&amp;lt;/msgr:bar&amp;gt; 태그만 붙어주면 페이지 하단에 웹 메신저를 호스팅 할 수 있었습니다. 
&lt;br /&gt;
&lt;br /&gt;
이번에는 이 웹바 컨트롤 대신 로그인 기능, 온라인 친구목록 가져오기 기능등을 직접 구현해 보고자 합니다. 
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Step 4. 컨트롤 추가하기&lt;/u&gt; 
&lt;br /&gt;
메신저 AppTag 뒤에 다음과 같이 Sign In 컨트롤을 추가해 줍니다.
&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 70%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:sign-in&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:sign-in&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
여기까지 진행 한 상태에서 한번 페이지를 실행해 봅니다. 
&lt;br /&gt;
&lt;br /&gt;
Sign In 버튼이 보이고, 클릭 하여 로그인을 진행하면 갑자기 Sign In 버튼이 사라져 버린 것을 확인 하셨나요? 
&lt;br /&gt;
&lt;br /&gt;
Sign In 버튼은 사용자가 메신저에 로그인 되어 있지 않은 경우 로그인을 하도록 유도하는 버튼입니다. 
&lt;br /&gt;
내부적으로는 앞서 살펴 보았던 msgr-consent-token 과 msgr-delegation-token 유무를 체크하여 이 쿠키들이 없는 경우에만
로그인 버튼을 보이는 로직이 구현되어 있을 것 이죠 
&lt;br /&gt;
&lt;br /&gt;
로그인 성공과 함께 로그인 버튼이 보이지 않는 것은 당연합니다. 
&lt;br /&gt;
&lt;br /&gt;
자, 이제 브라우저를 닫고 이어서 Profile 컨트롤을 추가해 봅니다.&amp;#160; cid 값에 $user를 지정해 주었습니다. 
&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 69.64%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; height: 30px; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:profile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;cid&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;$user&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:profile&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
cid 값에 특정 사용자의 cid를 지정해 주면 해당 사용자의 대화명과 오늘의 글이 그리고 메신저 이미지가 보이며, Profile 정보 페이지로 이동할
수 있는 링크가 보입니다. 여기서 $user 란 현재 로그인 한 사용자를 뜻 합니다. 
&lt;br /&gt;
즉, 나의 Profile을 보여주겠다는 뜻이죠.
&lt;/p&gt;
&lt;div&gt;컨트롤을 페이지에 추가하셨다면 다시 페이지를 실행해 봅니다. 
&lt;br /&gt;
&lt;br /&gt;
처음에는 No name(Offline) 이라고 쓰여진 화면이 Sign In 버튼 아래로 보이다가, 로그인을 하면 Sign In 버튼은 사라지고 여러분의
메신저 대화명과 이미지가 보이는 것 확인 하셨나요? 
&lt;br /&gt;
&lt;br /&gt;
Sign In 컨트롤의 경우에는 로그인 전에 보이다가 로그인과 함께 사라지는 것처럼 Profile 컨트롤의 경우에는 사용자의 로그인 이후에 나타나게
하는 것이 좋을 것 입니다. 좀 썰렁해 보이는 것이 차라리 보이지 않는 편이 나을 테니까요.&amp;#160; 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart5_FCF2%2fprofile_before_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="profile_before" border="0" alt="profile_before" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart5_FCF2/profile_before_thumb.png" width="344" height="122" /&gt;&lt;/a&gt; 
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
[썰렁한 로그인 전에 보이는 Profile 컨트롤 – 영 어색하다. 차라리 로그인 이전에는 보이지 않는 편이 낫다.]
&lt;/p&gt;
&lt;p&gt;
로그인 전에는 Sign In 버튼만 보이다가, 로그인과 동시에 Profile 컨트롤이 보이게 하면 깔끔하게 떨어지는 UI가 나오게 될 껍니다. 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart5_FCF2%2flogin_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="login" border="0" alt="login" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart5_FCF2/login_thumb.png" width="410" height="188" /&gt;&lt;/a&gt;&amp;#160; 
&lt;br /&gt;
[로그인 전에는 Sign In 버튼만 보이다가 로그인과 함께 Profile 컨트롤이 보임]
&lt;/p&gt;
&lt;p&gt;
그래서 고안된 컨트롤이 바로 “&lt;strong&gt;If 컨트롤&lt;/strong&gt;” 입니다. 
&lt;br /&gt;
바로 적용 들어갑니다. 
&lt;br /&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 70%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:sign-in&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:sign-in&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:if&lt;/span&gt; &lt;span style="color: #ff0000"&gt;cid&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;$user&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;condition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;online&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:profile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;cid&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;$user&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:profile&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:if&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
위의 HTML Tag 와 같이 Profile 태그를 &amp;lt;msgr:if&amp;gt; 태그로 감쌉니다. 
&lt;br /&gt;
그리고 이 태그에도 역시 cid 를 $user로 지정하고, condition 값을&amp;#160; “online”으로 설정합니다. 
&lt;br /&gt;
말 그대로 “&lt;u&gt;&lt;strong&gt;로그인 한 사용자가 온라인이라면 보여줘라&lt;/strong&gt;&lt;/u&gt;” 라고 하는 이야기가 되겠지요.
&lt;/p&gt;
&lt;p&gt;
이와 같이 수정 하신 후 다시 실행 시키시면 로그인 전에는 Sign In 버튼만, 로그인 이후에는 Profile 컨트롤만 보이게 됩니다. 
&lt;br /&gt;
&lt;br /&gt;
이 Profile 컨트롤은 사용자의 Presence 정보를 변경하거나 로그 오프를 할 수 있는 기능 그리고 “오늘의 한마디” 를 변경해 줄 수 있는
기능을 제공합니다.&amp;#160; 
&lt;br /&gt;
Profile 컨트롤의 cid는 현재 로그인 한 사용자 $user 로 설정되어 있지만 이 값을 커뮤니티의 회원들의 CID로 바꿔 줄 수 있다면?
&lt;/p&gt;
&lt;p&gt;
아래 그림과 같은 재미있는 기능들을 쉽게 구현 할 수 도 있습니다. 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart5_FCF2%2fsocialwithControl_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="socialwithControl" border="0" alt="socialwithControl" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart5_FCF2/socialwithControl_thumb.png" width="511" height="245" /&gt;&lt;/a&gt;&amp;#160; 
&lt;br /&gt;
위의 그림은 사진 공유 사이트에 메신저 웹 툴킷의 UI 컨트롤을 구현해 놓은 예제입니다. 댓글을 단 커뮤니티 회원들의 메신저 사진 이미지와 대화 명들이
보입니다. 사용자들의 메신저 사진들이 보이는 것이기 때문에 사용자가 자신의 메신저 사진을 변경하면 이에 따라 동적으로 변경된 사진과 대화명 등이 보이게
됩니다.&amp;#160; 
&lt;br /&gt;
&lt;br /&gt;
여기까지의 구현으로 일단 간단히 메신저 웹 툴킷의 컨트롤을 통해 웹 상에서 메신저 상에 로그인 하고, 로그인이 성공하면 나의 Profile 컨트롤이
보이는 기능까지 완성되었습니다. 
&lt;br /&gt;
&lt;br /&gt;
자 이제는 로그인과 함께 메신저에서처럼 내가 등록한 친구들 중 현재 온라인인 친구들의 목록을 얻어내어 동적으로 리스트 하는 기능을 구현할 차례 입니다. 
&lt;br /&gt;
&lt;br /&gt;
지금까지는 간단히 태그를 배치하는 것 만으로 쉽게(?) 기능을 구현했습니다만, 이번 기능들부터는 약간의 주의가 요구됩니다. 
&lt;br /&gt;
&lt;br /&gt;
일단 아래와 같이 HTML 을 구성해 줍니다. 
&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:app&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;appTag&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;application-verifier-token&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;lt;%=
ApplicationVerifier %&amp;gt;&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;privacy-url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Privacy.html&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &lt;span style="color: #ff0000"&gt;channel-url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Channel.html&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;token-url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;RefreshMessengerToken.aspx&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onauthenticated&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;OnAuthenticated&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onsignedout&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;OnSignout&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:app&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;layout&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;text-align:
center; font-family: Tahoma, 맑은 고딕&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;border-width:
medium; width: 500px; border-style: solid;&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;align&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;center&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt; 8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt; &lt;span style="color: #ff0000"&gt;align&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;center&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt; 9:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt; 10:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;!--
Show display picture --&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt; 11:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:if&lt;/span&gt; &lt;span style="color: #ff0000"&gt;cid&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;$user&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;condition&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;online&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt; 12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:profile&lt;/span&gt; &lt;span style="color: #ff0000"&gt;cid&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;$user&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt; 13:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:profile&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt; 14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:if&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt; 15:&lt;/span&gt; &lt;span style="color: #008000"&gt;&amp;lt;!--
Show sign-in control --&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt; 16:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:sign-in&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt; 17:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:sign-in&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt; 18:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt; 19:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt; 20:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt; &lt;span style="color: #ff0000"&gt;align&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;left&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt; 21:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt; 22:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;list&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;style&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;font-size:
8pt; padding-left: 7px; height: 500px; overflow: auto&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt; 23:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt; 24:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;td&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt; 25:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;tr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt; 26:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;table&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt; 27:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum28"&gt; 28:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
기본적으로 우리가 앞서 구현한 Sign In 컨트롤과 Profile 컨트롤이 If 컨트롤과 함께 배치된 것은 변함이 없습니다. 좀 예쁘게 다듬기 위해서
컨트롤들을 Table 내부에 배치 시켜 두었습니다. 
&lt;br /&gt;
&lt;br /&gt;
주의 깊게 보셔야 할 부분은 먼저 appTag 부분입니다. 
&lt;br /&gt;
&lt;br /&gt;
이전의 appTag와는 달리 &lt;u&gt;onauthenticated&lt;/u&gt; 와 &lt;u&gt;onsignedout&lt;/u&gt; 이라고 하는 부분이 추가 되었습니다. 
&lt;br /&gt;
appTag는 기본적으로 요구되는 application-verifier-token, privacy-url, channel-url, token-url
이외에 사용자가 인증을 받고, 로그인을 하는 과정상에서의 이벤트들을 처리할 수 있는 기능이 지원됩니다.[&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.messenger.ui.tags.apptag_properties.aspx" target="_blank"&gt;기능
전부 보기&lt;/a&gt;] 
&lt;br /&gt;
&lt;br /&gt;
우리는 이 기능들 중 인증이 성공적으로 완료되었을 경우의 이벤트와 로그 오프(SignOut) 할 경우의 이벤트를 사용할 예정입니다.&amp;#160; 
&lt;br /&gt;
두 이벤트들에 대해 소스에서는 OnAuthenticated 와 OnSignout callback 함수들이 지정 되어 있는 것을 보실 수 있습니다. 
&lt;br /&gt;
&lt;br /&gt;
그러면 이제 각 이벤트 콜백 함수들과 이와 함께 HTML 요소들을 동적으로 구성하기 위한 기능들을 구현할 스크립트 코딩을 완성해 봅니다. 
&lt;br /&gt;
&lt;br /&gt;
HTML 부분과 마찬가지로 일단 스크립트 부분의 전체 소스를 아래와 같이 구성합니다. 
&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &amp;lt;head
runat=&lt;span style="color: #006080"&gt;&amp;quot;server&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &amp;lt;script
type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span style="color: #006080"&gt;&amp;quot;http://www.wlmessenger.net/api/3.0/loader.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; &amp;lt;script
type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; language=&lt;span style="color: #006080"&gt;&amp;quot;javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Core.Loader.load([&lt;span style="color: #006080"&gt;'messenger.ui'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'messenger.ui.styles.core'&lt;/span&gt;]);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; onlineContacts
= []; &lt;span style="color: #008000"&gt;//online contacts 들을 담을 배열&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt; 8:&lt;/span&gt; timerID
= &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt; 9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt; 10:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
인증이 완료되면 호출 된다.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt; 11:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
인증이 되면 User 객체를 받아서 로그인 한 사용자의 온라인 Contact들을 배열에 담을 수 있도록 collectionChanged 이벤트에 Subscription&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt; 12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; OnAuthenticated(sender,
e) {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt; 13:&lt;/span&gt; _user
= &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Messenger.UI.Tags.TagsFactory.get_user();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt; 14:&lt;/span&gt; _user.get_onlineContacts().add_collectionChanged(onOnlineContactsChanged);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt; 15:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
collectionChanged 마다 Display를 변경하게 되면 너무나 빈번하게 호출이 되는 문제가 있어,&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt; 16:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
특정 Interval을 명시적으로 정의하여 온라인 사용자들을 갱신하도록 한다.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt; 17:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
이 예제에서는 5초마다 Refresh 한다.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt; 18:&lt;/span&gt; timerID
= setInterval(displayBuddies, 5000);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt; 19:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt; 20:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt; 21:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; OnSignout(sender,
e) {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum22"&gt; 22:&lt;/span&gt; clearInterval(timerID);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum23"&gt; 23:&lt;/span&gt; clearlist();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum24"&gt; 24:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum25"&gt; 25:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum26"&gt; 26:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
온라인 사용자들을 Display 한다.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum27"&gt; 27:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; displayBuddies()
{&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum28"&gt; 28:&lt;/span&gt; clearlist();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum29"&gt; 29:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; i
= 0; i &amp;lt; onlineContacts.length; i++) {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum30"&gt; 30:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (onlineContacts[i].length
!= undefined)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum31"&gt; 31:&lt;/span&gt; addlist(onlineContacts[i][0].get_cid());&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum32"&gt; 32:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum33"&gt; 33:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum34"&gt; 34:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum35"&gt; 35:&lt;/span&gt; &lt;span style="color: #008000"&gt;///온라인
사용자들에 대한 CollectionChanged 이벤트가 발생 시 호출됨&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum36"&gt; 36:&lt;/span&gt; &lt;span style="color: #008000"&gt;///onlineContacts
배열에 사용자 정보를 추가,삭제, 갱신함.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum37"&gt; 37:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onOnlineContactsChanged(sender,
e) {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum38"&gt; 38:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;switch&lt;/span&gt; (e.get_action())
{&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum39"&gt; 39:&lt;/span&gt; &lt;span style="color: #008000"&gt;//추가 &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum40"&gt; 40:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Core.NotifyCollectionChangedAction.add:&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum41"&gt; 41:&lt;/span&gt; onlineContacts.splice(e.get_newStartingIndex(),
0, e.get_newItems());&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum42"&gt; 42:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum43"&gt; 43:&lt;/span&gt; &lt;span style="color: #008000"&gt;//삭제 &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum44"&gt; 44:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Core.NotifyCollectionChangedAction.remove:&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum45"&gt; 45:&lt;/span&gt; onlineContacts.splice(e.get_oldStartingIndex(),
e.get_oldItems().length);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum46"&gt; 46:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum47"&gt; 47:&lt;/span&gt; &lt;span style="color: #008000"&gt;//재갱신 &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum48"&gt; 48:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Core.NotifyCollectionChangedAction.reset:&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum49"&gt; 49:&lt;/span&gt; onlineContacts
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Array(sender.get_count());&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum50"&gt; 50:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; i
= 0; i &amp;lt; sender.get_count(); i++) {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum51"&gt; 51:&lt;/span&gt; onlineContacts[i]
= sender.get_item(i);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum52"&gt; 52:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum53"&gt; 53:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum54"&gt; 54:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum55"&gt; 55:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum56"&gt; 56:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum57"&gt; 57:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
DIV tag 내의 Child 요소들을 삭제&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum58"&gt; 58:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; clearlist()
{&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum59"&gt; 59:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; node
= document.getElementById(&lt;span style="color: #006080"&gt;&amp;quot;list&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum60"&gt; 60:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!node)
{&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum61"&gt; 61:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum62"&gt; 62:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum63"&gt; 63:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum64"&gt; 64:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (node.hasChildNodes())
{&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum65"&gt; 65:&lt;/span&gt; node.removeChild(node.firstChild);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum66"&gt; 66:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum67"&gt; 67:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum68"&gt; 68:&lt;/span&gt;&amp;#160; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum69"&gt; 69:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
Messenger Web Toolkit UI 요소를 동적으로 생성하여 추가한다&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum70"&gt; 70:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; addlist(contactID)
{&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum71"&gt; 71:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (contactID
== &lt;span style="color: #006080"&gt;''&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum72"&gt; 72:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; tag
= &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Messenger.UI.Tags.TagsFactory.createTag(&lt;span style="color: #006080"&gt;'display-name'&lt;/span&gt;,
{ cid: contactID });&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum73"&gt; 73:&lt;/span&gt; document.getElementById(&lt;span style="color: #006080"&gt;&amp;quot;list&amp;quot;&lt;/span&gt;).appendChild(tag);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum74"&gt; 74:&lt;/span&gt; tag
= &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Messenger.UI.Tags.TagsFactory.createTag(&lt;span style="color: #006080"&gt;'personal-message'&lt;/span&gt;,
{ cid: contactID });&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum75"&gt; 75:&lt;/span&gt; document.getElementById(&lt;span style="color: #006080"&gt;&amp;quot;list&amp;quot;&lt;/span&gt;).appendChild(tag);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum76"&gt; 76:&lt;/span&gt; document.getElementById(&lt;span style="color: #006080"&gt;&amp;quot;list&amp;quot;&lt;/span&gt;).appendChild(document.createElement(&lt;span style="color: #006080"&gt;'br'&lt;/span&gt;));&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum77"&gt; 77:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum78"&gt; 78:&lt;/span&gt; &amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum79"&gt; 79:&lt;/span&gt; &amp;lt;/head&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
앞 서 작성한 HTML Tag 부분과 위의 Script 부분을 모두 완성시키면 앞서 동영상 클립에서 본 것과 같은 예제 어플리케이션이 구동되는 것을
확인 하실 수 있습니다.
&lt;/p&gt;
&lt;p&gt;
그러면 이제 자바 스크립트 소스를 자세히 살펴보도록 합니다. 
&lt;br /&gt;
가장 먼저 AppTag 중에서 OnAuthenticated 이벤트의 Callback 함수인 OnAuthenticated 의 내부를 살펴 봅니다. 
&lt;br /&gt;
사용자가 로그인 버튼을 클릭하고 로그인을 정상적으로 마치면 가장 먼저 호출되는 콜백 함수가 바로 OnAuthenticated 입니다.
&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
인증이 완료되면 호출 된다.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
인증이 되면 User 객체를 받아서 로그인 한 사용자의 온라인 Contact들을 배열에 담을 수 있도록 collectionChanged 이벤트에 Subscription&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; OnAuthenticated(sender,
e) {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; _user
= &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Messenger.UI.Tags.TagsFactory.get_user();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; _user.get_onlineContacts().add_collectionChanged(onOnlineContactsChanged);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
collectionChanged 마다 Display를 변경하게 되면 너무나 빈번하게 호출이 되는 문제가 있어,&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
특정 Interval을 명시적으로 정의하여 온라인 사용자들을 갱신하도록 한다.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt; 8:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
이 예제에서는 5초마다 Refresh 한다.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt; 9:&lt;/span&gt; timerID
= setInterval(displayBuddies, 5000);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt; 10:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;인증에 성공하면 파라메터로 넘겨지는 e 변수에는 사용자의 Identity 객체가 전달됩니다.(&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.core.authenticationcompletedeventhandler.aspx" target="_blank"&gt;AuthenticatedCompletedEventHandler
참조&lt;/a&gt;) 
&lt;br /&gt;
이 Identity 객체를 사용하여도 사용자 객체를 얻어 낼 수 있으나, 더욱 쉬운 방식으로 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.messenger.ui.tags.tagsfactory.aspx" target="_blank"&gt;TagFactory&lt;/a&gt; 객체의 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.messenger.ui.tags.tagsfactory.user.aspx" target="_blank"&gt;user&lt;/a&gt; 프로퍼티를
통해 본 예제에서는 메신저 친구들 목록을 얻어내기 위해 필요한 로그인 한 당사자 객체인 User 객체를 얻어 내고 있습니다.(&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.messenger.user.aspx" target="_blank"&gt;User
객체 참조&lt;/a&gt;)&amp;#160; 
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;이렇게 얻어낸 사용자 객체의 onlineContacts (온라인 사용자 리스트) 프로퍼티의 collectionChanged 이벤트에 onOnlineContactsChanged
callback 함수를 지정해 주고 있습니다. 
&lt;br /&gt;
&lt;br /&gt;
하루에도 몇 번씩 메신저에 로그인/ 로그오프를 빈번하게 하기 때문에 당장 로그인 했을 당시의 사용자 목록이 계속 유지될 수는 없습니다. 
&lt;br /&gt;
그렇기 때문에 메신저 친구들의 온라인, 오프라인 정보가 변경 될 때 마다 새롭게 보여줄 온라인 친구 목록을 재 구성해 주어야 합니다. 
&lt;br /&gt;
&lt;br /&gt;
우리 소스의 appTag에 지정된 collectionChanged 이벤트의 콜백인 onOnlineContactsChanged 함수가 바로 온라인 친구
목록을 재구성 해 주는 기능을 담당하게 될 것 입니다. 
&lt;br /&gt;
&lt;br /&gt;
그런데 난데없이 다음 코드에 있는 setInterval 선언은 뭘까요?
&lt;/div&gt;
&lt;div&gt;&amp;#160;
&lt;/div&gt;
&lt;div&gt;원래 정확하게 메신저 친구들의 온/오프라인 변경에 따른 온라인 친구목록 구성과 목록 디스플레이의 코드는(displayBuddies) 모두
collectionChanged 이벤트의 콜백함수인 onOnlineContactsChanged 내에서 수행 되야 합니다.
&lt;/div&gt;
&lt;div&gt;&amp;#160;
&lt;/div&gt;
&lt;div&gt;하지만 워낙 빈번하게 이벤트가 발생하기 때문에 목록을 디스플레이 하기 위한 코드를 실행하기에는 적합하지 않습니다. 그래서 콜백함수에서는 온라인
친구목록의 컬렉션인 배열요소(onlineContacts)에 대한 처리를 담당하는 기능을 수행하고 부득이 디스플레이 하는 로직은 setInterval
함수를 통해 매 5초마다 업데이트(디스플레이)를 해 주는 방식으로 구현되어 있습니다. 
&lt;br /&gt;
&lt;/div&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;///온라인
사용자들에 대한 CollectionChanged 이벤트가 발생 시 호출됨&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; &lt;span style="color: #008000"&gt;///onlineContacts
배열에 사용자 정보를 추가,삭제, 갱신함.&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; onOnlineContactsChanged(sender,
e) {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;switch&lt;/span&gt; (e.get_action())
{&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; &lt;span style="color: #008000"&gt;//추가 &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Core.NotifyCollectionChangedAction.add:&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; onlineContacts.splice(e.get_newStartingIndex(),
0, e.get_newItems());&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt; 8:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt; 9:&lt;/span&gt; &lt;span style="color: #008000"&gt;//삭제 &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum10"&gt; 10:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Core.NotifyCollectionChangedAction.remove:&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum11"&gt; 11:&lt;/span&gt; onlineContacts.splice(e.get_oldStartingIndex(),
e.get_oldItems().length);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum12"&gt; 12:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum13"&gt; 13:&lt;/span&gt; &lt;span style="color: #008000"&gt;//재갱신 &lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum14"&gt; 14:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;case&lt;/span&gt; &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Core.NotifyCollectionChangedAction.reset:&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum15"&gt; 15:&lt;/span&gt; onlineContacts
= &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Array(sender.get_count());&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum16"&gt; 16:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; i
= 0; i &amp;lt; sender.get_count(); i++) {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum17"&gt; 17:&lt;/span&gt; onlineContacts[i]
= sender.get_item(i);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum18"&gt; 18:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum19"&gt; 19:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum20"&gt; 20:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum21"&gt; 21:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;위의 코드는 온라인 친구 목록을 동적으로 재구성하는 로직이 구현된 collectionChanged 이벤트의 콜백인 onOnlineContactsChanged
함수입니다.
&lt;/div&gt;
&lt;div&gt;코드의 설명처럼 온라인 되는 친구, 오프라인 되는 친구, 초기에 재구성되는 경우에 따라 onlineContacts 로 선언된 외부의 배열
변수를 조작하는 코드임을 쉽게 확인할 수 있습니다.
&lt;/div&gt;
&lt;div&gt;&amp;#160;
&lt;/div&gt;
&lt;div&gt;다음으로 흥미롭게 살펴볼 코드는 동적으로 사용자 목록에 따라 메신저 웹 툴킷 UI를 구성하여 추가해 주는 로직이 담겨있는 addList 함수입니다.
&lt;/div&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #008000"&gt;///
Messenger Web Toolkit UI 요소를 동적으로 생성하여 추가한다&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; addlist(contactID)
{&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (contactID
== &lt;span style="color: #006080"&gt;''&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;var&lt;/span&gt; tag
= &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Messenger.UI.Tags.TagsFactory.createTag(&lt;span style="color: #006080"&gt;'display-name'&lt;/span&gt;,
{ cid: contactID });&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; document.getElementById(&lt;span style="color: #006080"&gt;&amp;quot;list&amp;quot;&lt;/span&gt;).appendChild(tag);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt; tag
= &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Messenger.UI.Tags.TagsFactory.createTag(&lt;span style="color: #006080"&gt;'personal-message'&lt;/span&gt;,
{ cid: contactID });&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; document.getElementById(&lt;span style="color: #006080"&gt;&amp;quot;list&amp;quot;&lt;/span&gt;).appendChild(tag);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum8"&gt; 8:&lt;/span&gt; document.getElementById(&lt;span style="color: #006080"&gt;&amp;quot;list&amp;quot;&lt;/span&gt;).appendChild(document.createElement(&lt;span style="color: #006080"&gt;'br'&lt;/span&gt;));&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum9"&gt; 9:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;이 코드를 주위 깊게 살펴야 할 이유는 일반적인 HTML 태그와 달리 우리가 사용하고 있는 메신저 웹 툴킷의 UI 들은 XHTML 구성요소를
사용하고 있기 때문에 동적 생성을 위해서는 생성기(Factory)를 거쳐야만 가능하기 때문입니다. 
&lt;/div&gt;
&lt;div&gt;이 때문에 생성기의 사용법을 주의 깊게 살펴 봐야 합니다. 메신저 웹 툴킷의 UI에서 사용되는 태그 생성기는 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fmicrosoft.live.messenger.ui.tags.tagsfactory.aspx" target="_blank"&gt;&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Messenger.UI.Tags.TagsFactory&lt;/a&gt; 입니다. 
&lt;br /&gt;
&lt;br /&gt;
우리의 코드에서는 동적으로 &amp;lt;msgr:display-name&amp;gt; 태그와 &amp;lt;msgr:personal-message&amp;gt; 태그를 생성하고
있습니다. 또 흥미로운 것은 이 태그에서 사용하는 속성값들(attribute)을 지정하는 방식으로 JSON 데이터 표현 방식을 사용하고 있습니다.
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
마지막으로 로그 오프시에 발생하는 SignedOut 이벤트의 콜백 함수인 OnSignout 함수에서는 인증 성공 시에 설정했었던 타이머를 해제하고,
동적으로 추가된 사용자 목록 UI를 청소해 주는 기능을 가진 코드가 추가되어 있습니다. 
&lt;br /&gt;
&lt;/div&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;function&lt;/span&gt; OnSignout(sender,
e) {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; clearInterval(timerID);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; clearlist();&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;간단한 자바스크립트 코드 몇 줄과 HTML 태그를 통하여 간단히 나의 온라인 친구들 목록을 구성하는 예제를 구성해 보았습니다. 
&lt;br /&gt;
&lt;br /&gt;
메신저 웹 툴킷은 재미있는 컨트롤들과 이들을 쉽게 연결시켜 줄 수 있는 라이브러리들을 지원하기 때문에 아이디어에 따라서는 얼마든지 훌륭한 기능들을
가진 어플리케이션들을 구현해 낼 수 있습니다. 
&lt;br /&gt;
&lt;br /&gt;
반드시 데스크탑에 메신저가 설치되어 있지 않은 환경이라도 친구와 대화를 나누거나 친구에게 메시지를 전달 할 수 있으며, 메신저라는 강력한 커뮤니케이션
수단을 통해 웹 사이트를 보다 Socal 하게, 보다 많은 트래픽이 넘쳐나는 사이트로 만들 수 있습니다.
&lt;/div&gt;
&lt;div&gt;&amp;#160;
&lt;/div&gt;
&lt;div&gt;Social 한 사이트에서 사용자의 트래픽을 유발시킬 수 있는 수단으로는 수동적인 Feed 보다는 적극적인 사용자와 사용자간의 메시지가 더
큰 힘을 발휘할 수 있습니다. 
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;참고로 능동적 메시지 전달이 가질 수 있는 이점을 생각하게 해 줄 수 있는 블로그 글이 있어 소개해 드립니다.(&lt;strong&gt;&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fblogs.msdn.com%2fangus_logan%2farchive%2f2009%2f06%2f12%2fuser-acquisition-writing-on-a-notice-board-vs-sending-a-postcard.aspx" target="_blank"&gt;User
acquisition: writing on a notice board vs. sending a postcard&lt;/a&gt;&lt;/strong&gt;)
&lt;/div&gt;
&lt;div&gt;왜 우리가 이 Windows Live Web Messenger Toolkit 에 관심을 가져야 하는지에 대한 보다 현실적인 이유를 느끼게
되실 것이라 생각합니다.
&lt;/div&gt;
&lt;div&gt;&amp;#160;
&lt;/div&gt;
&lt;div&gt;간단히 소개 드리려 시작한 포스트가 다섯 번째에 와서야 일단락을 짓게 되는 것 같습니다. 
&lt;/div&gt;
&lt;div&gt;그래도 아직 Javascript 라이브러리와 Presence/ IM Control 과 관련된 기능은 제대로 맛도 보여드리지 못했는데 말이죠.
&lt;/div&gt;
&lt;div&gt;&amp;#160;
&lt;/div&gt;
&lt;div&gt;일단 Windows Live Web Messenger Toolkit과 관련된 블로그 포스팅은 이것으로 마무리 짓겠습니다.
&lt;/div&gt;
&lt;div&gt;&amp;#160;
&lt;/div&gt;
&lt;div&gt;다음 번 글에서는 윈도우 라이브 서비스에 대한 글을 써 보려 합니다.
&lt;/div&gt;
&lt;div&gt;아직도 윈도우 라이브가 마치 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt; 사의
전유물인양, &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;의
플랫폼만을 위한 배타적인 서비스로 알고 계신 분들이 많은 듯 싶어 이러한 오해를 불식시키기 위해 윈도우 라이브 서비스 전반적인 소개와 앞으로의 방향에
대해 정리해 보도록 하겠습니다. 
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=b5aa7ce3-fc1e-41e9-b120-69101f49f5b3" /&gt;</description>
      <comments>http://www.mhvb.net/funnyfox/CommentView,guid,b5aa7ce3-fc1e-41e9-b120-69101f49f5b3.aspx</comments>
      <category>Live Framework</category>
      <category>Live messenger</category>
      <category>Live Service</category>
      <category>Windows Live</category>
      <category>Windows Live ID</category>
      <category>Windows Live Messenger</category>
      <category>Windows Live Messenger Web Toolkit</category>
      <category>라이브 아이디</category>
      <category>윈도우 라이브</category>
      <category>윈도우 라이브 메신저 웹 툴킷</category>
    <feedburner:origLink>http://www.mhvb.net/funnyfox/2009/06/16/Windows+Live+Messenger+Web+Toolkit+Part+5.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.mhvb.net/funnyfox/Trackback.aspx?guid=16a7e6d5-0eaa-4d4e-87f5-63d33511c5fe</trackback:ping>
      <pingback:server>http://www.mhvb.net/funnyfox/pingback.aspx</pingback:server>
      <pingback:target>http://www.mhvb.net/funnyfox/PermaLink,guid,16a7e6d5-0eaa-4d4e-87f5-63d33511c5fe.aspx</pingback:target>
      <dc:creator>이동범</dc:creator>
      <georss:point>37.505010794412584 127.0564877986908</georss:point>
      <wfw:comment>http://www.mhvb.net/funnyfox/CommentView,guid,16a7e6d5-0eaa-4d4e-87f5-63d33511c5fe.aspx</wfw:comment>
      <wfw:commentRss>http://www.mhvb.net/funnyfox/SyndicationService.asmx/GetEntryCommentsRss?guid=16a7e6d5-0eaa-4d4e-87f5-63d33511c5fe</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
간만의 회합.<br />
짧았지만 반가운 얼굴들...
</p>
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=16a7e6d5-0eaa-4d4e-87f5-63d33511c5fe&amp;url=http%3a%2f%2fwww.minij.com%2f367">http://www.minij.com/367</a>
        </p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=16a7e6d5-0eaa-4d4e-87f5-63d33511c5fe" />
      </body>
      <title>회합</title>
      <guid isPermaLink="false">http://www.mhvb.net/funnyfox/PermaLink,guid,16a7e6d5-0eaa-4d4e-87f5-63d33511c5fe.aspx</guid>
      <link>http://feedproxy.google.com/~r/Dongbum/~3/YGtJXgX-pwg/%ed%9a%8c%ed%95%a9.aspx</link>
      <pubDate>Tue, 16 Jun 2009 01:06:30 GMT</pubDate>
      <description>&lt;p&gt;
간만의 회합.&lt;br&gt;
짧았지만 반가운 얼굴들...
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=16a7e6d5-0eaa-4d4e-87f5-63d33511c5fe&amp;amp;url=http%3a%2f%2fwww.minij.com%2f367"&gt;http://www.minij.com/367&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=16a7e6d5-0eaa-4d4e-87f5-63d33511c5fe" /&gt;</description>
      <comments>http://www.mhvb.net/funnyfox/CommentView,guid,16a7e6d5-0eaa-4d4e-87f5-63d33511c5fe.aspx</comments>
    <feedburner:origLink>http://www.mhvb.net/funnyfox/2009/06/16/%ed%9a%8c%ed%95%a9.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.mhvb.net/funnyfox/Trackback.aspx?guid=d0b7ec4a-6b0a-4830-a4b4-7d26c001b84f</trackback:ping>
      <pingback:server>http://www.mhvb.net/funnyfox/pingback.aspx</pingback:server>
      <pingback:target>http://www.mhvb.net/funnyfox/PermaLink,guid,d0b7ec4a-6b0a-4830-a4b4-7d26c001b84f.aspx</pingback:target>
      <dc:creator>이동범</dc:creator>
      <georss:point>37.572312 126.958158</georss:point>
      <wfw:comment>http://www.mhvb.net/funnyfox/CommentView,guid,d0b7ec4a-6b0a-4830-a4b4-7d26c001b84f.aspx</wfw:comment>
      <wfw:commentRss>http://www.mhvb.net/funnyfox/SyndicationService.asmx/GetEntryCommentsRss?guid=d0b7ec4a-6b0a-4830-a4b4-7d26c001b84f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <ul>
          <li>
UUID is a hash of PUID + ApplicationID. 
<br />
The purpose is to force <u>3<sup>rd</sup> party websites</u>, who has no legal obligations
to <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=d0b7ec4a-6b0a-4830-a4b4-7d26c001b84f&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a> to
consume UUID, thus protecting user’s PUID from being abused. 
</li>
        </ul>
        <p>
          <br />
        </p>
        <ul>
          <li>
CID is a hash of PUID + RegistrationDate. (RegistrationDate is only known to the backend.) 
<br />
The purpose is to prevent PUID from being exposed, therefore CID is used in its place.
You can safely expose CID on query strings or in URLs. Since CID has a 1:1 relationship
to PUID, it has all characteristics of PUID, minus the PII impact. 
</li>
        </ul>
        <img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=d0b7ec4a-6b0a-4830-a4b4-7d26c001b84f" />
      </body>
      <title>Identities from Live ID and Web SDK for 3rd party web sites - UUID and CID</title>
      <guid isPermaLink="false">http://www.mhvb.net/funnyfox/PermaLink,guid,d0b7ec4a-6b0a-4830-a4b4-7d26c001b84f.aspx</guid>
      <link>http://feedproxy.google.com/~r/Dongbum/~3/uPyWX0xl3sI/Identities+From+Live+ID+And+Web+SDK+For+3rd+Party+Web+Sites+UUID+And+CID.aspx</link>
      <pubDate>Thu, 11 Jun 2009 01:44:11 GMT</pubDate>
      <description>&lt;ul&gt;
&lt;li&gt;
UUID is a hash of PUID + ApplicationID. 
&lt;br /&gt;
The purpose is to force &lt;u&gt;3&lt;sup&gt;rd&lt;/sup&gt; party websites&lt;/u&gt;, who has no legal obligations
to &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=d0b7ec4a-6b0a-4830-a4b4-7d26c001b84f&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt; to
consume UUID, thus protecting user’s PUID from being abused. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
CID is a hash of PUID + RegistrationDate. (RegistrationDate is only known to the backend.) 
&lt;br /&gt;
The purpose is to prevent PUID from being exposed, therefore CID is used in its place.
You can safely expose CID on query strings or in URLs. Since CID has a 1:1 relationship
to PUID, it has all characteristics of PUID, minus the PII impact. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=d0b7ec4a-6b0a-4830-a4b4-7d26c001b84f" /&gt;</description>
      <comments>http://www.mhvb.net/funnyfox/CommentView,guid,d0b7ec4a-6b0a-4830-a4b4-7d26c001b84f.aspx</comments>
      <category>Live Framework</category>
      <category>Windows Live</category>
      <category>Windows Live ID</category>
      <category>라이브 아이디</category>
      <category>윈도우 라이브</category>
    <feedburner:origLink>http://www.mhvb.net/funnyfox/2009/06/11/Identities+From+Live+ID+And+Web+SDK+For+3rd+Party+Web+Sites+UUID+And+CID.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.mhvb.net/funnyfox/Trackback.aspx?guid=530a1aa4-6b13-4176-a7df-389c46e12af5</trackback:ping>
      <pingback:server>http://www.mhvb.net/funnyfox/pingback.aspx</pingback:server>
      <pingback:target>http://www.mhvb.net/funnyfox/PermaLink,guid,530a1aa4-6b13-4176-a7df-389c46e12af5.aspx</pingback:target>
      <dc:creator>이동범</dc:creator>
      <georss:point>37.572312 126.958158</georss:point>
      <wfw:comment>http://www.mhvb.net/funnyfox/CommentView,guid,530a1aa4-6b13-4176-a7df-389c46e12af5.aspx</wfw:comment>
      <wfw:commentRss>http://www.mhvb.net/funnyfox/SyndicationService.asmx/GetEntryCommentsRss?guid=530a1aa4-6b13-4176-a7df-389c46e12af5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>
            <em>윈도우 라이브 메신저 웹 툴킷 – 라이브 메신저의 모든 것을 웹에서</em>
          </strong>
        </p>
        <p>
지난 글 마지막에서 말씀드린 것처럼 이번 글에서는 윈도우 라이브 메신저 웹 툴킷의 인증 방식에 대해 알아보도록 합니다.  
<br />
앞서 소개드렸던 두 개의 쿠키 – msgr-consent-token 과 msgr-delegation-token 기억 나시나요?
</p>
        <p>
뜻 그대로 풀어 보자면 첫 번째 쿠키는 “허용/허가” 라는 뜻을 가진 쿠키이고 두 번째 쿠키는 “위임/대리” 라는 뜻을 가진 쿠키 되겠습니다. 
<br />
무슨 허용이고, 무슨 위임이지? 
<br /><br />
이 두 쿠키들이 무엇을 뜻 하는지를 알게 되면 이 의문이 모두 해결됩니다. 
<br /><br />
기억을 더듬어 우리가 웹 메신저에 로그인 하던 과정을 주의 깊게 살펴 봅니다. 
<br /><br />
로그인 버튼을 클릭하면 아래 보이는 창이 팝업 됩니다. 이 창에서 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart4_C931%2fdeleAuthLogin_2.png"><img style="border-right-width: 0px; margin: 10px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="deleAuthLogin" border="0" alt="deleAuthLogin" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/deleAuthLogin_thumb.png" width="367" height="289" /></a>붉은
색으로 박스 쳐진 부분을 보시면, 
<br />
“귀하께서 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;url=http%3a%2f%2fwww.wltoolkit.com">www.wltoolkit.com</a> 에
방문하시면 자동으로 메신저에 로그인 됩니다. <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;url=https%3a%2f%2fhelp.live.com%2fHelp.aspx%3fmarket%3dko-KR%26project%3dLiveIDv1%26querytype%3dkeyword%26query%3dningis_ytrap_driht" target="_blank">그게
뭔 말이냐?</a>” 라고 하는 부분을 보실 수 있습니다. 
<br /><br />
”어라 난 그냥 로그인 하려고 한 것 뿐인데 무슨 자동 로그인?” 하실 분 들 계실 겁니다. 
<br />
또 “난 이거 했는데도 자동 로그인 안되던데 무슨 소리냐?” 라고 하실 분들 또한 계실 겁니다.  
<br /><br />
“그게 뭔 말이냐” 라는 링크 클릭해보시면 설명되어 있는 것과 같이 마이크로소프트 사이트는 아니지만 Windows LiveID 와 연결을 시켜 특정
사이트에 로그인을 하면 자동으로 메신저에도 로그인 할 수 있도록 해 주겠다고 하는 것 입니다. 
<br /><br />
즉, “내가 이 사이트에 로그인 하면 자동으로 메신저에도 자동 로그인 할 수 있도록 <strong><u>허용</u></strong>해 주겠다” 라고
하는 이야기가 됩니다. 
<br /><br />
이것을 바로 “<strong>consent</strong>” 라 합니다.
</p>
        <p>
사용자가 별도로 Windows Live ID에 아이디와 패스워드를 입력하지 않아도 자동으로 윈도우 라이브 아이디 계정을 통해 메신저에 로그인 을 시키겠다라는
이야기가 되는 거죠. 
</p>
        <p>
제가 지난 글의 마지막에 읽어 주십사 부탁 드렸던 저의 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2f2009%2f02%2f12%2fMaking%2bThe%2bInternet%2bA%2bSafer%2bPlace.aspx" target="_blank">이전
포스팅</a> 에서 말씀 드렸던 <strong>위임</strong>인증이 바로 사용된 예가 바로 윈도우 라이브 웹 툴 킷 입니다. 
<br />
또한 위임했다라고 하는 증거로 필요한 토큰이 위임토큰 – Delegated Token – 이 되는 것 이지요. (앞의 글에서 제가 놀이동산 손목 띠,
클럽의 손목 도장 이야기 했던 것 기억 하시나요?) 
<br /><br /><br />
정리해 보면 
<br /><br />
- <u>허용토큰(Consent Token) - msgr-consent-token 은 자동 로그인을 허용했다는 증거로 받은 토큰. 
<br /></u><br /><u>- 위임토큰(Delegated Token) - msgr-delegation-token 은 나중에 로그인이 필요할 경우 인증 여부를 재 확인 시켜
주기 위해 위임을 받았다는 증거로 제공해야 할 토큰</u><br /><br />
으로 구분할 수 있습니다. 
<br />
  
<br />
자동으로 사용자를 메신저에 로그인 할 수 있도록 하기 위해서는 허용 토큰(Consent Token)을 웹 사이트의 데이터 베이스에 저장시킨 뒤 사용자가
다음 번 방문 시에 이 두 개의 토큰(Consent Token / Delegated Token) 을 쿠키에 설정해줌으로써 사용자를 대신해서 메신저에
로그인을 시켜주게 되는 것이지요.
</p>
        <p>
이와 같은 방식의 로그인을 <u>허용 토큰을 통한 위임 로그인(Stored Consent Tokens for Delegated Authentication) </u>이라고
합니다. 
<br />
사용자는 단 한번의 허용을 마치면 그 뒤로는 별도로 윈도우 라이브에 로그인 하지 않아도 이 허용토큰을 통해 웹 어플리케이션이 사용자의 로그인을 대신해
주게 됩니다. 
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart4_C931%2fStoredConsentTokenAuth_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="StoredConsentTokenAuth" border="0" alt="StoredConsentTokenAuth" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/StoredConsentTokenAuth_thumb.png" width="644" height="443" /></a><br /><br />
반면 별도로 허용토큰을 웹 어플리케이션의 데이터베이스에 저장하지 않고 사용자가 직접 Windows Live Messenger 사이트로 부터 발급받은
뒤  웹 브라우저의 life time과 함께 관리하기로 한 경우(one time cookie)에는 브라우저가 닫혀지지 않는 한 로그인이 유지되지만
다음 번 사이트를 방문하게 될 경우에는 허용토큰이 남아 있지 않기 때문에 사용자는 다시 금 로그인 절차를 진행해야 합니다.
</p>
        <p>
이와 같은 방식의 로그인을 <u>어플리케이션 검증토큰을 통한 위임 로그인(Application Verifier Tokens for Delegated
Authentication)</u>이라고 합니다.  
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart4_C931%2fApplicationVarifierTokenAuth_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ApplicationVarifierTokenAuth" border="0" alt="ApplicationVarifierTokenAuth" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/ApplicationVarifierTokenAuth_thumb.png" width="644" height="428" /></a> 
</p>
        <p>
지금 우리가 앞서 실행해본 방식은 어플리케이션 검증 토큰을 이용한 위임 로그인 방식을 이용한 것이라는 것. 이해 되시겠지요?
</p>
        <p>
사이트와 사이트 사이 서로 연계되어 데이터를 교환하는 요구사항들이 늘고 있는 요즘 위임인증은 상당히 효과적이고 안전한 인증 방식이 됩니다. 
<br /><br />
위임 인증을 보다 간단히 설명을 하자면,
</p>
        <p>
A 라고 하는 저장소(스카이드라이브/ 페이스북 / 트위터 등등)에 있는 나의 데이터를 B라고 하는 사이트에서 사용하고자 할 때 B 사이트에 A에서
사용되는 아이디와 패스워드를 우리가 넘겨준다면? 
<br />
해킹의 소지도 있을 뿐만 아니라 왠지 모를 찝찝함이 남을 수 밖에 없죠. 
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart4_C931%2fimage_thumb_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image_thumb" border="0" alt="image_thumb" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/image_thumb_thumb.png" width="386" height="155" /></a>  
<br />
[B 라고 하는(Importer)에게 Web Site(저장소)에서 데이터를 가지고 오기 위해 자신의 아이디와 패스워드를 전달하는 예] 
<br /><br />
하지만 이러한 방식을 그림에서 처럼 바꿔준다면, 
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart4_C931%2fimage_thumb_1_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image_thumb_1" border="0" alt="image_thumb_1" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/image_thumb_1_thumb_1.png" width="388" height="224" /></a>  
<br />
[위임인증 토큰을 사용하여 Importer는 Web Site에 사용자의 정보를 요청한다] 
<br /><br />
사용자는 안전하게 Web Site에 저장된 데이터를 Importer에게 별도로 자신의 Credential 정보를 넘겨주지 않고도 사용할 수 있게 되는
것입니다. 
<br /></p>
        <p>
        </p>
        <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ff8d93cb-d083-4414-9040-9a15a065ff1c" class="wlWriterEditableSmartContent">
          <div id="44c091e7-9e9b-4c6b-b885-49e20b4feaea" style="margin: 0px; padding: 0px; display: inline;">
            <div>
              <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;url=http%3a%2f%2fwww.youtube.com%2fwatch%3fv%3dIOm22j1gSEw" target="_new">
                <img src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/video0ad1e40cf329.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('44c091e7-9e9b-4c6b-b885-49e20b4feaea'); downlevelDiv.innerHTML = &quot;&lt;div&gt;&lt;object width=\&quot;425\&quot; height=\&quot;355\&quot;&gt;&lt;param name=\&quot;movie\&quot; value=\&quot;http://www.youtube.com/v/IOm22j1gSEw&amp;hl=en\&quot;&gt;&lt;\/param&gt;&lt;embed src=\&quot;http://www.youtube.com/v/IOm22j1gSEw&amp;hl=en\&quot; type=\&quot;application/x-shockwave-flash\&quot; width=\&quot;425\&quot; height=\&quot;355\&quot;&gt;&lt;\/embed&gt;&lt;\/object&gt;&lt;\/div&gt;&quot;;" alt="" />
              </a>
            </div>
          </div>
        </div>
        <p>
지금 보시는 비디오 클립이 잘 설명해 주고 있습니다. 
<br />
친구를 추가하기 위해서 Windows Live에 MySpace의 Credential 정보를 넘겨주지 않죠. 
<br />
이것이 바로 위임인증을 사용한 예 입니다. 
<br /><br />
보다 자세한 위임인증(Delegated Web Auth) 에 대해 알고 싶으시면 소개해 드리는 링크를 꼭 한 번 읽어 보시라 권해 드립니다. - <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fcc287613.aspx" target="_blank">Understanding
Windows Live Delegated Authentication</a></p>
        <p>
오늘은 윈도우 라이브 메신저 웹 툴킷이 사용하는 내부 인증 메커니즘에 대해 알아 보았습니다. 
<br />
다음 글에서는 윈도우 라이브 툴 킷의 UI 컨트롤들을 이용하여 간단한 예제를 만들어 볼까 합니다. 
</p>
        <img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5" />
      </body>
      <title>Windows Live Messenger Web Toolkit – Part4</title>
      <guid isPermaLink="false">http://www.mhvb.net/funnyfox/PermaLink,guid,530a1aa4-6b13-4176-a7df-389c46e12af5.aspx</guid>
      <link>http://feedproxy.google.com/~r/Dongbum/~3/6__MXzazBAc/Windows+Live+Messenger+Web+Toolkit+Part4.aspx</link>
      <pubDate>Wed, 10 Jun 2009 09:35:32 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;&lt;em&gt;윈도우 라이브 메신저 웹 툴킷 – 라이브 메신저의 모든 것을 웹에서&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
지난 글 마지막에서 말씀드린 것처럼 이번 글에서는 윈도우 라이브 메신저 웹 툴킷의 인증 방식에 대해 알아보도록 합니다.&amp;#160; 
&lt;br /&gt;
앞서 소개드렸던 두 개의 쿠키 – msgr-consent-token 과 msgr-delegation-token 기억 나시나요?
&lt;/p&gt;
&lt;p&gt;
뜻 그대로 풀어 보자면 첫 번째 쿠키는 “허용/허가” 라는 뜻을 가진 쿠키이고 두 번째 쿠키는 “위임/대리” 라는 뜻을 가진 쿠키 되겠습니다. 
&lt;br /&gt;
무슨 허용이고, 무슨 위임이지? 
&lt;br /&gt;
&lt;br /&gt;
이 두 쿠키들이 무엇을 뜻 하는지를 알게 되면 이 의문이 모두 해결됩니다. 
&lt;br /&gt;
&lt;br /&gt;
기억을 더듬어 우리가 웹 메신저에 로그인 하던 과정을 주의 깊게 살펴 봅니다. 
&lt;br /&gt;
&lt;br /&gt;
로그인 버튼을 클릭하면 아래 보이는 창이 팝업 됩니다. 이 창에서 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart4_C931%2fdeleAuthLogin_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 10px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="deleAuthLogin" border="0" alt="deleAuthLogin" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/deleAuthLogin_thumb.png" width="367" height="289" /&gt;&lt;/a&gt;붉은
색으로 박스 쳐진 부분을 보시면, 
&lt;br /&gt;
“귀하께서 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;amp;url=http%3a%2f%2fwww.wltoolkit.com"&gt;www.wltoolkit.com&lt;/a&gt; 에
방문하시면 자동으로 메신저에 로그인 됩니다. &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;amp;url=https%3a%2f%2fhelp.live.com%2fHelp.aspx%3fmarket%3dko-KR%26project%3dLiveIDv1%26querytype%3dkeyword%26query%3dningis_ytrap_driht" target="_blank"&gt;그게
뭔 말이냐?&lt;/a&gt;” 라고 하는 부분을 보실 수 있습니다. 
&lt;br /&gt;
&lt;br /&gt;
”어라 난 그냥 로그인 하려고 한 것 뿐인데 무슨 자동 로그인?” 하실 분 들 계실 겁니다. 
&lt;br /&gt;
또 “난 이거 했는데도 자동 로그인 안되던데 무슨 소리냐?” 라고 하실 분들 또한 계실 겁니다.&amp;#160; 
&lt;br /&gt;
&lt;br /&gt;
“그게 뭔 말이냐” 라는 링크 클릭해보시면 설명되어 있는 것과 같이 마이크로소프트 사이트는 아니지만 Windows LiveID 와 연결을 시켜 특정
사이트에 로그인을 하면 자동으로 메신저에도 로그인 할 수 있도록 해 주겠다고 하는 것 입니다. 
&lt;br /&gt;
&lt;br /&gt;
즉, “내가 이 사이트에 로그인 하면 자동으로 메신저에도 자동 로그인 할 수 있도록 &lt;strong&gt;&lt;u&gt;허용&lt;/u&gt;&lt;/strong&gt;해 주겠다” 라고
하는 이야기가 됩니다. 
&lt;br /&gt;
&lt;br /&gt;
이것을 바로 “&lt;strong&gt;consent&lt;/strong&gt;” 라 합니다.
&lt;/p&gt;
&lt;p&gt;
사용자가 별도로 Windows Live ID에 아이디와 패스워드를 입력하지 않아도 자동으로 윈도우 라이브 아이디 계정을 통해 메신저에 로그인 을 시키겠다라는
이야기가 되는 거죠. 
&lt;/p&gt;
&lt;p&gt;
제가 지난 글의 마지막에 읽어 주십사 부탁 드렸던 저의 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2f2009%2f02%2f12%2fMaking%2bThe%2bInternet%2bA%2bSafer%2bPlace.aspx" target="_blank"&gt;이전
포스팅&lt;/a&gt; 에서 말씀 드렸던 &lt;strong&gt;위임&lt;/strong&gt;인증이 바로 사용된 예가 바로 윈도우 라이브 웹 툴 킷 입니다. 
&lt;br /&gt;
또한 위임했다라고 하는 증거로 필요한 토큰이 위임토큰 – Delegated Token – 이 되는 것 이지요. (앞의 글에서 제가 놀이동산 손목 띠,
클럽의 손목 도장 이야기 했던 것 기억 하시나요?) 
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
정리해 보면 
&lt;br /&gt;
&lt;br /&gt;
- &lt;u&gt;허용토큰(Consent Token) - msgr-consent-token 은 자동 로그인을 허용했다는 증거로 받은 토큰. 
&lt;br /&gt;
&lt;/u&gt; 
&lt;br /&gt;
&lt;u&gt;- 위임토큰(Delegated Token) - msgr-delegation-token 은 나중에 로그인이 필요할 경우 인증 여부를 재 확인 시켜
주기 위해 위임을 받았다는 증거로 제공해야 할 토큰&lt;/u&gt; 
&lt;br /&gt;
&lt;br /&gt;
으로 구분할 수 있습니다. 
&lt;br /&gt;
&amp;#160; 
&lt;br /&gt;
자동으로 사용자를 메신저에 로그인 할 수 있도록 하기 위해서는 허용 토큰(Consent Token)을 웹 사이트의 데이터 베이스에 저장시킨 뒤 사용자가
다음 번 방문 시에 이 두 개의 토큰(Consent Token / Delegated Token) 을 쿠키에 설정해줌으로써 사용자를 대신해서 메신저에
로그인을 시켜주게 되는 것이지요.
&lt;/p&gt;
&lt;p&gt;
이와 같은 방식의 로그인을 &lt;u&gt;허용 토큰을 통한 위임 로그인(Stored Consent Tokens for Delegated Authentication) &lt;/u&gt;이라고
합니다. 
&lt;br /&gt;
사용자는 단 한번의 허용을 마치면 그 뒤로는 별도로 윈도우 라이브에 로그인 하지 않아도 이 허용토큰을 통해 웹 어플리케이션이 사용자의 로그인을 대신해
주게 됩니다. 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart4_C931%2fStoredConsentTokenAuth_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="StoredConsentTokenAuth" border="0" alt="StoredConsentTokenAuth" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/StoredConsentTokenAuth_thumb.png" width="644" height="443" /&gt;&lt;/a&gt; 
&lt;br /&gt;
&lt;br /&gt;
반면 별도로 허용토큰을 웹 어플리케이션의 데이터베이스에 저장하지 않고 사용자가 직접 Windows Live Messenger 사이트로 부터 발급받은
뒤&amp;#160; 웹 브라우저의 life time과 함께 관리하기로 한 경우(one time cookie)에는 브라우저가 닫혀지지 않는 한 로그인이 유지되지만
다음 번 사이트를 방문하게 될 경우에는 허용토큰이 남아 있지 않기 때문에 사용자는 다시 금 로그인 절차를 진행해야 합니다.
&lt;/p&gt;
&lt;p&gt;
이와 같은 방식의 로그인을 &lt;u&gt;어플리케이션 검증토큰을 통한 위임 로그인(Application Verifier Tokens for Delegated
Authentication)&lt;/u&gt;이라고 합니다.&amp;#160; 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart4_C931%2fApplicationVarifierTokenAuth_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ApplicationVarifierTokenAuth" border="0" alt="ApplicationVarifierTokenAuth" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/ApplicationVarifierTokenAuth_thumb.png" width="644" height="428" /&gt;&lt;/a&gt;&amp;#160;
&lt;/p&gt;
&lt;p&gt;
지금 우리가 앞서 실행해본 방식은 어플리케이션 검증 토큰을 이용한 위임 로그인 방식을 이용한 것이라는 것. 이해 되시겠지요?
&lt;/p&gt;
&lt;p&gt;
사이트와 사이트 사이 서로 연계되어 데이터를 교환하는 요구사항들이 늘고 있는 요즘 위임인증은 상당히 효과적이고 안전한 인증 방식이 됩니다. 
&lt;br /&gt;
&lt;br /&gt;
위임 인증을 보다 간단히 설명을 하자면,
&lt;/p&gt;
&lt;p&gt;
A 라고 하는 저장소(스카이드라이브/ 페이스북 / 트위터 등등)에 있는 나의 데이터를 B라고 하는 사이트에서 사용하고자 할 때 B 사이트에 A에서
사용되는 아이디와 패스워드를 우리가 넘겨준다면? 
&lt;br /&gt;
해킹의 소지도 있을 뿐만 아니라 왠지 모를 찝찝함이 남을 수 밖에 없죠. 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart4_C931%2fimage_thumb_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image_thumb" border="0" alt="image_thumb" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/image_thumb_thumb.png" width="386" height="155" /&gt;&lt;/a&gt;&amp;#160; 
&lt;br /&gt;
[B 라고 하는(Importer)에게 Web Site(저장소)에서 데이터를 가지고 오기 위해 자신의 아이디와 패스워드를 전달하는 예] 
&lt;br /&gt;
&lt;br /&gt;
하지만 이러한 방식을 그림에서 처럼 바꿔준다면, 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart4_C931%2fimage_thumb_1_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image_thumb_1" border="0" alt="image_thumb_1" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/image_thumb_1_thumb_1.png" width="388" height="224" /&gt;&lt;/a&gt;&amp;#160; 
&lt;br /&gt;
[위임인증 토큰을 사용하여 Importer는 Web Site에 사용자의 정보를 요청한다] 
&lt;br /&gt;
&lt;br /&gt;
사용자는 안전하게 Web Site에 저장된 데이터를 Importer에게 별도로 자신의 Credential 정보를 넘겨주지 않고도 사용할 수 있게 되는
것입니다. 
&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ff8d93cb-d083-4414-9040-9a15a065ff1c" class="wlWriterEditableSmartContent"&gt;
&lt;div id="44c091e7-9e9b-4c6b-b885-49e20b4feaea" style="margin: 0px; padding: 0px; display: inline;"&gt;
&lt;div&gt;&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;amp;url=http%3a%2f%2fwww.youtube.com%2fwatch%3fv%3dIOm22j1gSEw" target="_new"&gt;&lt;img src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart4_C931/video0ad1e40cf329.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('44c091e7-9e9b-4c6b-b885-49e20b4feaea'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/IOm22j1gSEw&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/IOm22j1gSEw&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&gt;
&lt;p&gt;
지금 보시는 비디오 클립이 잘 설명해 주고 있습니다. 
&lt;br /&gt;
친구를 추가하기 위해서 Windows Live에 MySpace의 Credential 정보를 넘겨주지 않죠. 
&lt;br /&gt;
이것이 바로 위임인증을 사용한 예 입니다. 
&lt;br /&gt;
&lt;br /&gt;
보다 자세한 위임인증(Delegated Web Auth) 에 대해 알고 싶으시면 소개해 드리는 링크를 꼭 한 번 읽어 보시라 권해 드립니다. - &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fcc287613.aspx" target="_blank"&gt;Understanding
Windows Live Delegated Authentication&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
오늘은 윈도우 라이브 메신저 웹 툴킷이 사용하는 내부 인증 메커니즘에 대해 알아 보았습니다. 
&lt;br /&gt;
다음 글에서는 윈도우 라이브 툴 킷의 UI 컨트롤들을 이용하여 간단한 예제를 만들어 볼까 합니다. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=530a1aa4-6b13-4176-a7df-389c46e12af5" /&gt;</description>
      <comments>http://www.mhvb.net/funnyfox/CommentView,guid,530a1aa4-6b13-4176-a7df-389c46e12af5.aspx</comments>
      <category>Live messenger</category>
      <category>Live Service</category>
      <category>oAuth</category>
      <category>Windows Live</category>
      <category>Windows Live ID</category>
      <category>Windows Live Messenger</category>
      <category>Windows Live Messenger Web Toolkit</category>
      <category>라이브 메신저</category>
      <category>윈도우 라이브</category>
      <category>윈도우 라이브 메신저 웹 툴킷</category>
    <feedburner:origLink>http://www.mhvb.net/funnyfox/2009/06/10/Windows+Live+Messenger+Web+Toolkit+Part4.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.mhvb.net/funnyfox/Trackback.aspx?guid=c238c07c-1b20-4d65-bda6-18b5cb2aa37a</trackback:ping>
      <pingback:server>http://www.mhvb.net/funnyfox/pingback.aspx</pingback:server>
      <pingback:target>http://www.mhvb.net/funnyfox/PermaLink,guid,c238c07c-1b20-4d65-bda6-18b5cb2aa37a.aspx</pingback:target>
      <dc:creator>이동범</dc:creator>
      <georss:point>37.572312 126.958158</georss:point>
      <wfw:comment>http://www.mhvb.net/funnyfox/CommentView,guid,c238c07c-1b20-4d65-bda6-18b5cb2aa37a.aspx</wfw:comment>
      <wfw:commentRss>http://www.mhvb.net/funnyfox/SyndicationService.asmx/GetEntryCommentsRss?guid=c238c07c-1b20-4d65-bda6-18b5cb2aa37a</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>
            <em>윈도우 라이브 메신저 웹 툴킷 – 라이브 메신저의 모든 것을 웹에서</em>
          </strong>
        </p>
        <p>
          <strong>
            <em>
              <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fintro_2.png">
                <img style="border-right-width: 0px; margin: 0px 20px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="intro" border="0" alt="intro" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/intro_thumb.png" width="260" height="202" />
              </a>
            </em>
          </strong>
        </p>
        <p>
두 개의 포스팅을 통하여 간단히 라이브 메신저 웹 툴킷 UI 컨트롤들 중 Web Bar 를 웹 페이지에 호스팅 해 보았습니다.
</p>
        <p>
이제는 보다 자세히 윈도우 라이브 메신저 웹 툴킷의 구성에 대해 살펴 봅니다.
</p>
        <p>
          <strong>
            <u>Windows Live Messenger Web Toolkit의 구성</u>
          </strong> 
</p>
        <p>
          <strong>1. HTML UI Control</strong>
        </p>
        <p>
앞서 설명한 바와 같이 윈도우 라이브 메신저 웹 툴킷은 모든 기능들이 모두 구현되어 있는 Web Bar 컨트롤에서부터 메신저를 구성하기 위해 요구되는
다양한 기능들을 모두 컨트롤화 하여 각 시나리오에 맞춰 사용할 수 있는 다양한 UI 컨트롤을 제공합니다. 이것들을 모두 통틀어 HTML UI 컨트롤
이라고 합니다.
</p>
        <p>
          <strong>2. Windows Live Messenger Library</strong>
        </p>
        <p>
윈도우 라이브 메신저 라이브러리는 자바스크립트로 구성되어 있는 스크립트 라이브러리로써 UI 는 별도 제공되지 않으며, 모든 기능들이 스크립트 객체와
객체들 간의 이벤트들을 통해 개발자들이 직접 메신저를 구현할 수 있도록 해 줍니다.
</p>
        <p>
DHTML 기반이건(Ajax) Silverlight 건 Flash 이건 간에 JavaScript를 호스팅 할 수 있는 모든 곳에서 사용이 가능합니다.
앞서 소개한 HTML UI Control의 모든 기능들은 윈도우 라이브 메신저 라이브러리를 사용하고 있습니다.
</p>
        <p>
그러므로 HTML UI Control의 모든 이벤트들과 객체모델들을 스크립트 라이브러리들과 공유할 수 있습니다.
</p>
        <p>
          <strong>3. Windows Live IM Control</strong>
        </p>
        <p>
제 블로그 옆에 보이는 웹 메신저 창이 바로 Windows Live IM Control 입니다. 
<br />
메신저 창의 기능이 오직 특정 사용자와의 대화로 제한됨을 확인 하실 수 있습니다. 
<br />
이 경우 메신저 창을 통해서는 저하고만 대화 하실 수 있죠. 
<br />
온라인 상점 혹은 온라인 오픈 마켓 등에서 특정 판매자 와 웹 상에서 대화를 할 수 있도록 해 주는 기능 등을 제공해 줄 때 유용합니다. [<a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.ec21.com%2fcompanies%2fyest.html">구현
예제 참조 : EC 21 (온라인 B2B 사이트)</a>]
</p>
        <p>
          <strong>4. Windows Live Presence API</strong>
        </p>
        <p>
단순히 특정 사용자의 온라인 유무를 나타내기 위해 제공되는 API 입니다. 요청에 따라 JSON Format 의 데이터 혹은 Image 형식(온라인/
오프라인 아이콘)의 서비스가 제공됩니다.
</p>
        <p>
이러한 4가지 라이브러리가 바로 Windows Live Messenger Web Toolkit 의 구성 요소들 입니다.
</p>
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fArchitecture_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Architecture" border="0" alt="Architecture" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/Architecture_thumb.png" width="504" height="345" />
          </a>  
<br />
[Windows Live Messenger Web Toolkit의 구성]
</p>
        <p>
          <strong>
            <u>다시 HTML UI Control 살피기</u>
          </strong>
        </p>
        <p>
윈도우 라이브 메신저 웹 툴킷이 이런 기능들로 이루어 져 있구나… 라는 것을 대강 살폈으니 이제 다시 우리가 구현해 두었던 HTML UI Control
들 중 Web Bar로 되돌아 옵니다. 
<br />
그리고 내부 구성 들을 하나씩 들쳐 보도록 하죠. 
</p>
        <p>
우리가 실행했었던 웹 프로젝트를 비주얼 스튜디오의 솔루션 탐색기를 통해 들여다 보면 다음과 같은 파일들이 보이실 겁니다. 
<br /><br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fSource_2.png"><img style="border-right-width: 0px; margin: 0px 20px 20px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Source" border="0" alt="Source" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/Source_thumb.png" width="325" height="353" /></a></p>
        <p>
각각의 파일들의 용도는 다음과 같습니다.(보이는 순서대로) 
</p>
        <ul>
          <li>
            <strong>Channel.html</strong> – 메신저 서버와의 통신을 위해 사용되는 스크립트가 담겨있는 파일입니다. 
<br />
Cross Domain scripting의 보안상의 문제를 우회할 수 있는 다양한 방법들이 있는데 그 중 내부적으로 iframe을 동적으로 만들어
호출하는 방식이 있습니다. 
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a> Web
Messenger Library에서는 이 방식을 통하여 Cross Domain 문제를 해결하고 있습니다.  
<br />
이 기법에 대해 보다 자세히 알고 싶으시다면 소개해 드리는 링크를 참조하시기 바랍니다. 
<br />
내용을 한번 정독해 보시는 것도 많은 도움이 될 것이라 생각합니다. 
<br />
[ <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbb735305.aspx" target="_blank">The
Architecture Journal - Secure Cross-Domain Communication in the Browser</a> ] 
<br /></li>
          <li>
Default.aspx – Web Messenger Control UI 를 호스팅 하고 있는 페이지이죠. 각 파일들에 대한 설명을 마치고 다시 살펴
봅니다. 
<br /></li>
          <li>
Privacy.html – Login 창에서 Privacy 정책과 관련한 안내 문구가 담긴 페이지입니다. 서비스 시에는 정식 문구가 쓰여져야 하겠지만
현재로써는 별 내용 없는 Dummy 페이지에 불과합니다. (<strong><u>하지만 반드시 필요한 파일입니다!</u></strong>) 
<br /></li>
          <li>
RefreshMessengerToken.aspx – Windows Live ID Delegated(위임인증) 을 통하여 사용자의 인증 토큰과 메신저
사용을 위한 인증 토큰을 쿠키에 넣어 관리하기 위해 필요한 파일입니다. 별도로 토큰을 관리할 목적이 아니라면 그냥 사용해도 무방한 파일입니다. 이
부분 역시 좀 더 자세히 알아 볼 때 다시한번 살펴볼 파일입니다. 
<br /></li>
          <li>
web.config – 우리가 메신저를 호스팅 하기위해 필요한 Application ID와 Security Key에 대한 정보를 저장해 둔 환경설정
파일입니다. 
</li>
        </ul>
        <p>
통신을 위한 체널 파일, 인증 쿠키를 관리할 RefreshToken 파일과 Privacy 정보가 담긴 파일 이렇게 3개의 파일들이 준비되어 있으면
기본적으로 메신저 서비스를 호스팅 할 수 있는 기본적인 요구사항들을 갖췄다 생각하시면 됩니다. 
<br /><br />
앞으로 살펴보게 될 모든 컨트롤들 역시 위에서 설명 드리는 이 파일들이 기본적으로 준비되어 있다는 가정하에서 구현이 시작됩니다.<a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fHTMLControls_2.png"><img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="HTMLControls" border="0" alt="HTMLControls" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/HTMLControls_thumb.png" width="644" height="135" /></a>  
<br />
[시나리오에 따른 각각의 16개의 HTML UI Control들]
</p>
        <p>
위의 그림은 16개의 HTML Control들을 각각의 시나리오 별로 나누어 구분 지어놓은 그림입니다. 이것들을 표로 정리하자면 다음과 같습니다. 
<br /></p>
        <table border="1" cellspacing="0" cellpadding="2" width="738">
          <tbody>
            <tr>
              <td valign="top" width="149">
구분</td>
              <td valign="top" width="218">
                <p align="center">
컨트롤 이름
</p>
              </td>
              <td valign="top" width="369">
                <p align="center">
설명
</p>
              </td>
            </tr>
            <tr>
              <td valign="top" width="149">
Profile</td>
              <td valign="top" width="218">
Profile</td>
              <td valign="top" width="369">
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fprofileControl_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="profileControl" border="0" alt="profileControl" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/profileControl_thumb.png" width="207" height="69" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="149">
Presence</td>
              <td valign="top" width="218">
Displan Name</td>
              <td valign="top" width="369">
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fdisplayname_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="displayname" border="0" alt="displayname" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/displayname_thumb.png" width="78" height="23" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="149">
 </td>
              <td valign="top" width="218">
Display Picture</td>
              <td valign="top" width="369">
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fdisplaypicture_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="displaypicture" border="0" alt="displaypicture" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/displaypicture_thumb.png" width="71" height="63" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="150">
 </td>
              <td valign="top" width="218">
Presence Status</td>
              <td valign="top" width="369">
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fstatus2_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="status2" border="0" alt="status2" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/status2_thumb.png" width="167" height="156" />
                </a>
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fstatus1_4.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="status1" border="0" alt="status1" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/status1_thumb_1.png" width="90" height="27" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="150">
 </td>
              <td valign="top" width="218">
Personal Message</td>
              <td valign="top" width="369">
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fpersonalmessage_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="personalmessage" border="0" alt="personalmessage" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/personalmessage_thumb.png" width="101" height="24" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="150">
Contacts</td>
              <td valign="top" width="218">
Add Contact</td>
              <td valign="top" width="369">
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2faddContact_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="addContact" border="0" alt="addContact" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/addContact_thumb.png" width="244" height="193" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="150">
 </td>
              <td valign="top" width="218">
Contact List</td>
              <td valign="top" width="369">
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fcontactList_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="contactList" border="0" alt="contactList" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/contactList_thumb.png" width="244" height="119" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="150">
 </td>
              <td valign="top" width="218">
Contact Picker</td>
              <td valign="top" width="369">
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fContactPicker_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ContactPicker" border="0" alt="ContactPicker" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/ContactPicker_thumb.png" width="243" height="244" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="150">
 </td>
              <td valign="top" width="218">
Application Contacts</td>
              <td valign="top" width="369">
특정 사용자에게 자신이 등록하지 않은 사용자에 대한 로그인 여부 상태를 알 수 있도록 합니다.(Invisible)</td>
            </tr>
            <tr>
              <td valign="top" width="150">
Chat</td>
              <td valign="top" width="218">
Conversation</td>
              <td valign="top" width="369">
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fConversation_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Conversation" border="0" alt="Conversation" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/Conversation_thumb.png" width="243" height="244" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="150">
 </td>
              <td valign="top" width="218">
Converstation List</td>
              <td valign="top" width="369">
                <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:7ea1c32f-1d6e-4004-bd5f-6d806ff825cc" class="wlWriterEditableSmartContent">
                  <div id="fe4b0129-0525-4dd6-a51f-de30117492ca" style="margin: 0px; padding: 0px; display: inline;">
                    <div>
                      <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.youtube.com%2fwatch%3fv%3dxhrdt2J7uu8" target="_new">
                        <img src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/video284edb9668c7.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('fe4b0129-0525-4dd6-a51f-de30117492ca'); downlevelDiv.innerHTML = &quot;&lt;div&gt;&lt;object width=\&quot;425\&quot; height=\&quot;355\&quot;&gt;&lt;param name=\&quot;movie\&quot; value=\&quot;http://www.youtube.com/v/xhrdt2J7uu8&amp;hl=en\&quot;&gt;&lt;\/param&gt;&lt;embed src=\&quot;http://www.youtube.com/v/xhrdt2J7uu8&amp;hl=en\&quot; type=\&quot;application/x-shockwave-flash\&quot; width=\&quot;425\&quot; height=\&quot;355\&quot;&gt;&lt;\/embed&gt;&lt;\/object&gt;&lt;\/div&gt;&quot;;" alt="" />
                      </a>
                    </div>
                  </div>
                </div>
              </td>
            </tr>
            <tr>
              <td valign="top" width="150">
WebBar</td>
              <td valign="top" width="218">
Messenger Web Bar</td>
              <td valign="top" width="369">
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fWebBar_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WebBar" border="0" alt="WebBar" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/WebBar_thumb.png" width="421" height="167" />
                </a>
              </td>
            </tr>
            <tr>
              <td valign="top" width="150">
 </td>
              <td valign="top" width="218">
IF</td>
              <td valign="top" width="369">
특정 조건을 만족할 때 컨트롤을 보일 수 있도록 해 주는 Block (Invisible) – 예를 들어 로그인 했을 때 보일 것과 로그오프인 경우
각기 다른 UI를 보이고자 할 때 유용합니다.</td>
            </tr>
            <tr>
              <td valign="top" width="150">
 </td>
              <td valign="top" width="218">
Else</td>
              <td valign="top" width="369">
위의 IF 컨트롤과 함께 사용되며 IF 조건에 만족하지 않은 조건 Block의 UI를 보이고자 할 때 사용됩니다. (Invisible)</td>
            </tr>
            <tr>
              <td valign="top" width="150">
 </td>
              <td valign="top" width="218">
Messener Application</td>
              <td valign="top" width="369">
Windows Live Messenger UI 컨트롤들에 대한 초기화를 위해 반드시 필요한 컨트롤입니다. 다른 컨트롤들을 사용하기 위해서는 반드시
사전에 추가되어야 할 컨트롤입니다.</td>
            </tr>
            <tr>
              <td valign="top" width="150">
 </td>
              <td valign="top" width="218">
Sign In</td>
              <td valign="top" width="369">
                <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fSignin_2.png">
                  <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Signin" border="0" alt="Signin" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/Signin_thumb.png" width="185" height="64" />
                </a>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
16개의 컨트롤들을 잘 조합해 주면 메신저 뿐만 아니라 간단히 Social 한 기능들을 여러분들의 웹 사이트에 추가해 줄 수 있습니다. 
<br /><br />
그러면 이제 앞서 실행했던 Default.aspx 파일의 HTML 코드를 살펴봅니다. 
</p>
        <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 80.79%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; height: 66px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
          <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum1"> 1:</span> &lt;script
type=<span style="color: #006080">"text/javascript"</span> src=<span style="color: #006080">"http://www.wlmessenger.net/api/3.0/loader.js"</span>&gt;&lt;/script&gt;</pre>
            <!--CRLF-->
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum2"> 2:</span> &lt;script
type=<span style="color: #006080">"text/javascript"</span>&gt;</pre>
            <!--CRLF-->
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum3"> 3:</span>
              <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Core.Loader.load([<span style="color: #006080">'messenger.ui'</span>, <span style="color: #006080">'messenger.ui.styles.core'</span>]);</pre>
            <!--CRLF-->
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum4"> 4:</span> &lt;/script&gt;</pre>
            <!--CRLF-->
          </div>
        </div>
        <p>
페이지의 서두에는 다음과 같이 자바스크립트 라이브러리의 위치를 지정하고 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a>.Live.Core.Loader.load
메서드를 호출하는 코드를 보실 수 있습니다. 이것은 Windows Live Messenger Control UI에서 사용할 자바스크립트 라이브러리를
로딩하는 과정입니다. 
<br />
기억하십니까? Windows Live Messenger Control UI들은 모두 윈도우 라이브 메신저 라이브러리의 기능들을 활용한다는 사실.
</p>
        <p>
자 조금 더 내려오시면 다음과 같은 HTML 을 확인하실 수 있습니다. 
</p>
        <p>
이 태그가 제가 설명 드렸던 UI Control들 중 Messenger Application 컨트롤 태그 입니다.
</p>
        <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 80.89%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; height: 115px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
          <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum1"> 1:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">msgr:app</span>
            </pre>
            <!--CRLF-->
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum2"> 2:</span>
              <span style="color: #ff0000">id</span>
              <span style="color: #0000ff">="appTag"</span>
            </pre>
            <!--CRLF-->
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum3"> 3:</span>
              <span style="color: #ff0000">application-verifier-token</span>
              <span style="color: #0000ff">="&lt;%=
ApplicationVerifier %&gt;"</span>
            </pre>
            <!--CRLF-->
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum4"> 4:</span>
              <span style="color: #ff0000">privacy-url</span>
              <span style="color: #0000ff">="Privacy.html"</span>
            </pre>
            <!--CRLF-->
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum5"> 5:</span>
              <span style="color: #ff0000">channel-url</span>
              <span style="color: #0000ff">="Channel.html"</span>
            </pre>
            <!--CRLF-->
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum6"> 6:</span>
              <span style="color: #ff0000">token-url</span>
              <span style="color: #0000ff">="RefreshMessengerToken.aspx"</span>
              <span style="color: #0000ff">&gt;</span>
            </pre>
            <!--CRLF-->
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum7"> 7:</span>
              <span style="color: #0000ff">&lt;/</span>
              <span style="color: #800000">msgr:app</span>
              <span style="color: #0000ff">&gt;</span>
            </pre>
            <!--CRLF-->
          </div>
        </div>
        <p>
이게 무슨 HTML이냐~ XML 아니냐? 하시는 분들 계시겠지요? 이것을 XHTML이라고 합니다. XHTML 이 머냐? 이건 따로 공부해 주시고..(<a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fXhtml" target="_blank">그래서
뭐냐?</a>) 
<br />
모든 윈도우 라이브 메신저 컨트롤들은 이러한 XHTML 태그로 구성되어 있습니다. 
<br /><br />
그래서 반드시 이러한 태그들에 정의에 앞서 네임스페이스 정의가 선행되어야 합니다. (제가 설명을 빼먹었죠?) 
<br />
HTML 정의에 다음과 같이 네임스페이스 정의가 반드시 추가되어 있어야 합니다. 
</p>
        <div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 80.36%; padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr; height: 20px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
          <div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
            <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">
              <span style="color: #606060" id="lnum1"> 1:</span>
              <span style="color: #0000ff">&lt;</span>
              <span style="color: #800000">html</span>
              <span style="color: #ff0000">xmlns</span>
              <span style="color: #0000ff">="http://www.w3.org/1999/xhtml"</span>
              <span style="color: #ff0000">xmlns:msgr</span>
              <span style="color: #0000ff">="http://messenger.live.com/2009/ui-tags"</span>
              <span style="color: #0000ff">&gt;</span>
            </pre>
            <!--CRLF-->
          </div>
        </div>
        <p>
Messenger Application 컨트롤 태그의 어트리뷰트들을 보면 Application-verifier-token 과 privacy-url
, channel-url 그리고 token-url 값들이 나란히 정의되어 있는 것을 볼 수 있습니다.
</p>
        <p>
Application-verifer-token 값은 제가 첫 번째 글에서 설명했던 Azure Service Portal 에서 등록했던 Application
의 ID와 Security Key값을 바탕으로 hashing된 값으로 서비스의 유효성을 보장받기 위해 반드시 필요한 값 입니다. 이 값이 어떻게 생성되는지가
궁금하신 분들은 각 언어 폴더 별로 제공되는 소스들을 참조하시면 쉽게 이해하실 수 있습니다. ( Application ID + Timestamp tag
를 SHA256 알고리즘으로 hashing… )
</p>
        <p>
privacy-url 과 channel-url은 이미 앞서 설명 드렸고, 
<br />
우리가 흥미롭게 살펴봐야 할 것은 token-url 값에 지정된 파일입니다.
</p>
        <p>
token-url 이 무엇이냐? 제가 앞서서도 다시 한번 살펴 보겠노라 말씀 드렸던 부분이 바로 여기입니다. 
<br />
token 이란 현재 사용자가 로그인 했는지 여부를 확인해 주기 위한 일종의 티켓과 같습니다. 
<br />
놀이 동산 들어가실 때 손목에 띠 채워 주는 것. 클럽 들어가실 때 손목에 큼지막한 도장 찍어 주는 것 뭐 이런 것들이 일종의 티켓 되겠지요.
</p>
        <p>
아래 보시는 내용은 우리가 인증을 마치고 Default.aspx 로 돌아왔을 때의 Request Header의 내용입니다.
</p>
        <table border="1" cellspacing="0" cellpadding="2" width="400">
          <tbody>
            <tr>
              <td valign="top" width="400">
                <p>
                  <font size="1">GET /FirstWebToolkit/Default.aspx HTTP/1.1 
<br />
Accept: */* 
<br />
Accept-Language: ko-KR 
<br />
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2;
.NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2;
MS-RTC LM 8; Tablet PC 2.0; Zune 3.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0;
.NET CLR 4.0.20506) 
<br />
Accept-Encoding: gzip, deflate 
<br />
Connection: Keep-Alive 
<br />
Host: www.wltoolkit.com 
<br />
Pragma: no-cache 
<br />
Cookie: <strong><font color="#ff0000" size="2">msgr-consent-token</font></strong>=eact%3DB4D%252BMpQ64igwHH%252Fgxb6tQ8qViFQYj5Sox%252BZcAztw6hCXDomPpK3HFq2A5uOYNZBqsDj9BZS3NRDIEXCuFM7bUs6TwCe5BITYKig21KeexvKZQi1tbPVIrI1xqegMHl9oOF0V%252BQhA3yC4gwNknEFtWJf6fV9OnRAZyBgdRLwSU%252FpJlrgU5rT3SFQd5CkkV%252BXRVRmLQHCxarUl48DqfxNkRXtnf9oJUNwb%252BL%252FBZxbI97dGuyG%252BVhtwsVWCGFw5QcPqwCVaHhootaEwjsdvbMDiYTjiv9LM651ZleNgxfG2RBV2wtTdubOst2LqcfKQn%252BAZPqrHSNF2ccPdjbf3seN6Cdfmc4OG1Ny0U690Ndrd3fkTH2Cdm2E5syL3ypkVMfRG2ZJ58zWYOPFLG%252Fmjl7qiUuYzHzzBwPAehQ2X0UTkwZ7ywVM%252BAEodAnuzUlAWphLOwWVGJVzZ63Rg34CQulFbCDV1hc2CgXpukK3ubOVXrXad8MMYUdmYOum8nChgIZejNmZhQaVOeY%252Be2g58LacCLXVEfZEoYYfny42J%252BskjRLtaYQkMzZat%252BHmDs1W0ntynbUKH1gxT8KEon7F9ou0S7Qvx0xUU56zLgdgiISE9CF0E61VXUijvZgF3cjvu1e1w1K3ij72iikwoui5Rd34DzNpA%252BgrJXAil9qrfXQjWI1nmqQ9fQbFv%252BJRHloKSLPyFrgvEZbaFuZ8%252FBC47FLvGWCZlCO9bzKh4BqJxWUtdnwI5h2mHs%252FrJ8T3RZ0W7fZ79Jxqhqq6RC8s5zzGKc23UoEXR%252FtrsZHaUqLaNs9qFY9iF1B%252FBJcj6rE8yGDuUQn8pRnxN5IRMx%252F%252FRAacQNENwjjgKbaHk%252BxwoayrA%252FqrWh9SjS9JZYCU1z1r%252FkIFeIIhqG5d0izUsF9sbbFx%252BXwDL8Q2lsGnaMGfBeHylx2Q51%252B%252FframzH1pX%252BtwQffqmiLuTphIvv2bfQpsLqXJ7Hm3rpkxkIqzwWWQQlLgsv%252FG3ecZvmVoSBuP4%252FbcU%252BTWps19CQeks51V2k56uyXzoHBU7IMfpEwfu2nCTnYUbvXWhWEoo5qnCuzXaqJowcWRmQpfP2tjLHT0vG0EwflO5qLHGy0sB2Y6agu7lkxXqHeLIRvG5wq9ifTk%252BcjJNP%252B0FoDQTED3CeuX3LHnBZ1eM%252BUhQ7%252FL%252FKfEcThnelsRKosHHn0bb%252BtjGSA%252Fwfv%252FUI%252B7wFcULowsep58ijbtUooDz0N9CsVRTgcwC2E9yD0d3M6rADe4%253D; <font color="#ff0000" size="2"><strong>msgr-delegation-token</strong></font>=EwCoARAnAAAUWkziSC7RbDJKS1VkhugDegv7L0eAAOLW3dYlVfvVGleoVqojHl4s6F0u5CfDec3KyATZtM%2BBMtIbFiTcIZF7UFOlwRQKSqIP26Tx9YS6xRbXwbnhQmtxxrX3dpqy2NAajF8%2FIdmTJE2CVQaFidDhIMMHRIrulhmDWtOTYFw6bJxKfF9D6TSFoBDMIZvqJ5Xgg%2FJDRKSlA2YAAAj%2BOy4jki13iPgA1CK%2B0740%2FUleHLq%2FdyLKoQ4PgpGxRP%2Fft7QLEbpL8pM%2BoJQEdOfN%2FB%2BcmhKPafUwDk6nO4Qj4KPUvkbL1FHCOVJ4Yx8zjKPN58QEUTtdkIAkd%2Bi%2BIRhl0iJv6v5op2cg2Mb6BxgHuM1tRvaQ41inNt%2FzQlBCjP0gRsHK%2BH%2FGPgCIs%2BVzTspi6T3Nec425DdqvwchzIdz79wkCpnV5SW17lqdML129kma3EK3vnC%2FaLe0ww3i9wjz171tgwT%2Fowk1u%2FFdJWfnDv1nnMOBQ%2FmMqPE8ArjbtRJU3fMrz%2Blza6KGgcT0AFmIW64hR3pbVmYMq4zOfJnwt5MAAA%3D%3D</font>
                </p>
              </td>
            </tr>
          </tbody>
        </table>
        <p>
이 두 개의 값이 Coolkie에 저장되어 있기 때문에 우리가 Cross-page Navigation을 하더라도 Chat Session을 그대로 유지할
수 있게 되는 이유 입니다. 
<br />
그렇다면 msgr-consent-token과 msgr-delegation-token은 각각 무슨 역할을 하고 있을까요?
</p>
        <p>
하나의 글에서 너무 많은 내용을 다루면 지루하다라는 피드백을 받아서. 
<br />
일단 여기서 끊고, 다음 차례에서는 윈도우 라이브 메신저 웹 툴 킷의 인증 방식에 대해서 설명을 하도록 하겠습니다. 
<br /><br />
간단한 2,3회로 설명이 끝날 줄 알았는데 해야 할 말이 점점 많아 집니다. 
<br /><br />
윈도우 라이브 메신저 웹 툴킷의 인증 방식에 대한 이해는 앞으로 윈도우 라이브 서비스들의 인증에 대한 이해에도 많은 도움을 주게 됩니다.
</p>
        <p>
다음 글에 앞서 제가 예전에 포스팅 했었던 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2f2009%2f02%2f12%2fMaking%2bThe%2bInternet%2bA%2bSafer%2bPlace.aspx" target="_blank">Making
the Internet a Safer Place</a> 를 읽어 주십사 권해 드립니다.
</p>
        <p>
계속 관심 가져 주시길…
</p>
        <img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a" />
      </body>
      <title>Windows Live Messenger Web Toolkit - Part3</title>
      <guid isPermaLink="false">http://www.mhvb.net/funnyfox/PermaLink,guid,c238c07c-1b20-4d65-bda6-18b5cb2aa37a.aspx</guid>
      <link>http://feedproxy.google.com/~r/Dongbum/~3/ZLD7guVd-uc/Windows+Live+Messenger+Web+Toolkit+Part3.aspx</link>
      <pubDate>Tue, 09 Jun 2009 08:40:10 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;&lt;em&gt;윈도우 라이브 메신저 웹 툴킷 – 라이브 메신저의 모든 것을 웹에서&lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;em&gt;&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fintro_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 20px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="intro" border="0" alt="intro" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/intro_thumb.png" width="260" height="202" /&gt;&lt;/a&gt; &lt;/em&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
두 개의 포스팅을 통하여 간단히 라이브 메신저 웹 툴킷 UI 컨트롤들 중 Web Bar 를 웹 페이지에 호스팅 해 보았습니다.
&lt;/p&gt;
&lt;p&gt;
이제는 보다 자세히 윈도우 라이브 메신저 웹 툴킷의 구성에 대해 살펴 봅니다.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;Windows Live Messenger Web Toolkit의 구성&lt;/u&gt;&lt;/strong&gt;&amp;#160;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1. HTML UI Control&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
앞서 설명한 바와 같이 윈도우 라이브 메신저 웹 툴킷은 모든 기능들이 모두 구현되어 있는 Web Bar 컨트롤에서부터 메신저를 구성하기 위해 요구되는
다양한 기능들을 모두 컨트롤화 하여 각 시나리오에 맞춰 사용할 수 있는 다양한 UI 컨트롤을 제공합니다. 이것들을 모두 통틀어 HTML UI 컨트롤
이라고 합니다.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2. Windows Live Messenger Library&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
윈도우 라이브 메신저 라이브러리는 자바스크립트로 구성되어 있는 스크립트 라이브러리로써 UI 는 별도 제공되지 않으며, 모든 기능들이 스크립트 객체와
객체들 간의 이벤트들을 통해 개발자들이 직접 메신저를 구현할 수 있도록 해 줍니다.
&lt;/p&gt;
&lt;p&gt;
DHTML 기반이건(Ajax) Silverlight 건 Flash 이건 간에 JavaScript를 호스팅 할 수 있는 모든 곳에서 사용이 가능합니다.
앞서 소개한 HTML UI Control의 모든 기능들은 윈도우 라이브 메신저 라이브러리를 사용하고 있습니다.
&lt;/p&gt;
&lt;p&gt;
그러므로 HTML UI Control의 모든 이벤트들과 객체모델들을 스크립트 라이브러리들과 공유할 수 있습니다.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3. Windows Live IM Control&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
제 블로그 옆에 보이는 웹 메신저 창이 바로 Windows Live IM Control 입니다. 
&lt;br /&gt;
메신저 창의 기능이 오직 특정 사용자와의 대화로 제한됨을 확인 하실 수 있습니다. 
&lt;br /&gt;
이 경우 메신저 창을 통해서는 저하고만 대화 하실 수 있죠. 
&lt;br /&gt;
온라인 상점 혹은 온라인 오픈 마켓 등에서 특정 판매자 와 웹 상에서 대화를 할 수 있도록 해 주는 기능 등을 제공해 줄 때 유용합니다. [&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.ec21.com%2fcompanies%2fyest.html"&gt;구현
예제 참조 : EC 21 (온라인 B2B 사이트)&lt;/a&gt;]
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;4. Windows Live Presence API&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
단순히 특정 사용자의 온라인 유무를 나타내기 위해 제공되는 API 입니다. 요청에 따라 JSON Format 의 데이터 혹은 Image 형식(온라인/
오프라인 아이콘)의 서비스가 제공됩니다.
&lt;/p&gt;
&lt;p&gt;
이러한 4가지 라이브러리가 바로 Windows Live Messenger Web Toolkit 의 구성 요소들 입니다.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fArchitecture_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Architecture" border="0" alt="Architecture" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/Architecture_thumb.png" width="504" height="345" /&gt;&lt;/a&gt;&amp;#160; 
&lt;br /&gt;
[Windows Live Messenger Web Toolkit의 구성]
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;&lt;u&gt;다시 HTML UI Control 살피기&lt;/u&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
윈도우 라이브 메신저 웹 툴킷이 이런 기능들로 이루어 져 있구나… 라는 것을 대강 살폈으니 이제 다시 우리가 구현해 두었던 HTML UI Control
들 중 Web Bar로 되돌아 옵니다. 
&lt;br /&gt;
그리고 내부 구성 들을 하나씩 들쳐 보도록 하죠. 
&lt;/p&gt;
&lt;p&gt;
우리가 실행했었던 웹 프로젝트를 비주얼 스튜디오의 솔루션 탐색기를 통해 들여다 보면 다음과 같은 파일들이 보이실 겁니다. 
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fSource_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 20px 20px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Source" border="0" alt="Source" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/Source_thumb.png" width="325" height="353" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
각각의 파일들의 용도는 다음과 같습니다.(보이는 순서대로) 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Channel.html&lt;/strong&gt; – 메신저 서버와의 통신을 위해 사용되는 스크립트가 담겨있는 파일입니다. 
&lt;br /&gt;
Cross Domain scripting의 보안상의 문제를 우회할 수 있는 다양한 방법들이 있는데 그 중 내부적으로 iframe을 동적으로 만들어
호출하는 방식이 있습니다. 
&lt;br /&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt; Web
Messenger Library에서는 이 방식을 통하여 Cross Domain 문제를 해결하고 있습니다.&amp;#160; 
&lt;br /&gt;
이 기법에 대해 보다 자세히 알고 싶으시다면 소개해 드리는 링크를 참조하시기 바랍니다. 
&lt;br /&gt;
내용을 한번 정독해 보시는 것도 많은 도움이 될 것이라 생각합니다. 
&lt;br /&gt;
[ &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fmsdn.microsoft.com%2fen-us%2flibrary%2fbb735305.aspx" target="_blank"&gt;The
Architecture Journal - Secure Cross-Domain Communication in the Browser&lt;/a&gt; ] 
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;
Default.aspx – Web Messenger Control UI 를 호스팅 하고 있는 페이지이죠. 각 파일들에 대한 설명을 마치고 다시 살펴
봅니다. 
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;
Privacy.html – Login 창에서 Privacy 정책과 관련한 안내 문구가 담긴 페이지입니다. 서비스 시에는 정식 문구가 쓰여져야 하겠지만
현재로써는 별 내용 없는 Dummy 페이지에 불과합니다. (&lt;strong&gt;&lt;u&gt;하지만 반드시 필요한 파일입니다!&lt;/u&gt;&lt;/strong&gt;) 
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;
RefreshMessengerToken.aspx – Windows Live ID Delegated(위임인증) 을 통하여 사용자의 인증 토큰과 메신저
사용을 위한 인증 토큰을 쿠키에 넣어 관리하기 위해 필요한 파일입니다. 별도로 토큰을 관리할 목적이 아니라면 그냥 사용해도 무방한 파일입니다. 이
부분 역시 좀 더 자세히 알아 볼 때 다시한번 살펴볼 파일입니다. 
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;
web.config – 우리가 메신저를 호스팅 하기위해 필요한 Application ID와 Security Key에 대한 정보를 저장해 둔 환경설정
파일입니다. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
통신을 위한 체널 파일, 인증 쿠키를 관리할 RefreshToken 파일과 Privacy 정보가 담긴 파일 이렇게 3개의 파일들이 준비되어 있으면
기본적으로 메신저 서비스를 호스팅 할 수 있는 기본적인 요구사항들을 갖췄다 생각하시면 됩니다. 
&lt;br /&gt;
&lt;br /&gt;
앞으로 살펴보게 될 모든 컨트롤들 역시 위에서 설명 드리는 이 파일들이 기본적으로 준비되어 있다는 가정하에서 구현이 시작됩니다.&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fHTMLControls_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="HTMLControls" border="0" alt="HTMLControls" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/HTMLControls_thumb.png" width="644" height="135" /&gt;&lt;/a&gt;&amp;#160; 
&lt;br /&gt;
[시나리오에 따른 각각의 16개의 HTML UI Control들]
&lt;/p&gt;
&lt;p&gt;
위의 그림은 16개의 HTML Control들을 각각의 시나리오 별로 나누어 구분 지어놓은 그림입니다. 이것들을 표로 정리하자면 다음과 같습니다. 
&lt;br /&gt;
&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="2" width="738"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
구분&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
&lt;p align="center"&gt;
컨트롤 이름
&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;p align="center"&gt;
설명
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
Profile&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Profile&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fprofileControl_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="profileControl" border="0" alt="profileControl" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/profileControl_thumb.png" width="207" height="69" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
Presence&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Displan Name&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fdisplayname_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="displayname" border="0" alt="displayname" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/displayname_thumb.png" width="78" height="23" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="149"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Display Picture&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fdisplaypicture_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="displaypicture" border="0" alt="displaypicture" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/displaypicture_thumb.png" width="71" height="63" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Presence Status&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fstatus2_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="status2" border="0" alt="status2" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/status2_thumb.png" width="167" height="156" /&gt;&lt;/a&gt; &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fstatus1_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="status1" border="0" alt="status1" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/status1_thumb_1.png" width="90" height="27" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Personal Message&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fpersonalmessage_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="personalmessage" border="0" alt="personalmessage" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/personalmessage_thumb.png" width="101" height="24" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
Contacts&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Add Contact&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2faddContact_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="addContact" border="0" alt="addContact" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/addContact_thumb.png" width="244" height="193" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Contact List&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fcontactList_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="contactList" border="0" alt="contactList" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/contactList_thumb.png" width="244" height="119" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Contact Picker&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fContactPicker_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ContactPicker" border="0" alt="ContactPicker" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/ContactPicker_thumb.png" width="243" height="244" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Application Contacts&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
특정 사용자에게 자신이 등록하지 않은 사용자에 대한 로그인 여부 상태를 알 수 있도록 합니다.(Invisible)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
Chat&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Conversation&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fConversation_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Conversation" border="0" alt="Conversation" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/Conversation_thumb.png" width="243" height="244" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Converstation List&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:7ea1c32f-1d6e-4004-bd5f-6d806ff825cc" class="wlWriterEditableSmartContent"&gt;
&lt;div id="fe4b0129-0525-4dd6-a51f-de30117492ca" style="margin: 0px; padding: 0px; display: inline;"&gt;
&lt;div&gt;&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.youtube.com%2fwatch%3fv%3dxhrdt2J7uu8" target="_new"&gt;&lt;img src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/video284edb9668c7.jpg" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('fe4b0129-0525-4dd6-a51f-de30117492ca'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/xhrdt2J7uu8&amp;amp;hl=en\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/xhrdt2J7uu8&amp;amp;hl=en\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;425\&amp;quot; height=\&amp;quot;355\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
WebBar&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Messenger Web Bar&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fWebBar_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="WebBar" border="0" alt="WebBar" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/WebBar_thumb.png" width="421" height="167" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
IF&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
특정 조건을 만족할 때 컨트롤을 보일 수 있도록 해 주는 Block (Invisible) – 예를 들어 로그인 했을 때 보일 것과 로그오프인 경우
각기 다른 UI를 보이고자 할 때 유용합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Else&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
위의 IF 컨트롤과 함께 사용되며 IF 조건에 만족하지 않은 조건 Block의 UI를 보이고자 할 때 사용됩니다. (Invisible)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Messener Application&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
Windows Live Messenger UI 컨트롤들에 대한 초기화를 위해 반드시 필요한 컨트롤입니다. 다른 컨트롤들을 사용하기 위해서는 반드시
사전에 추가되어야 할 컨트롤입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top" width="150"&gt;
&amp;#160;&lt;/td&gt;
&lt;td valign="top" width="218"&gt;
Sign In&lt;/td&gt;
&lt;td valign="top" width="369"&gt;
&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_12BB2%2fSignin_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Signin" border="0" alt="Signin" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_12BB2/Signin_thumb.png" width="185" height="64" /&gt;&lt;/a&gt; 
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
16개의 컨트롤들을 잘 조합해 주면 메신저 뿐만 아니라 간단히 Social 한 기능들을 여러분들의 웹 사이트에 추가해 줄 수 있습니다. 
&lt;br /&gt;
&lt;br /&gt;
그러면 이제 앞서 실행했던 Default.aspx 파일의 HTML 코드를 살펴봅니다. 
&lt;/p&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 80.79%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; height: 66px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &amp;lt;script
type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span style="color: #006080"&gt;&amp;quot;http://www.wlmessenger.net/api/3.0/loader.js&amp;quot;&lt;/span&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; &amp;lt;script
type=&lt;span style="color: #006080"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Core.Loader.load([&lt;span style="color: #006080"&gt;'messenger.ui'&lt;/span&gt;, &lt;span style="color: #006080"&gt;'messenger.ui.styles.core'&lt;/span&gt;]);&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; &amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
페이지의 서두에는 다음과 같이 자바스크립트 라이브러리의 위치를 지정하고 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.microsoft.com"&gt;Microsoft&lt;/a&gt;.Live.Core.Loader.load
메서드를 호출하는 코드를 보실 수 있습니다. 이것은 Windows Live Messenger Control UI에서 사용할 자바스크립트 라이브러리를
로딩하는 과정입니다. 
&lt;br /&gt;
기억하십니까? Windows Live Messenger Control UI들은 모두 윈도우 라이브 메신저 라이브러리의 기능들을 활용한다는 사실.
&lt;/p&gt;
&lt;p&gt;
자 조금 더 내려오시면 다음과 같은 HTML 을 확인하실 수 있습니다. 
&lt;/p&gt;
&lt;p&gt;
이 태그가 제가 설명 드렸던 UI Control들 중 Messenger Application 컨트롤 태그 입니다.
&lt;/p&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 80.89%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; height: 115px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:app&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum2"&gt; 2:&lt;/span&gt; &lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;appTag&amp;quot;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum3"&gt; 3:&lt;/span&gt; &lt;span style="color: #ff0000"&gt;application-verifier-token&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;&amp;lt;%=
ApplicationVerifier %&amp;gt;&amp;quot;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum4"&gt; 4:&lt;/span&gt; &lt;span style="color: #ff0000"&gt;privacy-url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Privacy.html&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum5"&gt; 5:&lt;/span&gt; &lt;span style="color: #ff0000"&gt;channel-url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;Channel.html&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum6"&gt; 6:&lt;/span&gt; &lt;span style="color: #ff0000"&gt;token-url&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;RefreshMessengerToken.aspx&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum7"&gt; 7:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;msgr:app&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
이게 무슨 HTML이냐~ XML 아니냐? 하시는 분들 계시겠지요? 이것을 XHTML이라고 합니다. XHTML 이 머냐? 이건 따로 공부해 주시고..(&lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fXhtml" target="_blank"&gt;그래서
뭐냐?&lt;/a&gt;) 
&lt;br /&gt;
모든 윈도우 라이브 메신저 컨트롤들은 이러한 XHTML 태그로 구성되어 있습니다. 
&lt;br /&gt;
&lt;br /&gt;
그래서 반드시 이러한 태그들에 정의에 앞서 네임스페이스 정의가 선행되어야 합니다. (제가 설명을 빼먹었죠?) 
&lt;br /&gt;
HTML 정의에 다음과 같이 네임스페이스 정의가 반드시 추가되어 있어야 합니다. 
&lt;/p&gt;
&lt;div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 80.36%; padding-right: 4px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; height: 20px; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper"&gt;
&lt;div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet"&gt;
&lt;pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #606060" id="lnum1"&gt; 1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;xmlns:msgr&lt;/span&gt;&lt;span style="color: #0000ff"&gt;=&amp;quot;http://messenger.live.com/2009/ui-tags&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Messenger Application 컨트롤 태그의 어트리뷰트들을 보면 Application-verifier-token 과 privacy-url
, channel-url 그리고 token-url 값들이 나란히 정의되어 있는 것을 볼 수 있습니다.
&lt;/p&gt;
&lt;p&gt;
Application-verifer-token 값은 제가 첫 번째 글에서 설명했던 Azure Service Portal 에서 등록했던 Application
의 ID와 Security Key값을 바탕으로 hashing된 값으로 서비스의 유효성을 보장받기 위해 반드시 필요한 값 입니다. 이 값이 어떻게 생성되는지가
궁금하신 분들은 각 언어 폴더 별로 제공되는 소스들을 참조하시면 쉽게 이해하실 수 있습니다. ( Application ID + Timestamp tag
를 SHA256 알고리즘으로 hashing… )
&lt;/p&gt;
&lt;p&gt;
privacy-url 과 channel-url은 이미 앞서 설명 드렸고, 
&lt;br /&gt;
우리가 흥미롭게 살펴봐야 할 것은 token-url 값에 지정된 파일입니다.
&lt;/p&gt;
&lt;p&gt;
token-url 이 무엇이냐? 제가 앞서서도 다시 한번 살펴 보겠노라 말씀 드렸던 부분이 바로 여기입니다. 
&lt;br /&gt;
token 이란 현재 사용자가 로그인 했는지 여부를 확인해 주기 위한 일종의 티켓과 같습니다. 
&lt;br /&gt;
놀이 동산 들어가실 때 손목에 띠 채워 주는 것. 클럽 들어가실 때 손목에 큼지막한 도장 찍어 주는 것 뭐 이런 것들이 일종의 티켓 되겠지요.
&lt;/p&gt;
&lt;p&gt;
아래 보시는 내용은 우리가 인증을 마치고 Default.aspx 로 돌아왔을 때의 Request Header의 내용입니다.
&lt;/p&gt;
&lt;table border="1" cellspacing="0" cellpadding="2" width="400"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" width="400"&gt;
&lt;p&gt;
&lt;font size="1"&gt;GET /FirstWebToolkit/Default.aspx HTTP/1.1 
&lt;br /&gt;
Accept: */* 
&lt;br /&gt;
Accept-Language: ko-KR 
&lt;br /&gt;
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2;
.NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2;
MS-RTC LM 8; Tablet PC 2.0; Zune 3.0; OfficeLiveConnector.1.3; OfficeLivePatch.0.0;
.NET CLR 4.0.20506) 
&lt;br /&gt;
Accept-Encoding: gzip, deflate 
&lt;br /&gt;
Connection: Keep-Alive 
&lt;br /&gt;
Host: www.wltoolkit.com 
&lt;br /&gt;
Pragma: no-cache 
&lt;br /&gt;
Cookie: &lt;strong&gt;&lt;font color="#ff0000" size="2"&gt;msgr-consent-token&lt;/font&gt;&lt;/strong&gt;=eact%3DB4D%252BMpQ64igwHH%252Fgxb6tQ8qViFQYj5Sox%252BZcAztw6hCXDomPpK3HFq2A5uOYNZBqsDj9BZS3NRDIEXCuFM7bUs6TwCe5BITYKig21KeexvKZQi1tbPVIrI1xqegMHl9oOF0V%252BQhA3yC4gwNknEFtWJf6fV9OnRAZyBgdRLwSU%252FpJlrgU5rT3SFQd5CkkV%252BXRVRmLQHCxarUl48DqfxNkRXtnf9oJUNwb%252BL%252FBZxbI97dGuyG%252BVhtwsVWCGFw5QcPqwCVaHhootaEwjsdvbMDiYTjiv9LM651ZleNgxfG2RBV2wtTdubOst2LqcfKQn%252BAZPqrHSNF2ccPdjbf3seN6Cdfmc4OG1Ny0U690Ndrd3fkTH2Cdm2E5syL3ypkVMfRG2ZJ58zWYOPFLG%252Fmjl7qiUuYzHzzBwPAehQ2X0UTkwZ7ywVM%252BAEodAnuzUlAWphLOwWVGJVzZ63Rg34CQulFbCDV1hc2CgXpukK3ubOVXrXad8MMYUdmYOum8nChgIZejNmZhQaVOeY%252Be2g58LacCLXVEfZEoYYfny42J%252BskjRLtaYQkMzZat%252BHmDs1W0ntynbUKH1gxT8KEon7F9ou0S7Qvx0xUU56zLgdgiISE9CF0E61VXUijvZgF3cjvu1e1w1K3ij72iikwoui5Rd34DzNpA%252BgrJXAil9qrfXQjWI1nmqQ9fQbFv%252BJRHloKSLPyFrgvEZbaFuZ8%252FBC47FLvGWCZlCO9bzKh4BqJxWUtdnwI5h2mHs%252FrJ8T3RZ0W7fZ79Jxqhqq6RC8s5zzGKc23UoEXR%252FtrsZHaUqLaNs9qFY9iF1B%252FBJcj6rE8yGDuUQn8pRnxN5IRMx%252F%252FRAacQNENwjjgKbaHk%252BxwoayrA%252FqrWh9SjS9JZYCU1z1r%252FkIFeIIhqG5d0izUsF9sbbFx%252BXwDL8Q2lsGnaMGfBeHylx2Q51%252B%252FframzH1pX%252BtwQffqmiLuTphIvv2bfQpsLqXJ7Hm3rpkxkIqzwWWQQlLgsv%252FG3ecZvmVoSBuP4%252FbcU%252BTWps19CQeks51V2k56uyXzoHBU7IMfpEwfu2nCTnYUbvXWhWEoo5qnCuzXaqJowcWRmQpfP2tjLHT0vG0EwflO5qLHGy0sB2Y6agu7lkxXqHeLIRvG5wq9ifTk%252BcjJNP%252B0FoDQTED3CeuX3LHnBZ1eM%252BUhQ7%252FL%252FKfEcThnelsRKosHHn0bb%252BtjGSA%252Fwfv%252FUI%252B7wFcULowsep58ijbtUooDz0N9CsVRTgcwC2E9yD0d3M6rADe4%253D; &lt;font color="#ff0000" size="2"&gt;&lt;strong&gt;msgr-delegation-token&lt;/strong&gt;&lt;/font&gt;=EwCoARAnAAAUWkziSC7RbDJKS1VkhugDegv7L0eAAOLW3dYlVfvVGleoVqojHl4s6F0u5CfDec3KyATZtM%2BBMtIbFiTcIZF7UFOlwRQKSqIP26Tx9YS6xRbXwbnhQmtxxrX3dpqy2NAajF8%2FIdmTJE2CVQaFidDhIMMHRIrulhmDWtOTYFw6bJxKfF9D6TSFoBDMIZvqJ5Xgg%2FJDRKSlA2YAAAj%2BOy4jki13iPgA1CK%2B0740%2FUleHLq%2FdyLKoQ4PgpGxRP%2Fft7QLEbpL8pM%2BoJQEdOfN%2FB%2BcmhKPafUwDk6nO4Qj4KPUvkbL1FHCOVJ4Yx8zjKPN58QEUTtdkIAkd%2Bi%2BIRhl0iJv6v5op2cg2Mb6BxgHuM1tRvaQ41inNt%2FzQlBCjP0gRsHK%2BH%2FGPgCIs%2BVzTspi6T3Nec425DdqvwchzIdz79wkCpnV5SW17lqdML129kma3EK3vnC%2FaLe0ww3i9wjz171tgwT%2Fowk1u%2FFdJWfnDv1nnMOBQ%2FmMqPE8ArjbtRJU3fMrz%2Blza6KGgcT0AFmIW64hR3pbVmYMq4zOfJnwt5MAAA%3D%3D&lt;/font&gt;
&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
이 두 개의 값이 Coolkie에 저장되어 있기 때문에 우리가 Cross-page Navigation을 하더라도 Chat Session을 그대로 유지할
수 있게 되는 이유 입니다. 
&lt;br /&gt;
그렇다면 msgr-consent-token과 msgr-delegation-token은 각각 무슨 역할을 하고 있을까요?
&lt;/p&gt;
&lt;p&gt;
하나의 글에서 너무 많은 내용을 다루면 지루하다라는 피드백을 받아서. 
&lt;br /&gt;
일단 여기서 끊고, 다음 차례에서는 윈도우 라이브 메신저 웹 툴 킷의 인증 방식에 대해서 설명을 하도록 하겠습니다. 
&lt;br /&gt;
&lt;br /&gt;
간단한 2,3회로 설명이 끝날 줄 알았는데 해야 할 말이 점점 많아 집니다. 
&lt;br /&gt;
&lt;br /&gt;
윈도우 라이브 메신저 웹 툴킷의 인증 방식에 대한 이해는 앞으로 윈도우 라이브 서비스들의 인증에 대한 이해에도 많은 도움을 주게 됩니다.
&lt;/p&gt;
&lt;p&gt;
다음 글에 앞서 제가 예전에 포스팅 했었던 &lt;a href="http://www.mhvb.net/funnyfox/ct.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a&amp;amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2f2009%2f02%2f12%2fMaking%2bThe%2bInternet%2bA%2bSafer%2bPlace.aspx" target="_blank"&gt;Making
the Internet a Safer Place&lt;/a&gt; 를 읽어 주십사 권해 드립니다.
&lt;/p&gt;
&lt;p&gt;
계속 관심 가져 주시길…
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.mhvb.net/funnyfox/aggbug.ashx?id=c238c07c-1b20-4d65-bda6-18b5cb2aa37a" /&gt;</description>
      <comments>http://www.mhvb.net/funnyfox/CommentView,guid,c238c07c-1b20-4d65-bda6-18b5cb2aa37a.aspx</comments>
      <category>.net</category>
      <category>Live messenger</category>
      <category>Live Service</category>
      <category>Windows Live</category>
      <category>Windows Live Messenger</category>
      <category>Windows Live Messenger Web Toolkit</category>
      <category>라이브 메신저</category>
      <category>윈도우 라이브</category>
      <category>윈도우 라이브 메신저 웹 툴킷</category>
    <feedburner:origLink>http://www.mhvb.net/funnyfox/2009/06/09/Windows+Live+Messenger+Web+Toolkit+Part3.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://www.mhvb.net/funnyfox/Trackback.aspx?guid=b9943248-45f9-44c4-a58a-925d682855b2</trackback:ping>
      <pingback:server>http://www.mhvb.net/funnyfox/pingback.aspx</pingback:server>
      <pingback:target>http://www.mhvb.net/funnyfox/PermaLink,guid,b9943248-45f9-44c4-a58a-925d682855b2.aspx</pingback:target>
      <dc:creator>이동범</dc:creator>
      <georss:point>37.572312 126.958158</georss:point>
      <wfw:comment>http://www.mhvb.net/funnyfox/CommentView,guid,b9943248-45f9-44c4-a58a-925d682855b2.aspx</wfw:comment>
      <wfw:commentRss>http://www.mhvb.net/funnyfox/SyndicationService.asmx/GetEntryCommentsRss?guid=b9943248-45f9-44c4-a58a-925d682855b2</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>
            <em>윈도우 라이브 메신저 웹 툴킷 – 라이브 메신저의 모든 것을 웹에서</em>
          </strong>
        </p>
        <p>
          <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b9943248-45f9-44c4-a58a-925d682855b2&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_CD75%2flogo_messenger_2.jpg">
            <img style="border-right-width: 0px; margin: 0px 20px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="logo_messenger" border="0" alt="logo_messenger" align="left" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_CD75/logo_messenger_thumb.jpg" width="148" height="145" />
          </a>
        </p>
        <p>
첫 번째 글 에서는 Live Web Messenger 호스팅을 위한 기본적인 설정과 사이트 등록 과정을 설명 드렸습니다. 
<br /><br />
이번 글 에서는 이제 프로젝트를 생성하여 간단한 Live Web Messenger Web Bar를 호스팅 해 봅니다. 
<br /><br />
본 글의 예제에서는 Visual Studio 를 통해 진행됩니다만, 대부분의 과정이 JavaScript 를 통해 이루어 지므로 다른 언어를 사용하는
개발자들도 쉽게 적용하실 수 있습니다. 
<br /><br />
이제 본격적으로 Live Web Messenger 를 우리의 웹 어플리케이션에 호스팅해 봅시다.
</p>
        <p>
지난 글에서 제가 예제 파일을 다운로드 하십사 말씀 드린 파일 가지고 계시죠? 없어요? [<a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b9943248-45f9-44c4-a58a-925d682855b2&amp;url=http%3a%2f%2fmessenger.mslivelabs.com%2fsamples.zip">다운로드</a>]
</p>
        <p>
          <u>
            <strong>1. 소스 파일 준비하기</strong>
          </u>
        </p>
        <p>
압축되어 있는 파일을 열어보시면 GettingStarted 폴더 아래에 총 7개의 언어 이름으로 된 폴더가 보입니다. 
<br /><a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b9943248-45f9-44c4-a58a-925d682855b2&amp;url=http%3a%2f%2fwww.mhvb.net%2ffunnyfox%2fcontent%2fbinary%2fWindowsLiveWriter%2fWindowsLiveMessengerWebToolkitPart2_CD75%2fFolder_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Folder" border="0" alt="Folder" src="http://www.mhvb.net/funnyfox/content/binary/WindowsLiveWriter/WindowsLiveMessengerWebToolkitPart2_CD75/Folder_thumb.png" width="644" height="388" /></a>  
<br /></p>
        <p>
폴더 이름을 보시면 예상 하셨다시피 Windows Live Messenger Web Toolkit은 <a href="http://www.mhvb.net/funnyfox/ct.ashx?id=b9943248-45f9-44c4-a58a-925d682855b2&amp;url=http%3a%2f%2fwww.microsoft.com">Microsoft</a> 기반
기술들만을 위해 제공되는 것이 아닙니다. 
<br />
어떤 웹 개발 언어건 가리지 않고 툴킷을 사용하실 수 있습니다.
</p>
        <p>
각자 자신의 입맛에 맞는 폴더 내의 소스 파일들을 적절한 위치에 압축을 풀어 준비합니다.  저는 FirstWebToolkit 이라는 폴더를
만들어 이 곳에 소스 파일들을 풀어 놓았습니다.
</p>
        <p>
          <u>
            <strong>2. 가상디렉토리 설정하기</strong>
  