[Áöµð³ÝÄÚ¸®¾Æ]Áö³ ±Û¿¡¼ ¿ì¸®´Â Ç÷¡½ÃÀÇ Åë½Å ¹æ¹ý¿¡ ´ëÇØ »ìÆìºÃ´Ù. Áö³ ±Û¿¡ »ìÆìº» Åë½Å ¹æ¹ý ¿Ü¿¡ Áß¿äÇÑ Åë½Å ¹æ¹ýÀÌ Àִµ¥ ¹Ù·Î XMLÀÌ´Ù. XML¿¡ ´ëÇÑ Á߿伺Àº ´õ ¾ê±âÇÒ Çʿ䰡 ¾øÀ» °ÍÀÌ´Ù. ´õ±¸³ª ´ÙÀ½°ú °°Àº Ç÷¡½ÃÀÇ ÀÌÁ¡°ú ÇÔ²² XMLÀÇ À¯¿¬¼ºÀ» ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ´Ù¸é, ±Ý»ó÷ȶó°í ÇØ¾ß ÇÒ °ÍÀÌ´Ù.
¡ß ¸®Ä¡ ÀÎÅÍ³Ý ¾ÖÇø®ÄÉÀ̼ÇÀ» ±¸Çö
¡ß µ¿Àû ¾÷µ¥ÀÌÆ®
¡ß ¹é±×¶ó¿î ´Ù¿î·Îµå, Æ®·¡ÇÈ °¨¼Ò
XML ÀÚü°¡ ¸¹Àº À̽´¸¦ °¡Áö°í ÀÖÁö¸¸, °¡Àå Áß¿äÇÑ ºÎºÐÀº ¹°·Ð XML À¥ ¼ºñ½º(SOAP)ÀÌ´Ù. ¸¹Àº Åë½Å ±Ô¾àµéµµ XML·Î ¸¸µé¾îÁö°í ÀÖ´Ù. ¿¹¸¦ µé¾î, ¿ÀÇ ¼Ò½º ¸Þ½ÅÀúÀÎ Jabber °°Àº °æ¿ì°¡ ±×·¸°í, B2B¿Í EAI µîÀÇ À̽´¿Í ÇÔ²² Ç×»ó ºüÁöÁö ¾Ê°í µîÀåÇÏ´Â °Ô ¹Ù·Î XMLÀÌ´Ù. ÀÌÁ¦ Ç÷¡½Ã°¡ Áö¿øÇÏ´Â XML°ú ASP.NETÀÇ À¥ ¼ºñ½º µîÀÌ ¾î¶»°Ô ¼·Î ¿¬µ¿µÉ ¼ö ÀÖ´ÂÁö ±× ³ÐÀº °¡´É¼ºÀ» ÇϳªÇϳª ¤¾î º¸ÀÚ(ÀÌ ±Û¿¡¼´Â Ç÷¡½ÃÀÇ È¸é Ãâ·Â ¹æ¹ýÀ̳ª ¾Ö´Ï¸ÞÀÌ¼Ç µî¿¡ ´ëÇØ¼´Â ¼³¸íÇÏÁö ¾Ê´Â´Ù).
Ç÷¡½Ã 5 ÀÌ»óÀÇ ¹öÀü¿¡¼ µÎµå·¯Áø º¯È Áß Çϳª°¡ ¹Ù·Î XML¿¡ ´ëÇÑ Áö¿ø ±â´ÉÀÌ´Ù. Ç÷¡½Ã´Â ±âº»ÀûÀ¸·Î XML ¹®¼¸¦ ÆÄ½ÌÇϰí, DOMÀ» ´Ù·ç±â À§ÇÑ ´Ù¾çÇÑ ±â´ÉµéÀ» Á¦°øÇÑ´Ù. XML ¹®¼ ±¸Á¶¸¦ ¸¸µé°Å³ª XMLÀ» Àоî¿Í¼ DOMÀ¸·Î ±¸¼ºÇϰųª ³»ºÎ¿¡¼ DOMÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù. ´Ù¸¸, XPath¿Í °°Àº ±â´ÉÀÌ ¾ø¾î XML ³»¿ëÀ» ÂüÁ¶Çϱâ À§ÇØ hasChildNodes(), firstChild, nextSibling µîÀ» ¹Ýº¹ÀûÀ¸·Î »ç¿ëÇØ¾ß ÇÑ´Ù´Â Á¡ÀÌ ¾Æ½±Áö¸¸, Ç÷¡½Ã ¾ÖÇø®ÄÉÀ̼ǿ¡¼ ÇÊ¿äÇÑ XML°ú XML À¥ ¼ºñ½º °ü·Ã ±â´ÉÀ» ´ëºÎºÐ Á¦°øÇϰí ÀÖ´Ù. XMLÀ» »ç¿ëÇϱâ À§Çؼ´Â ´ÙÀ½°ú °°ÀÌ XML Ŭ·¡½º¸¦ ÀÌ¿ëÇØ ÀνºÅϽº¸¦ ¸¸µç´Ù.
xmldoc = new XML(); // XML °´Ã¼ »ý¼º
ȤÀº, ´ÙÀ½°ú °°ÀÌ XML¸¦ »ý¼ºÀÚ¿¡ Á÷Á¢ ÁöÁ¤ÇÒ ¼öµµ ÀÖ´Ù.
xmldoc = new XML("<book><title>¾î¶»°Ô ¹®Á¦¸¦ Ç® °ÍÀΰ¡</title></book>");
ÇÏÁö¸¸, ¹®ÀÚ ¹è¿À» »ç¿ëÇÏ´Â °ÍÀÌ ÈξÀ °£ÆíÇϱ⠶§¹®¿¡ ÀÌ·¸°Ô ³»ºÎ¿¡¼ DOMÀ» »ý¼ºÇÏ´Â °æ¿ìº¸´Ù´Â ¿ÜºÎ¿¡¼ XML ¹®¼¸¦ ÀÐ¾î¼ Ã³¸®ÇÏ´Â °æ¿ì°¡ ÈξÀ ¸¹´Ù. Ç÷¡½Ã¿¡¼ XML Á¶ÀÛ°ú °ü·ÃÇØ ÀÚÁÖ »ç¿ëÇÏ´Â ¸Þ½îµå¸¦ Á¤¸®Çϸé <Ç¥ 1>°ú °°´Ù.
| |
| | getByteLoaded() | ·ÎµùµÈ XML ¹®¼ÀÇ Å©±â¸¦ ¾ò´Â´Ù. | | hasChildNodes() | ÀÚ½Ä ³ëµå°¡ ÀÖ´ÂÁö È®ÀÎÇÑ´Ù. | | load() | XML ¹®¼¸¦ ·ÎµåÇÑ´Ù. | | parseXML() | ¹®ÀÚ¿·Î µÈ XML ¼Ò½º¸¦ ÆÄ½ÌÇÑ´Ù. | | send() | XML ¹®¼¸¦ ¿ÜºÎ·Î º¸³½´Ù. | | sendAndLoad() | XML ¹®¼¸¦ ¿ÜºÎ·Î º¸³»°í ¸®ÅϵǴ XML ¹®¼¸¦ ·ÎµåÇÑ´Ù. | | toString() | XML °´Ã¼¸¦ ¹®ÀÚ¿·Î ¸®ÅÏÇÑ´Ù. | | firstChild | ù ¹øÂ° ÀÚ½Ä ³ëµå¿¡ ´ëÇÑ ÂüÁ¶ | | ignoreWhite | XML ¼Ò½º¿¡¼ ¿©¹éÀ» ¹«½ÃÇÒ °ÍÀÎÁö ¿©ºÎ | | loaded | load(), sendAndLoad() ÀÛ¾÷ ¿Ï·á ¿©ºÎ | | nextSibling | ÇöÀç ³ëµå¿Í °°Àº ·¹º§¿¡ ÀÖ´Â ´ÙÀ½ ÇüÁ¦ ³ëµå | | previousSibling | ÇöÀç ³ëµå¿Í °°Àº ·¹º§¿¡ ÀÖ´Â ÀÌÀü ÇüÁ¦ ³ëµå | | nodeName | ÇöÀç ³ëµåÀÇ À̸§ | | nodeValue | ÇöÀç ³ëµåÀÇ °ª | | onData | µ¥ÀÌÅ͸¦ ¼ö½ÅÇßÀ» ¶§ ¹ß»ýÇÏ´Â À̺¥Æ® | | onLoad | µ¥ÀÌÅ͸¦ ¼ö½ÅÇÑ ÈÄ XML ¹®¼¸¦ ÆÄ½ÌÇßÀ» ¶§ ¹ß»ýÇÏ´Â À̺¥Æ® | | | | |
| |
XML ÆÄÀÏ Àоî¿À±â
loadVars °´Ã¼¸¦ »ç¿ëÇÏ´Â °Íº¸´Ù ¾à°£ ¹ø°Å·ÓÁö¸¸, XMLÀ» Àаí Á¶ÀÛÇÏ´Â °ÍÀº ¸Å¿ì Áß¿äÇÏ´Ù. XML ÀÚü°¡ °¡Áö´Â ÀåÁ¡ ¿Ü¿¡µµ XML À¥ ¼ºñ½º¸¦ ÀÌÇØÇϰí Ȱ¿ëÇϱâ À§ÇÑ ÇʼöÀûÀÎ ´Ü°èÀ̱⠶§¹®ÀÌ´Ù. ¿ì¼± XML ¹®¼¸¦ ·ÎµåÇϰí, ³»¿ëÀ» ¾î¶»°Ô Àо´ÂÁö »ìÆìº¸ÀÚ. ³ëÆ®ÆÐµå¿Í °°Àº ÅØ½ºÆ® ÆíÁý±â·Î <ȸé 1>°ú °°Àº ³»¿ëÀ» °¡Áø ¡°sample.xml¡±À̶õ XML ÆÄÀÏÀ» ´ÙÀ½°ú °°ÀÌ ¸¸µç´Ù.
 |
| <ȸé 1> sample.xml |
ÀÌ ÆÄÀÏÀ» Ç÷¡½Ã¿¡¼ ¾î¶»°Ô Àо´ÂÁö »ìÆìº¸ÀÚ. »õ·Î¿î Ç÷¡½Ã ÇÁ·ÎÁ§Æ®¸¦ ¸¸µç´Ù. ù ¹øÂ° ÇÁ·¹ÀÓ¿¡ <¸®½ºÆ® 1>°ú °°Àº ¾×¼Ç½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÑ´Ù(ÀÌ´ÞÀÇ µð½ºÄÏ : loadxml_sample1.fla ÆÄÀÏ¿¡ Æ÷ÇÔµÈ ¾×¼Ç½ºÅ©¸³Æ®ÀÌ´Ù).
| <¸®½ºÆ® 1> XML ¹®¼¸¦ Àд °£´ÜÇÑ ¿¹Á¦ | | | |
System.useCodepage = true;
xmldoc = new XML();
xmldoc.ignoreWhite = true;
xmldoc.load("sample.xml");
| |
 |
Áö³ ±Û¿¡ ¼Ò°³ÇÑ ´ë·Î useCodepage´Â ÄÚµå ÆäÀÌÁö¸¦ »ç¿ëÇϵµ·Ï ÇÑ´Ù. Ç÷¡½Ã ³»ºÎÀûÀ¸·Î´Â ±âº»ÀûÀ¸·Î ¸ðµÎ À¯´ÏÄÚµå ¹®ÀÚ¸¦ »ç¿ëÇϴµ¥, ¿ÜºÎ ÆÄÀÏÀ̳ª Åë½ÅÇÒ ¶§ À¯´ÏÄÚµå(UTF-8)·Î µÇ¾î ÀÖ´Â °æ¿ì´Â ±×·¸°Ô ¸¹Áö ¾Ê´Ù. µû¶ó¼ °ÅÀÇ ´ëºÎºÐ ù ÇÁ·¹ÀÓ¿¡ ´ÙÀ½°ú °°ÀÌ ±â¼úÇØ À¯´ÏÄڵ带 »ç¿ëÇÏÁö ¾Ê°í, Çö ½Ã½ºÅÛÀÇ ÄÚµå ÆäÀÌÁö¸¦ »ç¿ëÇÑ´Ù(ÀÌ·¸°Ô Çϸé ÇÑ±Û À©µµ¿ìÀÇ °æ¿ì ±âº»ÀûÀ¸·Î ¡®euc-kr¡¯À» »ç¿ëÇÏ°Ô µÈ´Ù).
System.useCodepage = true;
XML.ignoreWhite ÇÁ·ÎÆÛƼ´Â ¿ø¹® XML¿¡¼ °ø¹é¹®ÀÚ¸¦ ¹«½ÃÇϵµ·Ï ÇÑ´Ù. ¸¸ÀÏ, À̰ÍÀ» ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é °ø¹é ¹®ÀÚ ºÎºÐµµ ÇϳªÀÇ ³ëµå°¡ µÇ¾î ´Ù·ç±â°¡ ¸Å¿ì Èûµé¾îÁø´Ù.
xmldoc.ignoreWhite = true;
ŸÀÓ¶óÀÎÀÇ 5¹ø Ű ÇÁ·¹ÀÓÀ» Ãß°¡Çϰí, <¸®½ºÆ® 1.1>ÀÇ ¾×¼Ç½ºÅ©¸³Æ®¸¦ ÀÔ·ÂÇÑ´Ù. <Ctrl+Enter>¸¦ ´·¯ ¼öÇà½ÃŰ¸é ´ÙÀ½°ú °°Àº ¼öÇà °á°ú¸¦ º¼ ¼ö ÀÖ´Ù.
isbn = 8981723427
title = ¾î¶»°Ô ¹®Á¦¸¦ Ç®°ÍÀΰ¡
author = G.Æú¸®¾Æ
review = ÀÌÃ¥Àº ¼öÇÐÀû »ç°í ¹æ¹ý¿¡ ´ëÇØ¼ ¼³¸íÇϰí ÀÖ´Ù.
<¸®½ºÆ® 1.1> ·Îµå »óŸ¦ È®ÀÎ : <¸®½ºÆ® 1>¿¡¼ À̾îÁü(loadxml_sample1.fla)
if(xmldoc.loaded = true )
{
var ref = xmldoc.firstChild.firstChild.firstChild;
for( var ch = ref; ch != null; ch = ch.nextSibling ) {
trace ( ch.nodeName + " = "
+ ch.firstChild.nodeValue );
}
this.stop();
} else {
gotoAndPlay(2);
}
¿¹Á¦¿¡¼ »ç¿ëÇÑ gotoAndPlay()´Â Ç÷¡½Ã¿¡¼ ÈçÈ÷ »ç¿ëÇÏ´Â ±â¹ýÀ¸·Î, µ¥ÀÌÅÍ ·ÎµùÀ̳ª º¹ÀâÇÑ °è»êó·³ ½Ã°£ÀÌ ¸¹ÀÌ °É¸®´Â ÀÏÀÌ ³¡³µ´ÂÁö¸¦ È®ÀÎÇÑ´Ù. Áï, ´ÙÀ½°ú °°ÀÌ ³¡³ªÁö ¾Ê¾ÒÀ¸¸é ÀÌÀüÀÇ ´Ù¸¥ ÇÁ·¹ÀÓÀ¸·Î À̵¿ÇØ Ã³¸®ÁßÀÓÀ» Ç¥½ÃÇÏ´Â ¿ëµµ·Î Á¾Á¾ »ç¿ëÇÑ´Ù.
if( ÀÛ¾÷ÀÌ ³¡³µ´ÂÁö È®ÀÎ )
{
} else {
gotoAndPlay(2);
}
ÀÌ·± ¹æ¹ýº¸´Ù ´õ ¸í½ÃÀûÀ̰í È¿°úÀûÀÎ °ÍÀº XML.onLoad()¸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù(<¸®½ºÆ® 2>). onLoad()´Â ·Îµå°¡ ³¡³µÀ» ¶§ Áï, load() ȤÀº sendAndLoad() ¸Þ½îµå ¼öÇàÀÌ ³¡³µÀ» ¶§ ºÒ·ÁÁö´Â À̺¥Æ®ÀÌ´Ù. <¸®½ºÆ® 2>´Â onLoad()¸¦ »ç¿ëÇØ ¾ÕÀÇ ¿¹Á¦¿Í ºñ½ÁÇÑ ±â´ÉÀ» ¼öÇàÇϵµ·Ï ÇÑ ÄÚµåÀÌ´Ù. ¼öÇà °á°ú´Â ¶È°°´Ù.
| <¸®½ºÆ® 2> onLoad()À» ÀÌ¿ëÇÑ XML ó¸® | | | |
System.useCodepage = true;
xmldoc = new XML();
xmldoc.onLoad = loaded;
xmldoc.ignoreWhite = true;
xmldoc.load("sample.xm");
function loaded(success) {
if (success == true) {
var ref = xmldoc.firstChild.firstChild.firstChild;
for (var ch = ref; ch != null; ch=ch.nextSibling)
{
trace(ch.nodeName+"
= "+ch.firstChild.nodeValue);
}
trace(xmldoc.getBytesTotal());
this.stop();
} else {
trace("xml load error");
}
}
| |
 |
XMLSQLÀÇ ¿ªÇÒ
¿À¶óŬ ¿ª½Ã XML¿¡ ´ëÇÑ Áö¿øÀÌ ¸¹Áö¸¸ SQL ¼¹ö 2000Àº XML¿¡ ´ëÇÑ ´Ù¾çÇÏ°í ¸¹Àº ±â´ÉÀ» Á¦°øÇÑ´Ù. SQL ¼¹ö°¡ Á¦°øÇÏ´Â XML ±â´É °¡¿îµ¥ XMLSQLÀÌ Àִµ¥, À̰ÍÀÇ Å« Ư¡Àº ¾ÖÇø®ÄÉÀ̼ÇÀ» °ÅÄ¡Áö ¾Ê°í À¥ ¼¹ö(IIS)¸¦ ÅëÇØ DBMS¿¡ ¹Ù·Î Äõ¸®ÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. ASP.NET ÄÚµå ¾øÀ̵µ ¹Ù·Î DBMS¸¸À¸·Î À¥ ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
µû¶ó¼ °³¹ßÀÚ´Â XML°ú °ü°èÇü µ¥ÀÌÅÍÀÇ Â÷À̸¦ ±Øº¹ÇÒ ¼ö ÀÖ´Ù. Äõ¸® °á°ú¸¦ XML·Î »ý¼ºÇѴٵ簡 ȤÀº XML ¹®¼¸¦ ¹Ù·Î °ü°èÇü µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇÏ´Â °ÍÀº °ü°èÇü µ¥ÀÌÅ͸¦ ÀÏÁ¾ÀÇ XML ÆÄÀÏó·³ ÀÛ¾÷ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. °£´ÜÇÑ ¿¹¸¦ ÅëÇØ ±¸ÇöÇØ º¸ÀÚ. SQL ¼¹ö¿¡ ´ÙÀ½°ú °°Àº ½ºÅ°¸¶ÀÇ Å×À̺íÀ» ÀÛ¼ºÇÏ°í µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÑ´Ù.
CREATE TABLE article (
id int IDENTITY (1, 1) NOT NULL ,
c_time datetime NULL ,
u_time datetime NULL ,
title varchar (128) NULL ,
content varchar (2000) NULL
)
SQL ¼¹ö ÇÁ·Î±×·¥ ±×·ì¿¡¼ ¡°Configure SQL XML Support in IIS¡±À» ¼±ÅÃÇØ ¼öÇàÇÏ°í ´ÙÀ½°ú °°Àº ÀýÂ÷·Î °¡»ó µð·ºÅ丮¸¦ ¸¸µç´Ù(<ȸé 2>, <ȸé 3>).
1 General Virtual Directory NameÀ» ÀÔ·Â(¿©±â¼´Â "board"), ¹°¸®ÀûÀÎ °æ·Î¸¦ ¼³Á¤ÇÑ´Ù("C:\Inetpub\wwwroot\board").
2 Security ÅÇ¿¡¼ Windows ÅëÇÕ ÀÎÁõÀ» ¼±ÅÃ
3 DataSource ÅÇ SQL Server("(local)")¿Í Database À̸§("board")À» °¢°¢ ¼±ÅÃ
4 Virtual Names ÅÇ New¸¦ ¼±ÅÃÇϰí, type¿¡¼ dbobject¸¦ ¼±ÅÃÇÑ ÈÄ ÀûÀýÇÑ °¡»ó À̸§À» ÀÔ·Â("dbo_board")
 |
| <ȸé 2> SQL ¼¹ö IIS °¡»ó µð·ºÅ丮 °ü¸®ÀÚ |
 |
| <ȸé 3> SQLXML µî·ÏÁ¤º¸ |
XMLSQLÀº º°µµ ¼³Ä¡°¡ °¡´ÉÇϸç, SQL ¼¹ö 2000 SP3¿¡ Ãß°¡µÈ ³»¿ëÀÌ´Ù. SQL ¼¹öÀÇ µµ¿ò¸»¿¡¼ ¡°SQL ¼¹ö¿ë IIS °¡»ó µð·ºÅ͸® °ü¸® À¯Æ¿¸®Æ¼ »ç¿ë¡±, ¡°nwind °¡»ó µð·ºÅ丮 ¸¸µé±â¡± Ç׸ñÀ» ÂüÁ¶Ç϶ó. ´ÙÀ½°ú °°Àº URLÀ» ºê¶ó¿ìÀú¿¡ ÀÔ·ÂÇØ º¸ÀÚ.
http://plusjune/board?sql=SELECT * FROM article FOR XML AUTO, ELEMENTS&root=Articles
¾Õ¿¡ ÀÔ·ÂÇÑ URLÀº ÀÚµ¿À¸·Î ÀÎÄÚµùµÅ ´ÙÀ½°ú °°Àº ÇüŰ¡ µÈ´Ù.
http://plusjune/board?sql=SELECT%20*%20FROM%20article%20FOR%20XML%20AUTO,%20ELEMENTS&root=Articles
ÀÌ·¯ÇÑ ³»¿ëÀ» ÀÔ·ÂÇßÀ» ¶§ Äõ¸®ÀÇ °á°ú°¡ Ç¥½ÃµÈ´Ù. <ȸé 4>´Â ¼öÇà °á°ú¸¦ º¸¿©ÁØ´Ù.
 |
| <ȸé 4> SQL ¼¹öÀÇ HTPP Äõ¸® |
SQL ¼¹öÀÇ HTTP-XML Äõ¸®´Â Ƽ¾î¸¦ ºÐ¸®ÇÏÁö ¾Ê±â ¶§¹®¿¡, ´Ù¼Ò À¯¿¬¼ºÀº ¶³¾îÁöÁö¸¸ °£ÆíÇÏ°Ô Äõ¸®ÇÏ°í ±× °á°ú¸¦ XML·Î °¡Á®¿À°Å³ª XML ¹®¼¸¦ °ü°èÇü µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇÒ ¼ö ÀÖ´Ù. ¶§¹®¿¡ °ü¸®ÀÚ ÆäÀÌÁö³ª µ¥ÀÌÅͺ£À̽ºÀÇ ³»¿ëÀ» ¸ð´ÏÅ͸µÇÏ´Â - Áß¿äÇÑ ºñÁî´Ï½º ·ÎÁ÷°ú Å©°Ô °ü·ÃÀÌ ¾ø´Â - ³»¿ëÀ̶ó¸é ÃæºÐÈ÷ µµÀÔÀ» »ý°¢ÇØ º¼¸¸ÇÏ´Ù. <ȸé 4>¿Í °°ÀÌ XML·Î °á°ú°¡ ³ª¿À¸é XSLÀ» Àû¿ëÇØ ¹Ù·Î °Ô½ÃÆÇÀ» ¸¸µé ¼öµµ ÀÖ´Ù. ¾Õ¼ »ìÆìº» Ç÷¡½ÃÀÇ XML ·ÎµùÀ» ¿©±â¿¡ Á÷Á¢ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. XML.load() ¸Þ½îµå´Â ±âº»ÀûÀ¸·Î URLÀ» ·ÎµåÇϱ⠶§¹®¿¡, XMLSQLÀ» ÀÌ¿ëÇÏ¸é µ¥ÀÌÅͺ£À̽º¿¡ Á÷Á¢ Á¢±ÙÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÒ ¼ö ÀÖ´Ù.
XMLSocket¸¦ ÀÌ¿ëÇÑ ´ÙÁß »ç¿ëÀÚ Ã¤ÆÃ ÇÁ·Î±×·¥ °³¹ß
Ç÷¡½ÃÀÇ getURL(), LoadVars, XML µîÀÇ ¸Þ½îµå´Â ¸ðµÎ URL¿¡¼ ÁöÁ¤µÈ ¸®¼Ò½º¸¦ Àоî¿À°Å³ª HTTP ¿¬°áÀ» »ç¿ëÇÏ´Â ºñ ¿¬°áÇü(non-connection oriented) Åë½ÅÀÌ´Ù.
XMLSocketÀº Ç÷¡½Ã 5¿¡ Ãß°¡µÈ Ŭ·¡½º·Î SWF¿Í ¼¹ö »çÀÌ¿¡ TCP ¿¬°áÀ» ¸ÎÀ» ¼ö Àֱ⠶§¹®¿¡. äÆÃÀ̳ª °ÔÀÓ°ú °°ÀÌ ¿¬°áÀÌ ÇÊ¿äÇÑ ¼ºñ½º¸¦ À§ÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¬°áÇü(connection oriented) ¼ºñ½º´Â ¼¹ö¿¡¼ Ŭ¶óÀÌ¾ðÆ®·Î ¾Ë·ÁÁÙ ¼ö Àֱ⠶§¹®¿¡ ÈξÀ ´Ù¾çÇÑ ÀÀ¿ëÀÌ °¡´ÉÇÏ´Ù. Áï, Ŭ¶óÀÌ¾ðÆ®°¡ ÁÖ±âÀûÀ¸·Î º¯µ¿ »çÇ×À» Á¶È¸ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó º¯È°¡ »ý°åÀ» ¶§ ¼¹ö°¡ Ŭ¶óÀÌ¾ðÆ®¿¡ Á¤º¸¸¦ ÁÙ ¼ö Àֱ⠶§¹®¿¡ ÈξÀ ´Ù¾çÇÏ°í ´ëÈÀûÀÎ ¾ÖÇø®ÄÉÀ̼ÇÀÌ °¡´ÉÇÏ´Ù. XMLSocket °´Ã¼´Â ´ÙÀ½°ú °°ÀÌ »ý¼ºÇÑ´Ù.
socket= new XMLSocket();
¼¹ö¿¡ ¿¬°áÀº ´ÙÀ½°ú °°ÀÌ ÇÑ´Ù. ¼¹ö¸¦ ÁöÁ¤ÇÏ°í Æ÷Æ®¸¦ ÁöÁ¤Çϴµ¥, Æ÷Æ® ¹øÈ£´Â 1024¹ø ÀÌ»óÀ̾î¾ß ÇÑ´Ù.
sock.connect( "192.168.0.55", 65000);
<Ç¥ 2>´Â XMLSocket Ŭ·¡½º¿¡¼ ÀÚÁÖ »ç¿ëµÇ´Â ¸Þ½îµå¿Í À̺¥Æ®¸¦ Á¤¸®ÇÑ °ÍÀÌ´Ù. ´ë·« »ìÆìºÁµµ »ç¿ë ¹æ¹ýÀº ´Ù¸¥ Åë½Å °´Ã¼µé°ú Å©°Ô ´Ù¸£Áö ¾ÊÁö¸¸ close(), onCloseó·³ ¿¬°á¿¡ °ü·ÃµÈ ¸Þ½îµå¿Í À̺¥Æ®°¡ ÀÖ´Ù.
| |
| | ¸Þ½îµå | connect ¼¹ö¿¡ TCP ¿¬°áÇÑ´Ù. | | send | ¼¹ö¿¡ ¹®ÀÚ¿ Àü¼ÛÇÑ´Ù. close ¿¬°áÀ» ´Ý´Â´Ù. | | À̺¥Æ® | ¼¹ö¿Í ¿¬°áÀÌ ¿¬°áÀÌ ²÷°åÀ» ¶§ ¹ß»ý | | onConnect | ¼¹ö·Î ¿¬°áµÆÀ» ¶§(ȤÀº ¿¬°á ½Ãµµ°¡ ½ÇÆÐÇßÀ» ¶§) | | onData | ¼¹ö¿¡¼ µ¥ÀÌÅͰ¡ µµÂøÇßÀ» ¶§ | | onXML | ¼¹ö¿¡¼ µµÂøÇÑ XML ¹®ÀÚ¿ ÆÄ½ÌÀÌ ³¡³µÀ» ¶§ | | | | |
| |
onConnect(success)´Â XMLSocket.connect ¸Þ½îµå¸¦ ÅëÇØ ÃʱâÈµÈ ¿¬°á ¿äûÀÌ ¼º°øÇϰųª ½ÇÆÐÇßÀ» ¶§ ºÒ·ÁÁö´Â À̺¥Æ®ÀÌ´Ù. onData()¿Í onXML()´Â µÑ ´Ù ¼¹ö·ÎºÎÅÍ µ¥ÀÌÅͰ¡ µµÂøÇßÀ» ¶§ ºÒ¸®´Âµ¥ ¿ëµµ°¡ ´Ù¸£´Ù. ¼ø¼»óÀ¸·Î´Â onData()°¡ ¸ÕÀú ºÒ¸°´Ù. onData()´Â µ¥ÀÌÅͰ¡ µµÂøÇßÀ» ¶§, onXML()´Â µµÂøÇÑ µ¥ÀÌÅͰ¡ XML·Î ÆÄ½ÌµÆÀ» ¶§ ºÒ¸°´Ù.
<¸®½ºÆ® 3>Àº XMLSocketÀ» »ý¼ºÇØ ¿¬°áÇϰí onXML()À» »ç¿ëÇØ ¼ö½ÅµÈ µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â ÄÚµåÀÌ´Ù. OnConnect()¸¦ »ç¿ëÇØ ¿¬°áÀÇ ¼º°ø¿©ºÎ¸¦ È®ÀÎÇÏ´Â ³»¿ëµµ Àß »ìÆìº¸ÀÚ. <¸®½ºÆ® 3>À» ¼öÇàÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú°¡ Ãâ·ÂµÈ´Ù.
>>¼¹ö¿¡ ¿¬°áµÇ¾úÀ¾´Ï´Ù
PeerAddress = 192.168.0.55:2231
DateTime = ¿ÀÈÄ 1:53:34
Context = ¾È³çÇϼ¼¿ä?
| <¸®½ºÆ® 3> XMLSocket °´Ã¼¸¦ ÀÌ¿ëÇÑ ¿¬°á | | | |
System.useCodePage = true; // ÄÚµåÆäÀÌÁö »ç¿ë
sock = new XMLSocket();
sock.onConnect = OnConnect;
sock.onClose = OnClose;
sock.onXML = OnXml;
sock.connect( "192.168.0.55", 65000);
function OnXML( xmldoc )
{
trace(xmldoc.toString());
}
function OnConnect(success)
{
if (success == true) {
trace(">>¼¹ö¿¡ ¿¬°áµÇ¾úÀ¾´Ï´Ù")
sock.send("¾È³çÇϼ¼¿ä?");
} else {
trace(">>¿¬°á½ÇÆÐ")
}
}
function OnClose()
{
trace(">>¿¬°áÀÌ ²÷°å½À´Ï´Ù")
}
| |
 |
¼¹ö´Â C#À¸·Î ÀÛ¼ºµÆÀ¸¸ç, ¼¹ö·Î Àü´ÞµÈ ³»¿ëÀ» XML·Î ¸¸µé¾î ¿¬°áµÈ ¸ðµç Ŭ¶óÀÌ¾ðÆ®¿¡ º¸³»ÁÖ´Â °£´ÜÇÑ Ã¤ÆÃ ¼¹öÀÌ´Ù. ÀÌÁ¦ C# äÆÃ ¼¹ö¸¦ Á¦ÀÛÇØ º¸ÀÚ. äÆÃ ¼¹ö¿¡¼ ¿©·¯ Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ó¸®Çϱâ À§Çؼ´Â ¼ÒÄÏ ¿¬°á °´Ã¼ÀÇ ¸ñ·ÏÀ» °ü¸®ÇÒ Çʿ䰡 ÀÖ´Ù. <¸®½ºÆ® 4>´Â XmlChatServer.csÀÇ ÁÖ¿ä ºÎºÐÀÌ´Ù. ÀüüÀûÀÎ È帧À» »ìÆìº¸ÀÚ. ÀÌ Äڵ忡´Â ´ë·« ´ÙÀ½°ú °°Àº ÁÖ¿äÇÑ À̽´µéÀÌ ±¸ÇöµÇ¾î ÀÖ´Ù.
¡ß ´ÙÁß »ç¿ëÀÚ ¿¬°á À§ÇØ ClientSocekt ¸ñ·Ï °ü¸®
¡ß ºñµ¿±â I/O
¡ß ¼ÒÄÏ ÀÔÃâ·Â¿¡ ¡®euc-kr¡¯ ÀÎÄÚµù
ÀÌ Áß ºñµ¿±â ÇÁ·Î±×·¡¹Ö°ú ´ÙÁß »ç¿ëÀÚ Ã¤ÆÃÀ» À§ÇÑ ¸ñ·Ï °ü¸® ºÎºÐÀº ÀÌ ±ÛÀÇ ¹üÀ§¸¦ ¹þ¾î³ª¹Ç·Î ³í¿Ü·Î ÇÑ´Ù.
| <¸®½ºÆ® 4> XmlChatServer.csÀÇ ÁÖ¿ä ºÎºÐ | | | |
// XmlChatServer
// 1. ´ÙÁß »ç¿ëÀÚ ¿¬°á À§ÇØ ClientSocekt ¸ñ·Ï °ü¸®
// 2. ºñµ¿±â I/O
// 3. ¼ÒÄÏ ÀÔÃâ·Â¿¡ "euc-kr" ÀÎÄÚµù
// (c) 2003 eLasticWare, plusjune
using System
using System.IO;
using System.Net.Sockets;
using System.Collections;
using System.Text;
using System.Xml;
namespace XmlServer
{
class XmlServer
{
private ArrayList clientList;
public XmlServer()
{
clientList = newArrayList(); // Ŭ¶óÀÌ¾ðÆ® ¼ÒÄÏ ¸ñ·Ï °ü¸®
}
// Áß·«
private void OnReceive(IAsyncResult ar) // ºñµ¿±â µ¥ÀÌÅÍ ¼ö½Å
{
ClientSocket client = (ClientSocket)ar.AsyncState;
ClientSocket socketReceiveData = client;
try
{
byte[] recvBytes= client.GetReceivedData(ar);
if ( recvBytes.Length < 1) throw new Exception();
// ¼ö½Å µ¥ÀÌÅ͸¦ ÀÎÄÚµùÇÑ´Ù.
Encoding e = Encoding.GetEncoding("euc-kr");
stringrecvXml = e.GetString( recvBytes );
Console.WriteLine( "recv ({0}) : '" + recvXml + "'",
client.PeerAddress );
// TOD: ¼ö½ÅµÈ XMLÀ» ¿©±â¼ ó¸®ÇÑ´Ù.
// º¸³¾ ¹®ÀÚ¿À» ¸¸µç´Ù.
string strSend = @"<?xml version=""1.0"" encoding=""euc-kr"" ?>"
+ "\n" + "<Message>\n" + "<PeerAddress>" +
client.PeerAddress + "</PeerAddress>\n" + " <DateTime>" +
DateTime.Now.ToLongTimeString() + "</DateTime>\n" +
"<Context>" + recvXml + "</Context>\n" + "</Message>\n";
// ¿¬°áµÈ ¸ðµç Ŭ¶óÀÌ¾ðÆ®¿¡ ¸Þ½ÃÁö¸¦ º¸³½´Ù.
for ( int index = 0; index < clientList.Count; index++ )
{
client = ((ClientSocket)clientList[index]);
client.SendMessage(strSend );
Console.WriteLine("send ({0}) : '" + strSend + "'",
client.PeerAddress );
}
// ºñµ¿±â ¼ö½Å ´Ù½Ã ½ÃÀÛ
socketReceiveData.Start( new AsyncCallback(OnReceive) );
}
catch
{
clientList.Remove(client);
client.Release();
}
}
static void Main(string[] args)
{
XmlServer tcpServer = new XmlServer();
tcpServer.Run();
}
}
class ClientSocket
{
private Socket socket;
private byte[] receiveBuffer;
// Áß·«
public void Start(AsyncCallback receiveCallback)
{
socket.BeginReceive(receiveBuffer, 0, receiveBuffer.Length,
SocketFlags.None, receiveCallback, this );
}
public byte[] GetReceivedData(IAsyncResult ar)
{
int nReceived = socket.EndReceive(ar);
byte[] buff = new byte[nReceived];
Array.Copy(receiveBuffer, buff, nReceived);
return buff;
}
public void SendMessage(string str)
{
Encoding e = Encoding.GetEncoding("euc-kr");
byte[] byteBuffer = e.GetBytes(str);
socket.Send(byteBuffer);
}
// Áß·«
}
}
| |
 |
ÀÎÄÚµù ¹®Á¦¸¦ Àá±ñ »ìÆìº¸ÀÚ. XML ¹®¼¸¦ ó¸®ÇÒ ¶§ ¸î °¡Áö À̽´°¡ Àִµ¥, °¡Àå ¸ÕÀú ±Øº¹ÇØ¾ß ÇÒ °ÍÀÌ ¹Ù·Î ÀÎÄÚµù ¹®Á¦ÀÌ´Ù. ÀÌÀü¿¡µµ À̾߱âÇßµí ¾ÖÇø®ÄÉÀÌ¼Ç ¿ÜºÎÀÇ µ¥ÀÌÅÍ´Â ´ëºÎºÐÀÇ KSC5601(¡°euc-kr¡±) ÀÎÄÚµùÀÌ´Ù. ¹°·Ð À¯´ÏÄÚµå·Î Åë½ÅÇÒ ¼öµµ ÀÖ°ÚÀ¸³ª ȯ°æÀ» »ý°¢ÇØ º¸¸é ¹Ýµå½Ã ÀÎÄÚµùÀ» °í·ÁÇØ¾ß ÇÑ´Ù. ´å³Ý¿¡¼ ÀÎÄÚµùÀº System.Text.Encoding ³×ÀÓ½ºÆäÀ̽º¸¦ »ç¿ëÇÑ´Ù. ¿ì¸®¿¡°Ô´Â À¯´ÏÄڵ峪 ¾Æ½ºÅ° ÀÎÄÚµùº¸´Ù Çѱۿ¡ ´ëÇÑ Áö¿øÀÌ ¿ì¼±À̹ǷΠÁÖ·Î ´ÙÀ½À» »ç¿ëÇÏ°Ô µÈ´Ù.
System.Text.Encoding.GetEncoding(int codepage)
¿©±â¼ ÄÚµåÆäÀÌÁö¶õ ÄÚµå ü°è¿¡ ºÎ¿©µÇ´Â ¹øÈ£ÀÌ´Ù. Çѱ¹¾î(KSC5601) ÄÚµå ÆäÀÌÁö´Â 949¹øÀ̸ç, ¹®ÀÚ¿·Î´Â ¡°euc-kr¡±·Î Ç¥½ÃÇÑ´Ù. ¼ÒÄÏÀ» ÅëÇØ ¼Û¼ö½ÅµÇ´Â µ¥ÀÌÅÍ´Â ¹ÙÀÌÆ® ¹è¿Àε¥, À̰ÍÀ» À¯´ÏÄÚµå StringÀ¸·Î ¹Ù²Ù·Á¸é ÀÎÄÚµùÀ» ÇØ¾ß ÇÑ´Ù. <¸®½ºÆ® 5>´Â KSC5601°ú À¯´ÏÄÚµå »çÀÌ¿¡ ÀÎÄÚµùÇÏ´Â °£´ÜÇÑ ¿¹¸¦ º¸¿©ÁØ´Ù.
| <¸®½ºÆ® 5> KSC5601°ú À¯´ÏÄÚµå ÀÎÄÚµù ¿¹Á¦ | | | |
// Unicode ÀÎÄÚµù : À¯´ÏÄÚµå ==> KSC5601
string str = "abc°¡³ª´Ù";
Encoding e = Encoding.GetEncoding(949);
byte[] byteBuffer = e.GetBytes(str);
for(int i = 0; i < byteBuffer.Length; i++)
Console.Write("0x{0:X}
", byteBuffer[i]);
Console.WriteLine();
// 0x61 0x62 0x63 0xB0 0xA1 0xB3 0xAA 0xB4 0xD9
| |
 |
onData Ȱ¿ë
XMLSocket °´Ã¼ÀÇ onData´Â µ¥ÀÌÅͰ¡ µµÂøÇßÀ» ¶§ ºÒ¸°´Ù. ƯÀÌÇÒ ¸¸ÇÑ Á¡Àº onData¸¦ »ç¿ëÇϸé XMLÀÌ ¾Æ´Ï¾îµµ 󸮰¡ °¡´ÉÇÏ´Ù´Â °ÍÀÌ´Ù. µû¶ó¼ XMLSocketÀ¸·Î ¹Ýµå½Ã XML¸¸À» ´Ù·ï¾ß ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. Áï, XMLSocketÀº XML»Ó¸¸ ¾Æ´Ï¶ó ÀϹÝÀûÀÎ TCP Åë½ÅÀ» À§ÇÑ ¼ÒÄÏÀ¸·Îµµ »ç¿ëÀÌ °¡´ÉÇÏ´Ù. ³»ºÎÀûÀ¸·Î ¿ø·¡ onData´Â ´ÙÀ½°ú °°ÀÌ µ¿ÀÛÇÑ´Ù.
XMLSocket.onData = function (src) {
this.onXML(new XML(src));
}
ÇÁ·Î±×·¡¸Ó°¡ onDataÀ» ¿À¹ö¶óÀ̵ùÇϸé, Áï Äڵ忡¼ onData¸¦ ÀçÁ¤ÀÇÇϸé onXMLÀÌ ºÒ¸®Áö ¾Ê´Â´Ù(¸¸ÀÏ, onData¿Í onXMLÀ» µÑ ´Ù »ç¿ëÇÏ°í ½Í´Ù¸é onDataÀÇ Çڵ鷯 ÇÔ¼ö ³¡¿¡¼ onXML Çڵ鷯¸¦ ºÒ·¯ÁÖ¸é µÈ´Ù). <¸®½ºÆ® 6>Àº ¿ÏÀüÇÑ ¿¹Á¦ÀÌ´Ù. onData¸¦ »ç¿ëÇØ XMLÀ» ÆÄ½ÌÇϵµ·Ï Çß´Ù. ÀÌ·¸°Ô ÇÏ´Â ÀÌÀ¯´Â ignoreWhite¸¦ »ç¿ëÇϱâ À§ÇؼÀÌ´Ù. ÀÌ·¸°Ô ÇÏ¸é ´Ù¾çÇÑ Ã³¸®°¡ °¡´ÉÇÏ´Ù.
| <¸®½ºÆ® 6> onData(), onXML()À» ÀÌ¿ëÇÑ ÆÄ½Ì | | | |
System.useCodePage = true; // ÄÚµåÆäÀÌÁö »ç¿ë
sock = new XMLSocket();
sock.onConnect = OnConnect;
sock.onClose = OnClose;
sock.onData = onData;
sock.onXML = onXml;
sock.connect( "192.168.0.55", 65000);
function OnData ( src )
{
var xmldoc = new XML();
xmldoc.ignoreWhite = true;
xmldoc.parseXML( src );
OnXml( xmldoc )
}
function OnXml( xmldoc )
{
xmldoc.ignoreWhite = true;
var ref = xmldoc.firstChild.firstChild,firstChild;
for (var ch = ref; ch != null; ch=ch.nextSibling) {
trace(ch.nodeName+"
= "+ch.firstChild.nodeValue);
}
}
function OnConnect(success)
{
if (success == true) {
trace(">>¼¹ö¿¡ ¿¬°áµÇ¾úÀ¾´Ï´Ù")
sock.send("¾È³çÇϼ¼¿ä?");
} else {
trace(">>¿¬°á½ÇÆÐ")
}
}
function OnClose()
{
trace(">>¿¬°áÀÌ ²÷°åÀ¾´Ï´Ù")
}
| |
 |
<ȸé 5>´Â <¸®½ºÆ® 6>¿¡¼ ¸¸µé¾îÁø SWF¸¦ ¿©·¯ °³ ¼öÇàÇϰí XmlChatServer¸¦ ¼öÇàÇÑ °á°úÀÌ´Ù. ¿©·¯ °³ÀÇ SWF ¿¬°áÀÌ °ü¸®µÇ°í, ¸Þ½ÃÁö°¡ °¢ SWF¿¡ Àü´ÞµÇ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. UI´Â ¾øÁö¸¸ ¿©·¯ Ŭ¶óÀÌ¾ðÆ®°¡ ¿¬°áµÈ Ç÷¡½Ã äÆÃÀÌ °¡´ÉÇÏ´Ù´Â °ÍÀ» º¸¿©ÁÖ°í ÀÖ´Ù.
 |
| <ȸé 5> XmlChatServer ¼öÇà °á°ú |
XML À¥ ¼ºñ½º ÁÖ°¡ Á¶È¸ ÇÁ·Î±×·¥
´ÙÀ½ URLÀ» ºê¶ó¿ìÀú â¿¡ ÀÔ·ÂÇØ º¸ÀÚ.
¾ßÈÄ¿¡¼ Á¦°øÇÏ´Â ÁÖ°¡ Á¶È¸ ¼ºñ½ºÀÌ´Ù. °¢°¢ ½ã°ú MSÀÇ ÁÖ°¡ ÇöȲ(20ºÐ ´ÜÀ§ °»½Å)À» º¸¿©ÁØ´Ù. ¾à°£ ¾ÏÈ£ °°¾Æ º¸ÀÌÁö¸¸, ´ÙÀ½°ú °°Àº °á°ú°¡ ºê¶ó¿ìÀú â¿¡ Ç¥½ÃµÈ´Ù.
"MSFT",26.1801,"6/20/2003","3:45pm",+0.1101,26.344,26.38,26.01,71121984,281.1B,26.07,"+0.42%","20.705 - 29.48",0.88,29.62,"MICROSOFT CP"
<¸®½ºÆ® 7>Àº ÀÌ ³»¿ëÀ» À¥ ¼ºñ½º·Î ±¸ÇöÇÑ °ÍÀÌ´Ù. <¸®½ºÆ® 7>ÀÇ ³»¿ëÀº quote.yahoo.com¿¡¼ ¸®ÅÏµÈ ¹®ÀÚ¿À» ¡®,¡¯¸¦ ºÐ¸®ÇÏ¿© °´Ã¼·Î ¸¸µé°í, ÀÌ °´Ã¼¸¦ ¸®ÅÏÇÏ´Â À¥ ¼ºñ½º·Î µÇ¾î ÀÖ´Ù(Stock Ŭ·¡½ºÀÇ ¼Ó¼ºÀÌ [Serializable]·Î µÇ¾î ÀÖ´Ù´Â Á¡À» ÁÖ¸ñÇÏÀÚ). °´Ã¼¸¦ ¸®ÅÏÇϸé XML ÇüÅ·Π¸¸µé¾îÁø´Ù. Áï, °´Ã¼¸¦ XML·Î ½Ã¸®¾ó¶óÀÌÁîÇÑ´Ù).
 |
| <ȸé 6> ÁÖ°¡ Á¶È¸ À¥ ¼ºñ½º ¼öÇà ȸé |
| <¸®½ºÆ® 7> ¾ßÈÄ ÁÖ°¡ Á¶È¸ À¥ ¼ºñ½º | | | |
// ¾ßÈÄ ÁÖ°¡ Á¶È¸ XML À¥ ¼ºñ½º
// 1. HttpWebRequest
// 2. °´Ã¼ ½Ã¸®¾ó¶óÀÌÁ¦À̼Ç
// 3. Split()À» ÀÌ¿ëÇÑ ¹®ÀÚ¿ tokenize
// (c) 2003 eLasticWare, plusjune
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.Net;
using System.IO;
using System.Text;
namespace StockQuote
{
[Serializable]
public class Stock
{
public string Symbol;
public string Last;
public string Date;
public string Time;
public string Change;
public string Open;
public string High;
public string Low;
public string Volume;
public string MktCap;
public string PrevClose;
public string PctChange;
public string AnnRange;
public string Earns;
public string PE;
public string Name;
}
[WebService(Namespace="http://elasticware.com/stockwebservices/")]
public class StockService : System.Web.Services.WebService
{
public StockService()
{
InitializeComponent();
}
#region Component Designer generated code
// Áß·«
#endregion
[WebMethod]
public Stock GetQuote(string symbol)
{
string buffer;
string[] tokens = null
stringurl=@"http://quote.yahoo.com/d/quotes.csv?s="+symbol+"&f=sl1d1t1c1ohgvj1pp2wern"
WebRequest req;
WebResponse res;
Stock stock = new Stock();
try
{
req = (HttpWebRequest)WebRequest.Create(url);
res = (HttpWebResponse)req.GetResponse();
StreamReader strm =
newStreamReader( res.GetResponseStream(), System.Text.Encoding.ASCII);
buffer = strm.ReadToEnd();
strm.Close();
buffer = buffer.Replace( "\"", "" );
tokens = buffer.Split( new char[] {','} );
stock.Symbol = tokens[0];
stock.Last = tokens[1];
stock.Date = tokens[2];
stock.Time = tokens[3];
stock.Change = tokens[4];
stock.Open = tokens[5];
stock.High = tokens[6];
stock.Low = tokens[7];
stock.Volume = tokens[8];
stock.MktCap = tokens[9];
stock.PrevClose = tokens[10];
stock.PctChange = tokens[11];
stock.AnnRange = tokens[12];
stock.Earns = tokens[13];
stock.PE = tokens[14];
stock.Name = tokens[15];
}
catch(Exception)
{
stock = null
}
return stock ;
}
}
}
| |
 |
<ȸé 6>Àº ÁÖ°¡ Á¶È¸ À¥ ¼ºñ½º¸¦ ºê¶ó¿ìÀú¿¡¼ ¼öÇàÇÑ °á°úÀÌ´Ù. ASP.NETÀº SOAPÀ» ÀÌ¿ëÇÏÁö ¾Ê°íµµ HTTP GETÀ̳ª POST·Î À¥ ¼ºñ½º¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. µû¶ó¼ ÀÌ À¥ ¼ºñ½º¸¦ ÀÌ¿ëÇÏ°í ½Í´Ù¸é, ´ÜÁö ´ÙÀ½°ú °°ÀÌ HTTP ¿äûÀ» º¸³»¸é µÈ´Ù.
GET /StockQuote/StockQuote.asmx/GetQuote?symbol=string HTTP/1.1
Host: localhost
¿¹¸¦ µé¾î, MSÀÇ ÁÖ½ÄÀ» Á¶È¸ÇÏ°í ½Í´Ù¸é(MSFT´Â MSÀÇ ÁÖ½Ä ½ÃÀå ÄÚµåÀÌ´Ù),
http://localhost/StockQuote/StockQuote.asmx/GetQuote?symbol=MSFT
°ú °°ÀÌ HTTP ¿äûÀ» ÇÏ¸é µÈ´Ù. Ç÷¡½ÃÀÇ XML °´Ã¼¸¦ ÀÌ¿ëÇϸé, ASP.NET À¥ ¼ºñ½º¸¦ °£´ÜÇÑ HTTP·Î ¿äÃ»ÇØ ¼ö½ÅÇÒ ¼ö ÀÖ´Ù. ¾Õ URL¿¡¼ XML °á°ú¸¦ ¸®ÅÏ¹Þ¾Æ Ã³¸®ÇÏ´Â ¾×¼Ç½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇØ º¸ÀÚ.
| <¸®½ºÆ® 8> ÁÖ°¡ Á¶È¸ À¥ ¼ºñ½º | | | |
System.useCodepage = true;
xmldoc = new XML();
xmldoc.onLoad = loaded;
xmldoc.ignoreWhite = true;
xmldoc.load( "http://localhost/StockQuote/StockQuote.asmx/GetQuote?symbol=MSFT"
)
function loaded(success) {
if (success == true) {
var ref = xmldoc.firstChild.firstChild;
for (var ch = ref; ch != null; ch=ch.nextSibling)
{
trace(ch.nodeName+"
= "+ ch.firstChild.nodeValue);
}
trace(xmldoc.getBytesTotal());
this.stop();
} else {
trace("xml load error");
}
}
| |
 |
<¸®½ºÆ® 8>Àº <¸®½ºÆ® 7>, <ȸé 6>ÀÇ ÁÖ°¡ Á¶È¸ À¥ ¼ºñ½º¸¦ Á¶È¸ÇÏ´Â ¾×¼Ç½ºÅ©¸³Æ®ÀÌ´Ù. °£´ÜÇÏ°Ô ³ª¿Çϰí ÀÖ´Ù(ÀÌ Á¶È¸ ³»¿ëÀ» ¡®¾î¶»°Ô ¿¹»Ú°Ô º¸¿©ÁÙ °ÍÀΰ¡¡¯ÇÏ´Â °ÍÀº ÀÌ ±Û¿¡¼ ´Ù·çÁö ¾Ê´Â´Ù). ´ÙÀ½Àº <¸®½ºÆ® 8>ÀÇ ¾×¼Ç ½ºÅ©¸³Æ®¸¦ ¼öÇàÇÑ °á°úÀÌ´Ù.
Symbol = MSFT
Last = 26.62
Date = 8/19/2003
Time = 4:01pm
Change = +0.92
Open = 25.85
High = 26.65
Low = 25.77
Volume = 73001488
MktCap = 286.7B
PrevClose = 25.70
PctChange = +3.58%
AnnRange = 21.5585 - 29.48
Earns = 0.92
PE = 27.93
Name = MICROSOFT CP
624 byte(s) read
Ç÷¡½Ã¿Í SOAP
HTTP GETÀ» ÀÌ¿ëÇØµµ ASP.NETÀÇ À¥ ¼ºñ½º¸¦ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, À¥ ¼ºñ½º¸¦ Á¦´ë·Î ¾²·Á¸é UDDI¿Í SOAPÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ´ÙÀ½Àº ÁÖ°¡ Á¶È¸ À¥ ¼ºñ½º¸¦ ÀÌ¿ëÇÏ´Â SOAP ¿äûÀÌ´Ù.
POST /StockQuote/StockQuote.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://elasticware.com/stockwebservices/GetQuote"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetQuote xmlns="http://elasticware.com/stockwebservices/">
<symbol>string</symbol>
</GetQuote>
</soap:Body>
</soap:Envelope>
¾ÕÀÇ SOAP ¿äûÀº XML °´Ã¼·Î ¸¸µé¾î XML.sendAndLoad()¸¦ »ç¿ëÇØ È£ÃâÇÒ ¼ö ÀÖ´Ù. sendAndLoad()´Â ±âº»ÀûÀ¸·Î POST·Î ¿äûÀ» º¸³½´Ù. ÀÌ·± SOAP ¿äûÀ» ¸¸µé±â À§ÇØ HTTP Çì´õ¿¡ ¡°SOAPAction¡±À» ³Ö¾î¾ß Çϴµ¥, Ç÷¡½Ã 5.0 ÀÌÇÏÀÇ ¹öÀü¿¡´Â HTTP Çì´õ¸¦ ÇÁ·Î±×·¡¸Ó°¡ Ãß°¡ÇÒ ¹æ¹ýÀÌ ¾ø´Ù(5.0 ÀÌÇÏ ¹öÀü¿¡´Â HTTP Çì´õ¸¦ Ãß°¡Çϰųª Á¶ÀÛÇÏ´Â ±â´ÉÀÌ ¾ø´Ù). Ç÷¡½Ã 5¸¦ ½á¾ß ÇÑ´Ù¸é, GETÀ¸·Î ¿äûÀ» ¹Þ¾Æ SOAP ¿äûÀ» ¸¸µé°í ó¸®µÈ °á°ú¸¦ ¸®ÅÏÇÏ´Â ÆäÀÌÁö¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î, soapcall.aspx ÆäÀÌÁö¸¦ ¸¸µé°í ´ÙÀ½°ú °°ÀÌ ÇÊ¿äÇÑ Á¤º¸¸¦ GET ¿äûÀ¸·Î ÆäÀÌÁö¿¡ ³Ñ±ä´Ù.
http://server/soapcall.aspx?url=http://ws_server/StockQuote.asmx&SOAPAction=SoapAction
soapcall.aspx ÆäÀÌÁö¿¡¼ SOAP ¿äûÀ» ¸¸µé¾î URL ÀÎÀÚ¿Í SOAPAction ÀÎÀÚ¿¡ ÁöÁ¤µÈ ³»¿ëÀ¸·Î SOAP ¸Þ½ÃÁö¸¦ ¸¸µé¾î ¿äûÇÑ ´ÙÀ½ °á°ú XMLÀ» Ŭ¶óÀÌ¾ðÆ®¿¡ ¸®ÅÏÇÏ´Â ¹æ¹ýÀÌ´Ù. Ç÷¡½Ã Ç÷¹À̾î 6.0r65 ÀÌ»óÀÇ ¹öÀü¿¡¼´Â HTTP Çì´õ¸¦ Á¤ÀÇÇϱâ À§ÇØ XML ¹× LoadVars °´Ã¼°¡ »ç¿ëÇÏ´Â HTTP Çì´õ¿¡ »ç¿ëÀÚ Á¤ÀÇ °ªÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ´ÙÀ½ µÎ °¡Áö »õ·Î¿î ¸Þ½îµå°¡ ÀÖ´Ù.
¡ß addRequestHeader(<header name>, <header value>)
¡ß addRequestHeader(<headers>)
ù ¹øÂ° addRequestHeader´Â ¿©·¯ ¹ø È£ÃâÀÌ °¡´ÉÇÏ´Ù. °°Àº Çì´õ À̸§À» ÁöÁ¤Çϸé, ³ªÁß¿¡ ¼³Á¤ÇÑ °ªÀÌ ÁöÁ¤µÈ´Ù. µÎ ¹øÂ° addRequestHeader´Â ¹®ÀÚ ¹è¿À» »ç¿ëÇØ ÇѲ¨¹ø¿¡ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ¸Þ½îµåÀÌ´Ù. ¿¹¸¦ µé¾î, ´ÙÀ½°ú °°ÀÌ HTTP Çì´õ¿¡ SOAPActionÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Ù.
xmldoc.addRequestHeader("SOAPAction", "\"GetQuote\"");
addRequestHeader()Àº 6.0r65 ¹öÀü À̻󿡸¸ Àû¿ëµÇ¹Ç·Î, ¹öÀü ȣȯ¼ºÀ» »ý°¢ÇÑ´Ù¸é º°·Î ÁÁÀº ¹æ¹ýÀÌ ¾Æ´Ï´Ù. À̺¸´Ù´Â °£´ÜÇÏ°Ô ÀÌ¿ëÇÏ´Â °æ¿ì¿¡´Â loadVars, XML Ŭ·¡½º¸¦ ÀÌ¿ëÇϰí, º»°ÝÀûÀ¸·Î SOAPÀ» »ç¿ëÇϰíÀÚ ÇÑ´Ù¸é Ç÷¡½Ã ¸®¸ðÆÃÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. Ç÷¡½Ã ¸®¸ðÆÃÀº ÈξÀ °£ÆíÇÑ ¹æ¹ýÀ¸·Î SOAPÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ°Ô ÇÒ »Ó¸¸ ¾Æ´Ï¶ó DB¿¡ ´ëÇÑ Á¢±Ù µî ´Ù¾çÇÑ ±â´ÉÀ» Á¦°øÇÑ´Ù. Ç÷¡½Ã ¸®¸ðÆÃ¿¡ ´ëÇØ¼´Â ´ÙÀ½ È£¿¡¼ ÀÚ¼¼ÇÏ°Ô »ìÆìº¼ °ÍÀÌ´Ù.
Ç÷¡½Ã ÇÁ·Î±×·¡¸Ó
¿äÁòÀº ¡®Ç÷¡½Ã µðÀÚÀ̳ʡ¯¶õ ¸»Àº Àͼ÷ÇÏÁö¸¸ ¡®Ç÷¡½Ã ÇÁ·Î±×·¡¸Ó¡¯¶ó´Â ¿ë¾î´Â ±×¸® ³Î¸® ¾Ë·ÁÁ® ÀÖÁö ¾Ê´Ù. Ç÷¡½Ã Ŭ¶óÀÌ¾ðÆ®°¡ °¡Áø ´Ù¾çÇÑ ±â´ÉÀ» ÃÖ´ëÇÑ È°¿ëÇÏ·Á¸é, ¡®µðÀÚÀ̳ʡ¯·Î¼°¡ ¾Æ´Ñ ¡®ÇÁ·Î±×·¡¸Ó¡¯·ÎÀÇ Á¢±Ùµµ Áß¿äÇÑ ¿ä¼Ò°¡ µÉ °ÍÀÌ´Ù. ƯÈ÷, ´å³Ýó·³ À¥ ¼ºñ½º¸¦ ¼Õ½±°Ô ±¸ÃàÇÒ ¼ö Àִ ȯ°æ°ú ¸Â¹°¸°´Ù¸é ¡®Ç÷¡½Ã ÇÁ·Î±×·¡¸Ó¡¯´Â ´õ Å« ÈûÀ» ¾òÀ» ¼ö ÀÖ´Ù.
 |
| <ȸé 8> ´å³Ý PetShop Ç÷¡½Ã ÇÁ·ÐÆ®¿£µå ¼öÇà ȸé |
¸ÅÅ©·Î¹Ìµð¾î Ȩ ÆäÀÌÁö¿¡ º¸¸é PetMarketÀ̶õ ºí·çÇÁ¸°Æ® ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù. J2EEÀÇ Ã»»çÁø ÇÁ·Î±×·¥À̾ú´ø ¡®ÀÚ¹Ù Pet Store¡¯¸¦ MS°¡ ¡®'´å³Ý Pet Shop¡¯À̶õ À̸§À¸·Î ´å³Ý ¹öÀüÀ» °³¹ßÇØ À̸¦ ³õ°í ÇÑ µ¿¾È ÀÚ¹Ù¿Í ´å³Ý Áø¿µÀÌ ½Å°æÀüÀ» ¹ú¿´¾ú´Ù. ¸ÅÅ©·Î¹Ìµð¾îÀÇ Pet MarketÀº ¡®ÀÚ¹Ù Pet Store¡¯¿Í ¡®´å³Ý Pet Shop¡¯°ú ºñ½ÁÇÑ ¸Æ¶ôÀ¸·Î ¸¸µé¾îÁø ÇÁ·Î±×·¥ÀÌ´Ù.
¡®Ç÷¡½Ã Ŭ¶óÀÌ¾ðÆ®¡¯ + ¡®´å³Ý Pet Shop¡¯ ¹öÀü(<ȸé 8>)Àº ´å³Ý °³¹ßÀÚµç Ç÷¡½Ã °³¹ßÀÚµç »ó´çÈ÷ ¿¬±¸ÇØ º¼¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Ù. Ç÷¡½Ã Ŭ¶óÀÌ¾ðÆ®°¡ ASP.NET°ú ¾î¶»°Ô Àß ¿¬µ¿µÉ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇÑ ÁÁÀº ¿¹Á¦ÀÌ´Ù. ´ÙÀ½ ±Û¿¡¼ Ç÷¡½Ã¿Í °ü·ÃÇÑ º¸¾È ¹®Á¦¸¦ ´Ù·ïº¸ÀÚ. @