[4th Seoul Workshop] Intranet¿¡¼­ÀÇ Java

À±µ¿ºó
¼­¿ï½Ã ¼­Ãʱ¸ ¹æ¹èµ¿ À¯´Ï¿Âºôµù 1495-79
ÇÚµð ¼ÒÇÁÆ® ½ÅÁ¦Ç°°³¹ßÆÀ
E-mail : dbin@handy.co.kr
URL : http://www.handy.co.kr/~dbin/
Abstract:

ÀÎÆ®¶ó³ÝÀº ÀÎÅͳÝÀÇ Ç¥Áرâ¼úÀ» ÀÌ¿ëÇÑ´Ù´Â ¹ü¿ë¼º, »ç¿ëÀÚ Á¢±Ù ¿ëÀÌ, °³¹ßÀÇ Æí¸®ÇÔ µîÀÇ ÀÌÁ¡À¸·Î »ç¿ëÀÌ ±Þ¼ÓÈ÷ Áõ°¡Çϰí ÀÖ´Ù. ±âÁ¸ÀÇ ÀÎÆ®¶ó³Ý °³¹ßÀº ÁÖ·Î cgi-binÀ̳ª ¼­¹ö API°¡ Áß½ÉÀÌ µÇ¾î ÁøÇàµÇ¾îÁ® ¿Ô°í C, C++, perlµîÀÇ ¹ü¿ë¾ð¾î°¡ ¾²¿©¿Ô´Ù. ÀÌ·¯ÇÑ ±âÁ¸¾ð¾îÀÇ È°¿ëÀº Çϵå¿þ¾î Ç÷§ÆûÀ̳ª DB¿¡ Á¾¼ÓµÇ¹Ç·Î ¿Ï¼ºµÈ ÆÐŰÁöÀÇ È°¿ë¼ºÀÌ ¶³¾îÁø´Ù.

ÃÖ±Ù¿¡ °¢±¤¹Þ°í ÀÖ´Â ÀÚ¹Ù ¾ð¾î´Â ¼ø¼ö OOPÀûÀÎ ¼º°Ý, Ç÷§Æû¿¡ ÀÇÁ¸ÇÏÁö ¾Ê´Â´Ù´Â Á¡, JDBC¸¦ ÀÌ¿ëÇÑ DB ¹«°ü¼ºµîÀÇ Æ¯Â¡À¸·Î ÀÎÇØ »õ·Î¿î ÀÎÆ®¶ó³Ý °³¹ß¾ð¾î·Î ¶°¿À¸£°í ÀÖ´Ù. ¶ÇÇÑ º¸´Ù µ¿ÀûÀ̰í À¯Àú¿ÍÀÇ »óÈ£±³·ù(interaction)°¡ °­È­µÇ°í ÀÖ´Â ½ÃÁ¡¿¡¼­ Ŭ¶óÀÌ¾ðÆ® Ãø¸éÀÇ ÀÚ¹Ù ¾ÖÇ÷¿ÀÇ ÀÌ¿ëÀº ¼­¹öÂÊÀÇ ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ °³¹ß°ú ¸Â¹°·Á ´ÜÀÏÇÑ °³¹ßȯ°æÀ» Á¦°øÇØÁØ´Ù.

º» °­ÀÇ¿¡¼­´Â ÁÖ·Î ¼­¹öÂÊÀÇ ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ ÀÎÆ®¶ó³Ý °³¹ßȯ°æÀ» ¾Ë¾Æº¸°í, °¢ °³¹ßȯ°æ¿¡¼­ÀÇ Àå´ÜÁ¡À» ¾ð±ÞÇØ º»´Ù. ¶ÇÇÑ °¢ ȯ°æ¿¡¼­ÀÇ ½ÇÁ¦ DB¿¬°á¿¹¸¦ ¾Ë¾Æº»´Ù. ¸¶Áö¸·À¸·Î ÇöÀçÀÇ ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ ÀÎÆ®¶ó³Ý °³¹ß °¡´É¼ºÀ» Á¡°ËÇØ º¸°í ¾ÕÀ¸·ÎÀÇ ¹ßÀü»óȲ¿¡ ´ëÇØ¼­µµ »ý°¢ÇØ º¸±â·Î ÇÑ´Ù.

Keywords:
Java, Intranet, WWW, JDBC

1. ¼­·Ð

1.1 ÀÎÆ®¶ó³Ý

TCP/IP ±â¹ÝÀÇ ÀÎÅͳÝÀÌ WWW ±â¼ú°ú Á¢¸ñµÇ¸é¼­ ±× »ç¿ëÀÚ°¡ °¡È÷ Æø¹ßÀûÀ¸·Î Áõ°¡Çϰí ÀÖ´Ù. Ãʱ⿡´Â ¸ÖƼ¹Ìµð¾î µ¥ÀÌÅÍÀÇ ´Ü¼øÇÑ Àü¼Û¿¡¼­ ºÎÅÍ ½ÃÀÛÇÏ¿© ȨÆäÀÌÁö¿Í °Ë»ö ¼­ºñ½º, ÃÖ±Ù µé¾î¼­´Â ±âÁ¸ÀÇ Å¬¶óÀ̾ðÆ®/¼­¹ö(C/S)¹æ½ÄÀ¸·Î ¿î¿µµÇ´ø ±â¾÷ȯ°æÀ» ¼ÒÀ§ ÀÎÆ®¶ó³ÝÀ¸·Î ÀüȯÇÏ´Â ½Ãµµ°¡ Ȱ¹ßÇØÁö°í ÀÖ´Ù. ÀÎÆ®¶ó³ÝÀº ±â¾÷³»ÀÇ ¸ðµç ¾÷¹«È°µ¿À» À¥±â¹Ý¿¡¼­ ÇÒ ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀÌ ±× ¸ñÇ¥¶ó°í ÇÒ ¼ö ÀÖ´Ù.

< ±×¸² 1. Web ±â¼úÀÇ ¹ßÀü ¹æÇâ >

ÀÎÆ®¶ó³ÝÀÇ ±Ã±ØÀûÀÎ ¸ñÇ¥´Â Àü»çÀûÀÚ¿ø°ü¸®(ERP)À¸·Î½á ±â¾÷³»ÀÇ ±â¹Ý µ¥ÀÌŸ¿Í ¹®¼­µéÀ» À¥È¯°æ¿¡¼­ ó¸®ÇÏ´Â °ÍÀÌ´Ù. ¿À´Ã³¯ ¿ì¸®°¡ ÈçÈ÷ ¸»ÇÏ´Â ÀÎÆ®¶ó³ÝÀº ±âÁ¸ÀÇ C/S ȯ°æ¿¡¼­ ¿î¿µµÇ´ø ±×·ì¿þ¾î¸¦ À¥È¯°æÀ¸·Î ¿Å°Ü ³õÀº °ÍÀ» ¸»ÇÑ´Ù. ±×·ì¿þ¾î´Â ±âº»ÀûÀ¸·Î ¸ÞÀÏ, °Ô½ÃÆÇ, °áÀ縦 ±âº»±¸¼ºÀ¸·Î ÇÑ ÆÐŰÁö·Î µÇ¾î ÀÖ´Ù. ÀÎÆ®¶ó³ÝÀÇ Æ¯Â¡À» ¾Ë¾Æº¸±â À§ÇØ ±×·ì¿þ¾î¸¦ ´ëüÇÏ´Â °³³äÀ¸·Î½áÀÇ ÀÎÆ®¶ó³Ý°ú ±âÁ¸ÀÇ ±×·ì¿þ¾î¸¦ ºñ±³ÇØ º¸±â·Î ÇÏÀÚ.

 

±× ¸¹Àº À¥ÀÇ ½Å±â¼úÁß¿¡ Çϳª°¡ ¹Ù·Î ¿©±â¼­ ¼Ò°³ÇÏ´Â ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ ÀÎÆ®¶ó³Ý °³¹ßÀÌ´Ù.

1.2 ÀÎÆ®¶ó³Ý¿¡¼­ÀÇ ÀÚ¹Ù

ÀÚ¹Ù¿¡ °ü·ÃµÈ ¿Â¶óÀÎ ¼³¸í¼­´Â www.javasoft.com/docÀ» ÂüÁ¶Çϱâ·Î ÇÏ°í ¿©±â¼­´Â ÀÎÆ®¶ó³Ý¿¡ °ü·ÃµÈ ÀÚ¹ÙÀÇ ¿ª»ç¸¦ °£·«È÷ ¾ð±ÞÇØ º»´Ù.

ÀÚ¹Ù°¡ ¹ßÇ¥µÈÁö 1³â¹ÝÁ¤µµ Áö³­ ¿äÁò WWW»ó¿¡¼­ ¹ú½á ±âÁ¸ÀÇ ¾ð¾îµéÀ» À§ÇùÇÏ´Â Á¸Àç·Î ÀÚ¹Ù°¡ ¶°¿À¸£°í ÀÖ´Â °ÍÀ» »ý°¢ÇÏ¸é °¡È÷ Æø¹ßÀûÀÎ ÀαâÀÎ °Í °°´Ù. ¸¹Àº ±âÁ¸ÀÇ ¾ÖÇø®ÄÉÀ̼ǵéÀÌ ÀÚ¹Ù·Î ´Ù½Ã ¸¸µé¾îÁö°í ÀÖÀ¸¸ç ¸¹Àº ÀÚ¹Ù ÇÁ·Î±×·¡¹Ö ȯ°æÀÌ Á¦°øµÇ±â ½ÃÀÛÇß°í, Á¡Â÷ÀûÀ¸·Î À¥¼­¹ö¿¡¼­µµ ÀÚ¹ÙÁö¿øÀÌ ´Ã°í ÀÖ´Ù. ƯÈ÷ JDBCÀÇ ¹ßÇ¥´Â ÀÚ¹ÙÀÇ ÀÎÆ®¶ó³Ý¿¡ÀÇ ÀÀ¿ëÀ» °¡´ÉÄÉÇÑ Áß¿äÇÑ ÀÏÀ̶ó°í º»´Ù.

ÀÎÆ®¶ó³Ý¿¡¼­ ÀÚ¹Ù°¡ ¾²À̱â À§Çؼ­ ÇÙ½ÉÀûÀÎ ¿ä¼Ò´Â ´ÙÀ½ÀÇ ¼¼ °¡Áö¶ó°í ÇÒ ¼ö ÀÖ´Ù. .

2. ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ ÀÎÆ®¶ó³Ý °³¹ß

2.1 ÀÎÆ®¶ó³ÝÀÇ ±¸Á¶

ÀÎÆ®¶ó³ÝÀÇ ±¸Á¶¸¦ DB Áß½ÉÀ¸·Î º¸¸é 2-tier(±×¸² 1)¿Í 3-tier¹æ½ÄÀ¸·Î ³ª´­ ¼ö ÀÖ´Ù. 2-tier¹æ½ÄÀº ÀÚ¹Ù ¾ÖÇ÷¿µîÀ» ½á¼­ Ŭ¶óÀÌ¾ðÆ®¿¡¼­ Á÷Á¢ DB¿¡ Á¢±ÙÇϹǷΠ¼Ò±Ô¸ð ¾ÖÇø®ÄÉÀ̼ǿ¡ ÀûÇÕÇÏ´Ù. À¥ ¾ÖÇø®ÄÉÀ̼ÇÀÇ Æ¯¼º»ó DB ¿¬°áÀÌ ºó¹øÇÏ°Ô ¹ú¾îÁö°í DB ¿¬°á Äڵ尡 ¾ÖÇ÷¿¿¡ ´ã°Ü¾ß Çϱ⠶§¹®¿¡ ¼º´ÉÀÌ ¶³¾îÁö´Â ´ÜÁ¡ÀÌ ÀÖ´Ù.

< ±×¸² 2. 2-tier : Java appletÀ» »ç¿ëÇÏ´Â ¹æ½Ä >

3tier¹æ½ÄÀº À¥¼­¹ö³ª ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö°¡ DB¿Í Ŭ¶óÀÌ¾ðÆ®»çÀÌ¿¡ Á¸ÀçÇÑ´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ ¾Æ´Ñ ¼­¹öÂÊÀÇ ÇÁ·Î±×·¥ÀÌ DB¿¡ Á¢±ÙÇϱ⠶§¹®¿¡ DB ¿¬°áÀÇ °ü¸®°¡ °¡´ÉÇØÁö°í º¸´Ù È¿À²ÀûÀΠ󸮰¡ °¡´ÉÇØÁø´Ù. CGI-BINÀ» ÀÌ¿ëÇÑ DB¿¬µ¿ ¹æ¹ýÀº Áö±Ý±îÁö À¥¿¡¼­ DB¿Í ¿¬µ¿Çϱâ À§ÇÑ °¡Àå º¸ÆíÀûÀÎ ¹æ¹ýÀ̾ú´Ù. ±×·¯´Ù Á¡Â÷ CGI-BINÀÇ ¼Óµµ°¡ ¹®Á¦°¡ µÇ¾ú°í ¼­¹ö API¹æ½ÄÀÎ NSAPI, ISAPIÀÌ ¸¹ÀÌ ¾²À̰í ÀÖ´Ù.

3-tier¹æ½ÄÀº ¼­·Ð¿¡¼­ ¾ð±ÞÇÑ¹Ù¿Í °°ÀÌ ´Ù½Ã À¥¼­¹öÀÇ È®ÀåÀ» ÀÌ¿ëÇØ¼­ DB¸¦ Á¢±ÙÇÏ´Â ¹æ¹ý(±×¸² 2)°ú ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö¸¦ ÀÌ¿ëÇØ¼­ DB¸¦ Á¢±ÙÇÏ´Â ¹æ¹ý(±×¸² 3)À¸·Î ³ª´­ ¼ö ÀÖ´Ù. Çö ´Ü°è¿¡¼­´Â À¥¼­¹öÀÇ È®ÀåÀÌ ÁÖ·ù¸¦ ÀÌ·ç°í ÀÖÁö¸¸ ½Ã½ºÅÛÀÇ Ã³¸® ±Ô¸ð°¡ Ä¿Áö°í ºÐ»ê ȯ°æÀ¸·Î °¥¼ö·Ï ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö¸¦ ÀÌ¿ëÇÏ´Â ÀÏÀÌ Áõ°¡ÇÒ °ÍÀ¸·Î »ý°¢µÈ´Ù.

< ±×¸² 3. 3tier : Web server¸¦ »ç¿ëÇÏ´Â ¹æ¹ý >

< ±×¸² 4. 3tier : Application server ¸¦ »ç¿ëÇÏ´Â ¹æ¹ý >

2.2 ÇÁ·Î±×·¡¹Ö ȯ°æ

ÀÚ¹Ù IDE(Integrated Development Environment) ÇÁ·Î±×·¡¹Öȯ°æÀ¸·Î´Â MSÀÇ VJ++ , SunÀÇ Java Workshop , SymantecÀÇ Visual CafeµîÀÌ ÀÖ´Ù. VJ++ 1.0Àº Microsoft»çÀÇ ´Ù¸¥ °³¹ßÅø°ú °°Àº ÀÎÅÍÆäÀ̽º¸¦ ÃëÇϰí À־ ºÎ´ã¾øÀÌ Á¢±ÙÇØ º¼ ¼ö ÀÖ¾ú°í, SunÀÇ Java Workshop 1.0Àº Windows 95¿¡¼­ Á¦°øµÇ´Â ±â´ÉÀÌ ´Ù¾çÇÏÁö ¸øÇϰí ÀüüÀûÀ¸·Î ¿©ÀüÈ÷ ´À¸° °¨ÀÌ ¾øÁö ¾Ê¾Ò´Ù. Java Workshop( http://www.sun.com/developer-products/java )°ú Visual Cafe( http://cafe.symantec.com/vcpr1.html )´Â trial versionÀ» ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù.

RAD(Rapid Application Development) GUI Åø·Î´Â BorlandÀÇ Latte, NetDynamicsÀÇ NetDynamics StudioµîÀÌ ÀÖÀ¸¸ç ÀÎÆ®¶ó³ÝÀÌ SI(System Integration)¿Í °áÇյǾîÁö¸é¼­ ´õ¿í´õ ¸¹Àº RAD GUI toolÀÌ °³¹ßµÇ¾îÁú °ÍÀ¸·Î º¸ÀδÙ.

2.3 DB connectivity in your hand - JDBC

< ±×¸² 5. jdbc driverÀÇ 3°¡Áö ÇüÅ >


JDBC´Â 96³â 3¿ù Sun¿¡ ÀÇÇØ ¹ßÇ¥ÇÑ Java¿¡¼­ÀÇ DB ¿¬°á¿¡ °üÇÑ Ç¥ÁØ ±Ô¾àÀÌ´Ù. JDBC¸¦ »ç¿ëÇϱâ À§Çؼ­´Â JDBC driver class, JDBC driver, DBMS°¡ ÇÊ¿äÇÏ´Ù. ÇÑ ¹ø JDBC API¸¦ »ç¿ëÇØ ÀÛ¼ºµÈ ÄÚµå´Â DBÀÇ Á¾·ù¿¡ ¹«°üÇÑ Æ¯Â¡À» °¡Áö°Ô µÈ´Ù. ÁÖÀÇÇÒ Á¡Àº DB¸¶´Ù µ¶Æ¯ÇÑ Æ¯Â¡µéÀ» ¸¹ÀÌ °¡Áö°í ÀÖÀ¸¹Ç·Î Á» ´õ ¸¹Àº DB¸¦ Áö¿øÇϱâ À§Çؼ­´Â ÀÌ·¯ÇÑ Æ¯Â¡µéÀ» ¾²Áö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. ¸¹Àº ȸ»çµéÀÌ JDBC driver¸¦ ³»³õ°í Àִµ¥ ±× ÇüÅ´ ũ°Ô ´ÙÀ½ÀÇ ¼¼ °¡Áö·Î ³ª´­ ¼ö ÀÖ´Ù.

10¿ù ÇöÀç ¸¹Àº JDBC Driver°¡ ³ª¿Í ÀÖÁö¸¸ »ó´ç¼ö°¡ beta¿¡ ¸Ó¹°·¯ ÀÖ´Ù. ´ÙÀ½ÀÇ ¿¹Á¦¿¡ »ç¿ëµÈ jdbcKona/T3µµ ÀÚÁÖ Á×´Â °æ¿ì°¡ ¹ß»ýÇß´Ù. ÇÏÁö¸¸ ±× ¹ßÀü ¼Óµµ¿Í °ü½Éµµ·Î º¼¶§ Á¶¸¸°£ ¾ÈÁ¤È­µÈ Á¦Ç°À» º¸°Ô µÇ±â¸¦ ±â´ëÇØ º»´Ù.

3. ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ ÀÎÆ®¶ó³Ý °³¹ß ȯ°æ

3.1 Web Server È®ÀåÀ» ÅëÇÑ ÀÚ¹Ù Áö¿ø
- Netscape Web Server

Netscape»çÀÇ ÀÎÆ®¶ó³Ý °³¹ß Àü·«Àº Netscape ONE(Open Network Environment)À» Áß½ÉÀ¸·Î ÇÑ´Ù. Netscape ONE Àü·«Àº SuiteSpotÀ̶ó´Â ¼­¹ö±ºÀ§¿¡ Java¿Í JavaScript¸¦ Áö¿øÇϰí Ŭ¶óÀ̾ðÆ®ÂÊÀÇ Netscape NavigatorÀ§¿¡ Java applets, JavaScript, HTML, plug-insµîÀÇ È¯°æÀ» Á¦°øÇØ ÁØ´Ù. ¸ðµÎ Ç÷§Æû¿¡ ÀÇÁ¸ÇÏÁö ¾Ê°í ±âÁ¸¿¡ Ç¥ÁØÀ¸·Î ÀÎÁ¤µÇ´ø ±â¼úµéÀ» °³¹ßȯ°æÀ¸·Î äÅÃÇß´Ù´Â Á¡ÀÌ Æ¯Â¡ÀÌ´Ù. Netscape»çÀÇ °³¹ßȯ°æÀ» º¸¸é JavaScript·Î ´ëº¯µÇ´Â Livewire¿¡¼­´Â Oracle, Sybase, InformixµîÀÇ DB driver°¡ Á¦°øµÇ°í dzºÎÇÑ ±â¹Ý API°¡ Á¦°øµÇ°í ÀÖ´Ù. ÀÌ¿¡ ¹ÝÇØ Java¿¡¼­´Â JDBC¿¡ ´ëÇÑ Áö¿øÀÌ ºüÁ® ÀÖ°í APIµéµµ HTTP¸¦ Áö¿øÇÏ´Â Á¤µµ¿¡ ¸Ó¹°°í ÀÖ´Ù. ±×·¯³ª ÀúÀÚÀÇ Å×½ºÆ® °á°ú·Î´Â À¥¼­¹öÀÇ È®ÀåÀ¸·Î ÀÚ¹Ù¸¦ ÀÌ¿ëÇØ¼­ ÀÎÆ®¶ó³Ý ȯ°æÀ» ±¸ÃàÇϴµ¥´Â ¹«¸®°¡ ¾ø¾î º¸¿´´Ù.

onewp

< ±×¸² 6. Netscape ONEÀÇ ±¸Á¶

(Netscape's IntraNet white paper¿¡¼­ ¹ßÃé) >

3.1.1 DB ¿¬°á ¿¹

/* jdbc test using t3 server and netscape server 2.0*/

import netscape.server.applet.HttpApplet;
import xjava.sql.*;
import weblogic.db.xjdbc.*;
import weblogic.common.*;                                                                                                                                          
import java.util.*;
import java.io.*;

public class showPublisher extends HttpApplet {
   public void run() throws Exception {
      if(returnNormalResponse("text/html")) {
         PrintStream out=getOutputStream();
         out.println("<body bgcolor=#ffffff text=#000000>");
         String s="Publisher TableÀÇ Ãâ·Â";
         out.println("<h1>"+s+"</h1>");
         select(out);
         out.println("</body>");
      }
   }
        
   void select(PrintStream out) {
      T3Client t3=null;
      Connection conn = null;
      try {
         t3=new T3Client("t3://elf:7001");
         t3.connect();
         Class.forName("weblogic.jdbc.t3client.Driver");
         Properties dbprops = new Properties();
         dbprops.put("user", "sa");
         dbprops.put("password", "password");
         dbprops.put("server", "");
                     
         Properties t3props=new Properties();
         t3props.put("weblogic.t3", t3);
         t3props.put("weblogic.t3.dbprops", dbprops);
         t3props.put("weblogic.t3.driver", "weblogic.jdbc.dblib.Driver");
         t3props.put("weblogic.t3.url", "jdbc:weblogic:mssqlserver");

         Class.forName("weblogic.jdbc.t3client.Driver");
         conn = DriverManager.getConnection("jdbc:weblogic:t3client", t3props);
                
         Statement stmt = conn.createStatement();
         stmt.execute("use pubs"); 
         ResultSet rs=stmt.executeQuery("select name, company, phone from Publisher");
         out.println("<table border=1> ");
         out.println("<tr> <td> name      <td> company     <td> phone </tr>");
         while(rs.next()) {
            out.println("<tr> <td>"+rs.getString("name")+"<td>"+
               rs.getString("company") +"<td>"+rs.getString("phone")+"</tr>");
         }
         out.println("</table>");
         rs.close();
         stmt.close();
    }
    catch(Exception e1) {
       if(conn!=null) 
       try {
           conn.close();
        } catch(SQLException sqe) {
            out.println("connection close failure");
        }
        if(t3!=null)
           try {
               t3.disconnect();
           } catch(Exception e) {
              out.println("t3 connection close failure");
           }
        }
   }
}

3.2 DB Áß½ÉÀÇ È¯°æ
- ORACLE Web server

< ±×¸² 7. OracleÀÇ Web server 2.0 ±¸Á¶ >

Oracle Web server 2.0( http://www.oracle.com/products/websystem/intranet/html/ws2tech.html )ÀÇ Æ¯Â¡Àº ¹Ù·Î WRB(Web Request Broker)¿Í Catridge·Î ¿ä¾àµÈ´Ù. Web Listener¿¡¼­ HTTP ¿äûÀÌ Ã³¸®µÇ°í Web Listener°¡ ƯÁ¤ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¼öÇàÀ» WRB³»ÀÇ Web Dispatcher¿¡°Ô ¿ä±¸ÇÑ´Ù. Web Dispatcher´Â WRB Excecution Engine(WRBX)¸¦ ÀÌ¿ëÇÏ¿© ¿ä±¸¹ÞÀº ¾ÖÇø®ÄÉÀ̼ÇÀ» ¼öÇàÇÑ´Ù. À̶§ WRBX´Â ¹Ì¸® µî·ÏµÈ ÇØ´ç ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ CatridgeÀ§¿¡¼­ ½ÇÇà½ÃŲ´Ù. °¡·É À¯Àú°¡ ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀ» ¿äûÇßÀ»¶§ Java Interpreter Catridge°¡ ÇÊ¿äÇϰí PL/SQL script¸¦ ¿äûÇßÀ»¶§´Â PL/SQL ½ÇÇà Catridge°¡ ÇÊ¿äÇÑ °ÍÀÌ´Ù. ÀÌ·¯ÇÑ Catridge´Â WRB API¸¦ ÀÌ¿ëÇÏ¿© À¯Àú°¡ Á÷Á¢ ¸¸µé ¼öµµ ÀÖ´Ù.ÀÌó·³ Oracle¿¡¼­´Â CatridgeÀÇ Çϳª·Î Javaȯ°æÀÌ ±¸ÇöµÇ¾î ÀÖ´Ù.

OracleÀº JDBC¸¦ Ưº°È÷ Áö¿øÇÏÁö´Â ¾Ê°í ±âÁ¸ ÀÚ»çÀÇ DB ¾ð¾îÀÎ PL/SQLÀ» Java class·Î ¹Ù²Ù¾îÁÖ´Â Åø(pl2java)À» Á¦°øÇÑ´Ù. µû¶ó¼­ ±âÁ¸¿¡ ÀÛ¼ºµÇ¾î ÀÖ´ø PL/SQL ¹®ÀåÀ» ±×´ë·Î ÀÚ¹Ù Äڵ忡¼­ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ÀåÁ¡ÀÌ ÀÖ´Ù.

Oracle Web serverÀÇ ÀåÁ¡Àº ¹«¾ùº¸´Ùµµ DB ¿¬°á ¼ÓµµÀÌ´Ù. ÀÚ»çÀÇ DB¿¡ ¸Â°Ô ƯȭµÇ¾î ÀÖ´Ù´Â Á¡¿Ü¿¡µµ DB connectionÀ» À¯ÀúÀÇ ¿äûÀÌ ³¡³­ ÈÄ¿¡µµ WRB°¡ °¡Áö°í ÀÖ´Ù°¡ ´ÙÀ½ÀÇ connection¶§ Àç»ç¿ëÇϹǷΠWeb/ DB¿¬µ¿¶§ÀÇ °íÁúÀûÀÎ ¹®Á¦ÀÎ DB connection¿¡ µå´Â ½Ã°£À» ÁÙ¿´´Ù. ÀÌ·¯ÇÑ ÀåÁ¡µéÀÌ µ¸º¸À̱⠶§¹®¿¡ OracleÀ» ÀÚ»çÀÇ DB·Î ä¿ëÇϰí ÀÖ´Â °÷¿¡¼­´Â Oracle Web server¸¦ ÀÌ¿ëÇÏ´Â °ÍÀÌ À¯¸®Çϸ®¶ó »ý°¢µÈ´Ù.

3.2.1 DB ¿¬°á ¿¹

<EmployeeReport.java>
import oracle.rdbms.*; 
import oracle.plsql.*; 
import oracle.html.*;  

public class EmployeeReport {

  public static void main (String args[]) throws HtmlException {

    HtmlHead hd = new HtmlHead("Employee Listing");
    HtmlBody bd = new HtmlBody();
    HtmlPage hp = new HtmlPage(hd, bd);
    hp.printHeader();

    Session.setProperty("ORACLE_HOME", "/disc1/oracle/orainst/app/oracle/product/7.3.2");
    Session.setProperty("TNS_ADMIN", 
    "/disc1/oracle/orainst/app/oracle/product/7.3.2/network/admin");
    Session session;

    // create a database session and logon
    try {
      session = new Session("scott", "scott", "Sharon_handy");
    } catch (ServerException e) {
      bd.addItem(new SimpleItem("Logon fails: " + e.getSqlerrm()));
      hp.print();
      return;
    }

    // create a new instance of Employee package
    Employee employee = new Employee(session);

    // find the department name "Sales"
    String deptName = "Sales";

    // create objects to encapsulate PL/SQL values that are
    // used as parameters
    PStringBuffer pDeptName = new PStringBuffer(30, deptName);
    PStringBuffer pEmployeeName[];
    PDouble       pEmployeeNumber[];
    PDouble       pEmployeeCount;

    // print report header
    bd.addItem("Department " + pDeptName + ":").addItem(SimpleItem.Paragraph);

    // call Employee packate to count the number of employees in
    // the department
    try {
      pEmployeeCount = employee.count_employees(pDeptName);
    } catch (ServerException e) {
      bd.addItem("Fail to retrieve employee information for department " +
                 deptName + ": " + e.getSqlerrm());
      hp.print();
      return;
    }
    int employeeCount = (int)pEmployeeCount.doubleValue();
    if (employeeCount == 0) {
      bd.addItem("No employee found under department " + deptName);
      hp.print();
      return;
    }

    // allocate the arrays for employee names and numbers
    pEmployeeName     = new PStringBuffer[employeeCount];
    pEmployeeNumber   = new PDouble[employeeCount];

    // allocate the buffers to retrieve employee information
    for(int i = 0; i < employeeCount; i++) {
      // max length of employee name is 30 (characters)
      pEmployeeName[i]   = new PStringBuffer(30);
      pEmployeeNumber[i] = new PDouble();
    }

    // call Employee packate to look up employees in the dept
    try {
      employee.list_employees(pDeptName, pEmployeeName, pEmployeeNumber);
    } catch (ServerException e) {
      bd.addItem("Fail to retrieve employee information for department " +
                 deptName + ": " + e.getSqlerrm());
      hp.print();
      return;
    }

    // generate report
    DynamicTable tab = new DynamicTable(2);
    TableRow row = new TableRow();
    row.addCell(new TableHeaderCell("Employee Name"))
       .addCell(new TableHeaderCell("Employee Number"));
    tab.addRow(row);

    for (int i = 0; i < employeeCount; i++) {
      row = new TableRow();
      if (pEmployeeNumber[i].isNull())
        row.addCell(new TableDataCell(pEmployeeName[i].toString()))
           .addCell(new TableDataCell("new employee"));
      else
        row.addCell(new TableDataCell(pEmployeeName[i].toString()))
           .addCell(new TableDataCell(pEmployeeNumber[i].toString()));
      tab.addRow(row);
    }
    hp.addItem(tab);
    hp.print();

    // logoff from database
    try {
      session.logoff();
    } catch (ServerException e);
  }
}



3.3 Pure Java Web Server
- Jeeves by Sun

< ±×¸² 8. Jeeves architecture >

À¥ ¼­¹ö ÀÚü°¡ ÀÚ¹Ù·Î ÄÚµùµÇ¾îÁ® ÀÖ´Ù¸é ÀÚ¹Ù ÇÁ·Î±×·¥À» ¼öÇàÇÏ´Â µ¥´Â °¡Àå ÀÌ»óÀûÀÏ °ÍÀÌ´Ù. ¹Ù·Î Sun¿¡¼­ ¸¸µç Jeeves( http://www.javasoft.com/jeeves )°¡ ±×°ÍÀÌ´Ù. JeevesÀÇ ÇöÀç ¹öÁ¯(alpha 1.2)Àº Netscape Server³ª Internet Information Server¿¡¼­ º¼ ¼ö ÀÖ´Â ¸¹Àº Ư¡µéÀÌ ¾øÀ¸¹Ç·Î ¾ÆÁ÷±îÁö »ó¿ëÀ¸·Î ¾²±â¿¡´Â ¹«¸®°¡ ÀÖÁö¸¸ °ü½ÉÀÖ°Ô ÁöÄÑ º¸´Â °Íµµ ³ª»ÚÁö ¾ÊÀ¸¸®¶ó »ý°¢µÈ´Ù.

Jeeves´Â handler poolÀ̶ó°í ÇØ¼­ ¹Ì¸® Á¤ÇØÁø °¹¼öÀÇ thread°¡ µ¹°í ÀÖ´Ù. ÀÌ thread¿¡¼­´Â ¿äû¹ÞÀº ¾ÖÇø®ÄÉÀ̼Ç, servletÀ» ¼öÇàÇÑ´Ù. servlet¿¡´Â ±âÁ¸ÀÇ cgi-binÀ» ½ÇÇà½ÃÄÑ ÁÖ´Â cgi servlet, ¹®¼­¸¦ º¸³¾ ¼ö ÀÖ´Â file servlet, ±×¹Û¿¡ À¯Àú°¡ ¸¸µç servletµîÀÌ ÀÖ´Ù.

JDBC Driver´Â ¾Õ¿¡¼­ ¾ð±ÞÇÑ ¼¼°¡Áö ÇüŸ¦ ¸ðµÎ ¾µ ¼ö ÀÖ°í Netscape Web server¿¡¼­ ¼Ò°³ÇÑ ¿¹Á¦¿¡¼­ httpºÎºÐÀ» ´Ù·ç´Â °÷¸¸ ¼öÁ¤ÇÏ¸é µÇ¹Ç·Î ¿¹Á¦ÄÚµå´Â ÀûÁö ¾Ê´Â´Ù.

3.4 Application Server¸¦ ÅëÇÑ ÀÚ¹Ù Áö¿ø
- Netdynamics

Netdynamics »ç¿¡¼­´Â Ŭ¶óÀ̾ðÆ®ÂÊÀÇ RAD GUI ÅøÀ», ¼­¹öÂÊÀÇ DB ¿¬°áÀ» Áö¿øÇÏ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö¸¦ Á¦°øÇÑ´Ù. ¿ì¸®´Â C/S ȯ°æ¿¡¼­ RAD GUI ÅøÀÌ ¾ó¸¶³ª ¼º°øÇߴ°¡¸¦ Àß ¾Ë°í ÀÖ´Ù. µû¶ó¼­ Web/DB °³¹ß ȯ°æ¿¡¼­µµ ÀÌ·¯ÇÑ RAD GUI ÅøÀÌ Áß¿äÇÑ ¿ªÇÒÀ» Çϸ®¶ó´Â °ÍÀº ÀÚ¸íÇÑ ÀÏÀÌ´Ù. ÀÌ Åø¿¡ ÀÇÇØ ÀÛ¼ºµÈ ÄÚµå´Â ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö¿¡ ¿Ã¸± ¼ö ÀÖ°í ÈÄ¿¡ »ç¿ëÀÚÀÇ ¿äûÀÌ ÀÖÀ»¶§ ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö¿¡ ÀÇÇØ ½ÇÇàµÈ´Ù. À̶§ ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹ö¿¡ ¿Ã¶ó°¡´Â ¸ðµç ÄÚµå´Â ÀÚ¹Ù·Î »ý¼ºµÈ´Ù.

ÇÊÀÚ´Â ÀÌ È¯°æÀ» Á÷Á¢ ½á º¸Áö´Â ¸øÇßÁö¸¸ ±× ±¸Á¶¸¦ º¸¾ÒÀ»¶§ °³¹ßȯ°æÀ¸·Î¼­´Â °¡Àå ÀÌ»óÀûÀÎ ÇüŶó´Â »ý°¢ÀÌ µé¾ú´Ù. ±× ÀÌÀ¯´Â RAD GUI ÅøÀ» Áö¿øÇÔÀ¸·Î½á °³¹ß ±â°£ ´ÜÃàÀ» ³ë·È°í, ¾ÖÇø®ÄÉÀÌ¼Ç ¼­¹öÀÚü°¡ DB ¿¬°á ·ÎÁ÷À» °¡ÁüÀ¸·Î½á DB ¿¬°á ¹®Á¦¸¦ °³¹ßÀÚ°¡ ½Å°æ¾²Áö ¾Êµµ·Ï Ç߱⠶§¹®ÀÌ´Ù.

´ÙÀ½ÀÇ »çÀÌÆ®¿¡¼­ trial versionÀ» ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù.( http://www.netdynamics.com/download/download.html )

< ±×¸² 9. Netdynamics ȯ°æÀÇ ±¸Á¶ >

4. °á·Ð

º» ¹®¼­¿¡¼­´Â ÀÎÆ®¶ó³ÝÀ» °³¹ßÇÒ¶§ Áß¿äÇÑ ¿ä¼Ò·Î

À» »Ì¾Ò°í ÀÌÁß¿¡¼­ ¼­¹öÂÊÀÇ °³¹ßȯ°æ°ú DB¿¬°áÀ» ÁßÁ¡ÀûÀ¸·Î »ìÆì º¸¾Ò´Ù.

ÀÎÆ®¶ó³Ý °³¹ßȯ°æÀ¸·Î½áÀÇ ÀÚ¹Ù´Â ºÐ¸í ´ÙÀ½°ú °°Àº ÀåÁ¡À» °¡Áö°í ÀÖ´Ù. .

±×·¯³ª ¾ÆÁ÷±îÁö ¼­¹öÂÊÀÇ ÀÚ¹Ù¸¦ Áö¿øÇÏ´Â À¥¼­¹öÀÇ ¼öµµ ¸¹Áö ¾Ê°í JDBC Driver ¾ÈÁ¤È­ÀÛ¾÷µµ ÀÌ·ç¾îÁ®¾ß ÇÑ´Ù. ¹«¾ùº¸´Ù ÀÚ¹Ù¸¦ ÀÌ¿ëÇÑ ÀÎÆ®¶ó³Ý °³¹ßÀÌ È°¼ºÈ­µÇ±â À§Çؼ­´Â RAD GUI ÅøÀÌ º¸´Ù ¸¹ÀÌ °³¹ßµÇ¾îÁ®¾ß ÇÒ °ÍÀÌ´Ù. C/S ȯ°æ¿¡¼­ÀÇ PowerBuilder³ª Delphi°¡ °ÅµÎ¾ú´ø ¼º°øÀÌ ¾Æ¸¶µµ Web/DB °³¹ß¿¡¼­µµ ÀçÇöµÉ °ÍÀ̱⠶§¹®ÀÌ´Ù. ÀÌ·¯ÇÑ °üÁ¡¿¡¼­ º¸¾ÒÀ» ¶§ SunÀÌ ½ºÆå¼öÁØ¿¡¼­ ¹ßÇ¥ÇÑ Java Beans( www.javasoft.com/beans )´Â ÁÖ½ÃÇØ º¸¾Æ¾ßµÉ ¿òÁ÷ÀÓÀ̶ó ÇÒ ¼ö ÀÖ´Ù.

º» ¹®¼­¿¡¼­´Â ÀÎÆ®¶ó³Ý¿¡¼­ÀÇ ÀÚ¹Ù ÇÁ·Î±×·¡¹ÖÀ» ÁýÁßÀûÀ¸·Î ¾Ë¾Æ º¸¾ÒÁö¸¸ »ç½Ç ÇϳªÀÇ °Å´ëÇÑ ÀÎÆ®¶ó³ÝÀ» ±¸ÃàÇϱâ À§Çؼ­´Â »óȲ¿¡ µû¶ó ´Ù¾çÇÑ °³¹ßȯ°æÀÌ ¾²¿©Á®¾ß ÇÑ´Ù. º¸´Ù ¼Õ½¬¿î ÀÛ¾÷Àº scripting ¾ð¾î·Î Â¥¿© Áú ¼öµµ ÀÖÀ» °Å°í, ¼Óµµ°¡ ¹®Á¦½ÃµÇ´Â °÷¿¡¼­´Â ¿©ÀüÈ÷ NSAPI³ª ISAPI¸¦ ½á¾ß ÇÒ °ÍÀÌ´Ù. ¶ÇÇÑ DB°¡ Áß½ÉÀÌ µÈ´Ù¸é DB vendorµéÀÌ Á¦°øÇϴ ȯ°æÀ» »ç¿ëÇÏ´Â °ÍÀÌ ´õ ³ºÀ» ¼öµµ ÀÖ´Ù.

¸¶Áö¸·À¸·Î °­Á¶ÇÏ°í ½ÍÀº Á¡Àº µÎ¼­³Ê´ÞÀü¸¸Çصµ »ý°¢ÇÒ ¼ö ¾ø¾ú´ø ÀÎÆ®¶ó³ÝÀÇ ÀÚ¹Ù °³¹ß ȯ°æÀÌ ÀÌÁ¦ Á¡Â÷ÀûÀ¸·Î °¡½ÃÈ­µÇ°í ÀÖ´Ù´Â Á¡ÀÏ °ÍÀÌ°í ¿©Áö²¯ÀÇ ÀÚ¹ÙÀÇ ÇàÀû¿¡¼­ ¹Ì·ç¾î º¼¶§ ¾ÆÁÖ ºü¸£°Ô ¿ì¸® °ç¿¡¼­ Áß¿äÇÑ °³¹ßȯ°æÀÇ Çϳª·Î ÀÚ¸® ÀâÀ» °ÍÀÌ´Ù.

Âü°í¹®Çå(References)

[Sams 96]
Sams net, Java Unleashed, 1996
[Netscape 96]
Netscapr corp., The Netscape One Development Environment Vision and Product Roadmap , July 29, 1996
URL:http://home.netscape.com/comprod/one/white_paper.html
[Oracle 96]
Oracle corp., Oracle Web Server 2.0 Oct, 1996
URL: http://www.oracle.com/products/websystem/intranet/html/ws2tech.html
[Sun 96]
Sun Microsystems, JDBC : A Java SQL API
URL: http://www.javasoft.com/jdbc
[Shah 96]
Shah, Integrating Databases with Java via JDBC, May, 1996
URL: http://www.javaworld.com/jw-05-1996/jw-05-shah.html
[Sun 96]
Sun Microsystems, Overview of the Java HTTP Server Architecture, August, 1996
URL: http://www.javasoft.com/jeeves/alpha1/doc/architecture/
[Netdynamics 96]
Netdynamics, NetDynamics White Paper, 1996
URL: http://www.netdynamics.com/about/whitepaper.html

Last-Modified : Sunday, 20-Oct-96 KDT