|
Enterprise Java Technologies Tech Tips¿¡ ¿À½Å ¿©·¯ºÐÀ» ȯ¿µÇÕ´Ï´Ù. Java
2 Platform, Enterprise Edition (J2EE)¿¡ ±â¹ÝÇÑ enterprise Java
technologies ¿Í APIsÀÇ »ç¿ë¿¡ °üÇÑ ÃֽŠÁ¤º¸¸¦ ¾ò¾î °¡½Ã±â ¹Ù¶ø´Ï´Ù. ÀÌ ±Û¿¡¼´Â Java 2
SDK, Standard Edition, v 1.4¿Í Java 2 SDK, Enterprise Edition,
v 1.3.1 (Reference Implementation)¸¦ »ç¿ëÇÕ´Ï´Ù.
À̹ø È£¿¡¼´Â,
JNDIÀÇ ¼Ò°³
Entity
Resolver ÀÛ¼ºÇϱâ
ÀúÀÚ Mark Johnson
¿¹Á¦ÀÇ »ùÇà ¾ÆÄ«À̺긦 ´Ù¿î·Îµå
¹ÞÀ¸¼¼¿ä. ÄÁÅØ½ºÆ® ·çÆ®´Â ttaug2003ÀÌ°í »ùÇÃÄÚµåÀÇ »ç¿ë¹ýÀº index.html welcome file
¿¡¼ º¸½Ç ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÄÚµåÀÇ »ç¿ë¿¡ °üÇÑ ±ÇÇÑÀ̳ª Á¤º¸´Â license
terms¸¦ Âü°íÇϽñ⠹ٶø´Ï´Ù.
JNDIÀÇ ¼Ò°³
¸¹Àº J2EE°³¹ßÀÚµéÀÌ È¯°æ º¯¼ö(environment entries),
DataSource °´Ã¼, JMS ¸Þ½ÃÁö ¼ö½ÅÁö(JMS message
destinations) ±×¸®°í ¿£ÅÍÇÁ¶óÀÌÁî ºó Ȩ ÀÎÅÍÆäÀ̽º(enterprise bean home
interfaces)¸¦ ã°íÀÚ Java Naming and Directory Interface (JNDI)¸¦
ÀÌ¿ëÇÑ´Ù. ÇÏÁö¸¸ ¸¹Àº »ç¶÷µéÀº JNDI¿¡ ´ëÇÑ ÁøÁ¤ÇÑ ÀÌÇØ ¾øÀÌ ÀÌ·¯ÇÑ ±â´ÉÀ» ÇÏ´Â Äڵ带 ´Ü¼øÈ÷ º¹»çÇØ¼
ºÙÀÌ°í °íÄ¥ »ÓÀÌ´Ù. ÀÌ ÆÁÀº »ç¿ëÀÚÀÇ ¿£ÅÍÇÁ¶óÀÌÁî ½Ã½ºÅÛ¿¡ ¹èÆ÷µÈ ¸®¼Ò½º¸¦ ¾×¼¼½ºÇϱâ À§ÇØ JNDI¸¦ »ç¿ëÇÏ´Â
¹æ¹ýÀ» ¼Ò°³ÇÑ´Ù.
¿£ÅÍÇÁ¶óÀÌÁî ¾ÖÇø®ÄÉÀ̼ǵéÀº ±×°ÍµéÀÇ Æ¯¼º»ó, ºñÁî´Ï½º ¿ÀÆÛ·¹À̼ÇÀ» Áö¿øÇϱâ À§ÇØ ¿©·¯°÷¿¡ ¹èÆ÷µÈ
¸®¼Ò½ºµéÀ» Çѵ¥ ¸ð¾Æ¾ß ÇÑ´Ù. »õ·Î¿î ½Ã½ºÅÛÀÌ »ý¼ºµÇ¾ú´Ù°Å³ª, ±âÁ¸ÀÇ ½Ã½ºÅÛÀÌ ¾÷±×·¹ÀÌµå µÇ¾ú´Ù°Å³ª, ¿À·¡µÈ
½Ã½ºÅÛÀÌ ´õ ÀÌ»ó ÀÛµ¿ÇÏÁö ¾ÊÀ» ¶§ ¼ºñ½ºµéÀÌ ¿À°¡°Ô µÈ´Ù. ¾ÖÇø®ÄÉÀÌ¼Ç ¼ºñ½º¸¦ ¼·Î ºÐ¸®ÇÏ´Â °ÍÀº ½Ã½ºÅÛÀ»
½±°Ô À¯Áö/È®ÀåÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù. ÇÏÁö¸¸ ¼ºñ½º°¡ ºÐ¸®µÇ¾úÀ» ¶§, °¢ÀÚÀÇ ¿ªÇÒÀ» Á¦´ë·Î ¼öÇàÇϱâ À§Çؼ´Â ¼·Î¸¦
ã¾Æ³¾ ¼ö ÀÖ¾î¾ß¸¸ ÇÑ´Ù. ÀÌ ¶§°¡ ¹Ù·Î ¸í¸í ¼ºñ½º(naming services)¿Í µð·ºÅ丮°¡ À¯¿ëÇÑ
½ÃÁ¡ÀÌ´Ù.
¸í¸í ¼ºñ½º´Â À̸§À» ÀÌ¿ëÇØ¼ °´Ã¼³ª °´Ã¼¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ °Ë»öÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ±×·¯ÇÑ °´Ã¼·ÎÀÇ
¿¹´Â ¸Þ½ÃÁö Å¥(message queues), µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼Ç ÆÑÅ丮(database connection
factories), ȯ°æ ÆÄ¶ó¹ÌÅÍ(environment parameters), ±×¸®°í ¿£ÅÍÇÁ¶óÀÌÁî ºó°ú °°Àº
ºÐ»ê ÄÄÆ÷³ÍÆ®(distributed components)µîÀÌ ÀÖ´Ù. ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÚµéÀº ¸í¸í ¼ºñ½º³»ÀÇ
À̸§¿¡ °´Ã¼µéÀ» ¹ÙÀεùÇØ¼ °´Ã¼¿¡ À̸§À» ºÙÀδÙ. ¾ÖÇø®ÄÉÀÌ¼Ç ÄÚµå´Â ÀÌ·¸°Ô ¹ÙÀεùµÈ À̸§À¸·Î °´Ã¼µéÀ» °Ë»öÇϱâ
À§ÇØ ¸í¸í ¼ºñ½º¸¦ »ç¿ëÇÒ ¼ö°¡ ÀÖ´Ù. ÀÌ·¯ÇÑ ºÐ¸®(decoupling)´Â ³×Æ®¿öÅ© °´Ã¼µéÀ» »ç¿ëÇÏ´Â ½Ã½ºÅÛ
ÄÄÆ÷³ÍÆ®¿¡ ´ëÇÑ ¾î¶°ÇÑ º¯°æ¾øÀÌ À¯Áö º¸¼ö¸¦ À§ÇØ ¿Ã¸®°Å³ª ³»¸± ¼ö ÀÖ°í, ¿äûµéÀ»
¸®´ÙÀÌ·ºÆ®(redirect)½Ãų ¼ö ÀÖÀ¸¸ç, ¼ºñ½º°¡ ´ÙÀ̳ª¹ÍÇÏ°Ô ÀçÁ¶Á¤µÉ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù.
ÀÌ¹Ì ±âÁ¸ÀÇ ¸í¸í ¼ºñ½º¿¡ ´ëÇØ Àß ÀÌÇØÇϰí ÀÖÀ¸¸®¶ó°í »ý°¢µÈ´Ù.
- DNS (Domain Name Service)´Â
java.sun.com°ú °°Àº
È£½ºÆ®³×ÀÓÀ» %nslookup java.sun.com%°ú °°Àº IPÁÖ·Î¼Ò ¸ÅÇÎÇÑ´Ù.
- CORBA (Common Object Request Broker Architecture)¸¦ À§ÇØ
¾²ÀÌ´Â COS (Common Object Services) ¸í¸í ¼ºñ½º ´Â CORBA ÀÎÅÍÆäÀ̽º
À̸§(interface names)À» °´Ã¼ ÀÎÅÍÆäÀ̽º·Î ¸ÅÇÎÇÑ´Ù.
»ç¿ëÀÚ´Â ÄÄÇ»ÅÍÀÇ ÆÄÀϽýºÅÛÀ» ÆÄÀÏÀÇ °æ·Î(pathname)¿¡ ÆÄÀÏÀÇ ÄÁÅÙÃ÷¸¦ ¸ÅÇÎÇÏ´Â ÀÏÁ¾ÀÇ ¸í¸í
¼ºñ½º·Î »ý°¢ÇÒ ¼ö ÀÖ´Ù.
¹ØÀÇ ±×¸²Àº ¸í¸í ¼ºñ½º°¡ ¼ºñ½º ³×ÀÓÀ» µ¥ÀÌÅͳª ¼ºñ½º ÀÎÅÍÆäÀ̽º·Î ¸ÅÇÎÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÖ°í ÀÖ´Ù.
À̸§(name)À» °´Ã¼·Î ¸ÅÇÎÇÏ´Â °ÍÀ» ¹ÙÀεùÀ̶ó ºÎ¸¥´Ù. ¹ÙÀεùÀº ¸í¸í ¼ºñ½º¸¦ Çü¼ºÇÏ´Â »ç¶÷¿¡ ÀÇÇØ
»ý¼ºµÈ´Ù. ´ëºÎºÐÀÇ ¸í¸í ¼ºñ½º´Â ÇÁ·Î±×·¥ÀÌ ·±Å¸Àӽÿ¡ À̸§À» °´Ã¼·Î ¹ÙÀεùÇϰųª ÇØÁ¦ÇÏ´Â ¹æ¹ýµµ Á¦°øÇÑ´Ù.
ÄÁÅØ½ºÆ®´Â À̸§À» °´Ã¼·Î ¹ÙÀεùÇÑ ÁýÇÕÀÌ´Ù. ¿¹¸¦ µé¸é, ÆÄÀϽýºÅÛ¿¡¼ °æ·Î
/home ´Â ÈçÈ÷ ½Ã½ºÅÛÀÇ À¯Àú µð·ºÅ丮¸¦ Æ÷ÇÔÇÏ´Â ÄÁÅØ½ºÆ®ÀÌ´Ù. ÄÁÅØ½ºÆ®´Â ´Ù¸¥
ÄÁÅØ½ºÆ®¸¦ Æ÷ÇÔÇÒ ¼öµµ ÀÖ´Ù. /home ÄÁÅØ½ºÆ®ÀÇ À¯Àú µð·ºÅ丮´Â ±× ÀÚü°¡ À¯Àú
ÆÄÀÏÀ» Æ÷ÇÔÇÏ´Â ÄÁÅØ½ºÆ®ÀÌ´Ù.
ÄÁÅØ½ºÆ®´Â ÃÖ¼ÒÇÑ ¸í¸í ±ÔÄ¢(naming convention)°ú °Ë»ö±â´É(lookup function)À»
°®´Â´Ù. ¿¹¸¦ µé¸é, DNS´Â °¡Àå ±¸Ã¼ÀûÀÎ ½ºÆ®¸µÀº ¿ÞÂÊ, µµ¸ÞÀÎÀº ¿À¸¥ÂÊ¿¡ ³ªÅ¸³»¸é¼ ½ºÆ®¸µÀ» Á¡À¸·Î
ºÐ¸®ÇÏ´Â ¸í¸í ±ÔÄ¢À» °®´Â´Ù. DNSÀÇ °Ë»ö±â´ÉÀº nslookup ÇÁ·Î±×·¥À» ÀÌ¿ëÇØ¼
Ä¿¸Çµå¶óÀÎÀ¸·ÎºÎÅÍ ¾×¼¼½º°¡ °¡´ÉÇÏ´Ù.(¹°·Ð, DNS ¸í¸í ¼ºñ½º¿¡ ´ëÇÑ APIµµ Á¸ÀçÇÑ´Ù.) ÄÁÅØ½ºÆ®´Â ´ë°Ô
°´Ã¼µéÀ» ¹ÙÀεùÇϰí ÇØÁ¦ÇÏ´Â ¹æ¹ý°ú ±×°ÍµéÀ» ¿°ÅÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
¶§¶§·Î ¸í¸í ¼ºñ½º ÀÇ °´Ã¼µéÀº ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ ÇÊ¿ä·Î ÇÏ´Â µ¥ÀÌÅ͸¦ Æ÷ÇÔÇÑ´Ù. °¡·É,
J2EE¾ÖÇø®ÄÉÀ̼ǿ¡¼ ȯ°æ º¯¼ö¸¦ ³ªÅ¸³»´Â °´Ã¼µéÀº ´ë°Ô ¸í¸í ¼ºñ½º ¿¡ ÀúÀåµÈ´Ù. ÇÏÁö¸¸ À̿ܿ¡ ¸í¸í
¼ºñ½ºÀÇ °´Ã¼´Â °´Ã¼¿¡ ´ëÇÑ ·¹ÆÛ·±½º¸¦ ³ªÅ¸³½´Ù. ¿¹¸¦ µé¸é, ¼¹ö¿¡ ·¹ÆÛ·±½º¸¦ Á¦°øÇÏ´Â °´Ã¼´Â Åë»óÀûÀ¸·Î ¿ÀÇÂ
¼¹ö Ä¿³Ø¼ÇÀÌ ¾Æ´Ñ ¼¹ö¿¡ ´ëÇÑ ·¹ÆÛ·±½º·Î¼ ¸í¸í ¼ºñ½º ¿¡ ÀÇÇØ ÀúÀåµÈ´Ù.¸í¸í ¼ºñ½º ¿¡ ÀÇÇØ ¸®ÅÏµÈ ·¹ÆÛ·±½º
°´Ã¼´Â ÇÊ¿ä½Ã¿¡ ¼¹ö Ä¿³Ø¼ÇÀ» »ý¼ºÇϱâ À§ÇØ »ç¿ëµÉ ¼ö ÀÖ´Ù.
´ÙÀ½ ±×¸²Àº ÄÁÅØ½ºÆ®ÀÇ °³³äµµÀÌ´Ù. top ÄÁÅØ½ºÆ®´Â /top·Î ºÒ¸®¸ç °´Ã¼,
·¹ÆÛ·±½º, ±×¸®°í ´Ù¸¥ ÄÁÅØ½ºÆ®µéÀ» Æ÷ÇÔÇÑ´Ù. ÄÁÅØ½ºÆ® /topÀº subcontexts
b ¿Í g¸¦ °®´Â´Ù. ÄÁÅØ½ºÆ® /top/g ´Â subcontext "b"¸¦ °®´Â´Ù.
A¶ó°í ºÒ¸®´Â °´Ã¼°¡ Çϳª ÀÌ»ó ÀÏÁö¶óµµ, ƯÁ¤ °³Ã¼ /top/g/b/a´Â ±× À§Ä¡°¡
ÄÁÅØ½ºÆ® /top/g/b ÀÓÀÌ ºÐ¸íÇϱ⠶§¹®¿¡ ãÀ» ¼ö°¡ ÀÖ´Ù.
¹ÙÀεùµÈ °´Ã¼µé¿¡ ´ëÇÑ µ¥ÀÌÅ͸¦ Á¦°øÇÏ´Â ¸í¸í ¼ºñ½º¸¦ µð·ºÅ丮¶ó°í ºÎ¸¥´Ù. °¡·É, ÆÄÀϽýºÅÛ µð·ºÅ丮´Â
ÀϹÝÀûÀ¸·Î Å©±â, ŸÀÔ, Á¢±Ù Çã¿ë ±×¸®°í ÆÄÀÏÀ» »ý¼ºÇÏ°í ¼öÁ¤ÇÑ ³¯Â¥¿¡ °üÇÑ Á¤º¸¸¦ Á¦°øÇÑ´Ù. ¸î¸î µð·ºÅ丮´Â
À̸§À¸·Î °Ë»ö, ¾ÖÆ®¸®ºäÆ®ÀÇ Á¶ÇÕÀ¸·Î °Ë»ö ¸ðµÎ¸¦ Çã¿ëÇÑ´Ù.
°¢°¢ÀÇ ¸í¸í ¼ºñ½ºµéÀº °¢ÀÚÀÇ Å½ºÅ©(task)¿¡ Àß ¸Âµµ·Ï µÇ¾îÀÖÁö¸¸, ±×µéÀÌ ÀÛµ¿ÇÏ´Â ¹æ½ÄÀº ¼·Î
´Ù¸£´Ù. °¢ ¸í¸í ¼ºñ½º´Â °íÀ¯ÀÇ ¸í¸í±ÔÄ¢, °Ë»ö±â´É, ¹ÙÀεù°ú µð·ºÅ丮 ÇÁ·ÎÅäÄÝ(directory
protocols)°ú °´Ã¼ ¼ºñ½º ÀÎÅÍÆäÀ̽º(object service interfaces)¸¦ °®´Â´Ù. JNDI
´Â ³×Æ®¿öÅ© ¼ºñ½º¸¦ À̸§Áþ°í ã±â À§ÇØ ÀϰüµÈ ¹æ¹ýÀ» Á¦°øÇÑ´Ù.
Java Naming and Directory Interface
JDBC µ¥ÀÌÅͺ£À̽º Ä¿³Ø¼Ç(database connections), JMS Å¥(JMS queues) ȤÀº
¿£ÅÍÇÁ¶óÀÌÁî ºó Ȩ ÀÎÅÍÆäÀ̽º(enterprise bean home interfaces)¿Í °°Àº ³×Æ®¿öÅ© °´Ã¼¿¡
¾×¼¼½ºÇϱâ À§ÇØ JNDI ¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ÀÌ¹Ì ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. »ç½Ç JNDI ´Â À̸§µéÀ» °´Ã¼·Î
¸ÅÇÎÇÏÁö¸¸, JNDI ´Â ¸í¸í ¼ºñ½º°¡ ¾Æ´Ï´Ù. ±×º¸´Ùµµ JNDI´Â ¸í¸í ¼ºñ½º¸¦ Ç¥ÁØÀûÀÎ ¹æ¹ýÀ¸·Î
¾×¼¼½º°¡´ÉÇÏ°Ô ÇÏ¸é¼ ±âÁ¸ÀÇ ¸í¸í ¼ºñ½º¸¦ °¨Ãß´Â(wrap) ÀÎÅÍÆäÀ̽ºµéÀÇ ÁýÇÕÀÌ´Ù.
´ÙÀ½ ±×¸²¿¡¼ º¸´Â °Í°ú °°ÀÌ, ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀº JNDIÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇØ¼
°¨ÃçÁø(underlying) ¸í¸í ¼ºñ½º¿¡ ¾×¼¼½ºÇÑ´Ù.
¾ÖÇø®ÄÉÀ̼dz»ÀÇ ÄÚµå´Â JNDI ÀÎÅÍÆäÀ̽º ¸Þ¼Òµå¸¦ È£ÃâÇÑ´Ù. ÀÌ·¯ÇÑ ¸Þ¼Òµå¸¦ ±¸ÇöÇÏ´Â °´Ã¼µéÀº JNDI
ÀÎÅÍÆäÀ̽º È£ÃâÀ» °¨ÃçÁø ¸í¸í ¼ºñ½º¿¡ ´ëÇÑ È£Ãâ·Î ¸ÅÇÎÇÑ´Ù. ¶ÇÇÑ JNDI´Â ÅëÇÕµÈ ¸í¸í ±ÔÄ¢µµ Á¤ÀÇÇÑ´Ù.
JNDI À̸§µéÀº JNDIÀÇ ¸í¸í °ü¸®ÀÚ(naming manager)¿¡ ÀÇÇØ °¨ÃçÁø ¸í¸í ¼ºñ½ºÀÇ ¸í¸í ±ÔÄ¢À»
µû¸£´Â À̸§À¸·Î ¸ÅÇεȴÙ.
javax.naming ÆÐŰÁö´Â ´ÙÀ½°ú °°Àº ¸í¸í°ú µð·ºÅ丮¿¡ °ü·ÃµÈ ÀÎÅÍÆäÀ̽ºµéÀ»
Æ÷ÇÔÇÑ´Ù.
javax.naming.Context´Â ÄÁÅØ½ºÆ®¸¦ ³ªÅ¸³»´Âµ¥, À̰ÍÀº ¹ÙÀεù°ú
¼ºêÄÁÅØ½ºÆ®¸¦ ã°í °ü¸®ÇÏ´Â µ¥¿¡ ¾²ÀδÙ.
javax.naming.Name´Â ¸í¸í ¼ºñ½ºÀÇ À̸§À» Ãß»óÀûÀ¸·Î
Ç¥Çö(abstract representation)ÇÏ°Ô ÇØÁØ´Ù.
javax.naming.BindingÀº ¸í¸í ¼ºñ½º À̸§°ú ±× À̸§¿¡ ¹ÙÀεùµÈ
°´Ã¼ÀÇ Ç¥ÇöÀÌ´Ù.
javax.naming.Reference´Â °´Ã¼ÀÇ º¹»çº»À» ¾ò¾î³¾ ¼ö ÀÖ°Ô
ÇØÁØ´Ù.
ÄÁÅØ½ºÆ® ã±â
ÀÌ ÆÁ¿¡ Æ÷ÇÔµÈ »ùÇÃÄÚµå´Â JNDIÄÁÅØ½ºÆ®ÀÇ ÄÁÅÙÃ÷¸¦ ¿°ÅÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù. »ùÇà ¼ºí¸´
Oct2003Servlet´Â »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ À̸§¿¡ ÇØ´çÇÏ´Â JNDI namespace³»ÀÇ ÄÁÅÙÃ÷¸¦
ã°í µð½ºÇ÷¹ÀÌÇÑ´Ù.
ÄÁÅØ½ºÆ®¸¦ ¾ò´Â °¡Àå ½¬¿î ¹æ¹ýÀº javax.naming.InitialContext
Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÏ´Â °ÍÀÌ´Ù. »ùÇà ¼ºí¸´ ¸Þ¼Òµå jndiList ´Â ÃÖÃÊÀÇ
ÄÁÅØ½ºÆ®¸¦ »ý¼ºÇÏ°í ¸í¸íµÈ °´Ã¼¸¦ ãÀ» ¶§ ±×°ÍÀ» »ç¿ëÇÑ´Ù. InitialContext ic = new InitialContext();
Object objFound = ic.lookup(name);
¿©±â¿¡¼ nameÀº »ç¿ëÀÚ°¡ HTMLÆäÀÌÁö¿¡¼ ÀÔ·ÂÇÑ HTTP GET ȤÀº
POST º¯¼ö¸í(vriable name)ÀÌ´Ù. ¸¸¾à ¸®ÅÏµÈ °´Ã¼°¡
Context ¶ó¸é jndiList ´Â
listContext ¸Þ¼Òµå¸¦ È£ÃâÇϰí,
ListContext¸Þ¼Òµå´Â ÁÖ¾îÁø À̸§¿¡ ÇØ´çÇÏ´Â ÄÁÅØ½ºÆ®ÀÇ ÄÁÅÙÃ÷¸¦ ¿°ÅÇÑ´Ù. °´Ã¼°¡
DataSourceÀ̸é, jndiList ´Â ¸í¸íµÈ µ¥ÀÌÅÍ ¼Ò½º¿¡
°üÇÑ Á¤º¸¸¦ Ãâ·ÂÇÑ´Ù.
listContext ¸Þ¼Òµå´Â ÁÖ¾îÁø JNDI ÄÁÅØ½ºÆ®ÀÇ ÄÁÅÙÃ÷¸¦ ÇϳªÀÇ Å×À̺í·Î
Ãâ·ÂÇÑ´Ù. À̸¦ À§Çؼ´Â Context ¸Þ¼Òµå listBindings
¸¦ ÀÌ¿ëÇϴµ¥, ÀÌ´Â NamingEnumeration ¸¦ ¸®ÅÏÇÑ´Ù.
NamingEnumeration ne = context.listBindings("");
NamingEnumeration ´Â
java.util.Enumeration¸¦ ±¸ÇöÇÑ °ÍÀÌ´Ù.
NamingEnumeration.next ¸Þ¼Òµå´Â
javax.naming.Binding ŸÀÔÀÇ °´Ã¼¸¦ ¸®ÅÏÇϰí, ÀÌ´Â °´Ã¼ÀÇ À̸§°ú °´Ã¼ÀÇ
Ŭ·¡½º À̸§ ±×¸®°í ÀúÀåµÈ °´Ã¼ ÀÚü¸¦ Æ÷ÇÔÇÑ´Ù.
while (ne.hasMore()) {
Binding ncp = (Binding)ne.next();
String objName = ncp.getName();
String objClass = ncp.getClassName();
Object objObj = ncp.getObject();
...
}
´Ü¼øÈ÷ Context³»ÀÇ À̸§µé°ú Ŭ·¡½ºÀ̸§À» º¸°íÀÚ ÇÑ´Ù¸é
Context.list ¸Þ¼Òµå¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.
Context.listµµ NamingEnumeration¸¦
¸®ÅÏÇÏÁö¸¸, ±×°ÍÀÌ ´ã°íÀÖ´Â Ä÷¢¼ÇÀº BindingÀÌ ¾Æ´Ñ
NameClassPair ŸÀÔÀÌ´Ù. NameClassPair´Â
À̸§°ú °´Ã¼ Ŭ·¡½º À̸§¸¸À» Æ÷ÇÔÇÑ´Ù.
»ùÇþÖÇø®ÄÉÀ̼ÇÀ» ¹èÆ÷ÇÏ°í ½ÇÇàÇÏ´Â ¹æ¹ýÀº »ùÇÃÄÚµå
½ÇÇàÇϱ⠸¦ Âü°íÇÑ´Ù.
¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇϸé, ´ÙÀ½°ú °°Àº ½ÃÀÛÆäÀÌÁö¸¦ º¸°Ô µÈ´Ù.
ÄÁÅØ½ºÆ®¸¦ ÀÔ·ÂÇϰųª, ÅØ½ºÆ® Çʵ带 ºó »óÅ·Π³öµÎ°í ¸í¸íµÈ ÄÁÅØ½ºÆ®ÀÇ ÄÁÅÙÃ÷¸¦ º¸±â À§ÇØ List¹öưÀ»
Ŭ¸¯ÇÑ´Ù. ¿¹¸¦ µé¸é jdbc ÀÇ ¿£Æ®¸®´Â ´ÙÀ½°ú °°Àº ȸéÀ» µð½ºÇ÷¹ÀÌÇÑ´Ù.
JNDI ¿¡ °üÇÑ ´õ ÀÚ¼¼ÇÑ Á¤º¸´Â JNDI
Æ©Å丮¾ó¸¦ Âü°íÇÑ´Ù.
ENTITY RESOLVER ÀÛ¼ºÇϱâ
XMLÀ» ÀÛ¼ºÇØ º» ÀûÀÌ ÀÖ´Ù¸é, ampersand (&)°ú less-than (<)°°Àº
ij¸¯Å͸¦ Ç¥ÇöÇϱâ À§ÇØ XMLÀÌ »ç¿ëÇÏ´Â ½Éº¼À» ºÃÀ» °ÍÀÌ´Ù. ÀÌ ½Éº¼À» ¿£ÅÍÆ¼¶ó°í ºÎ¸¥´Ù. XML¿¡¼,
¿£ÅÍÆ¼´Â Ç×»ó &·Î ½ÃÀÛÇØ¼ ¼¼¹ÌÄÝ·Ð(;)À¸·Î ³¡³´Ù. ¿£ÅÍÆ¼´Â XML´ÙÅ¥¸ÕÆ®¸¦ ÆÄ¶ó¹ÌÅÍ·Î ³ªÅ¸³»±â À§ÇØ
»ç¿ëµÈ´Ù. ÀÌ ÆÁÀº ´ÙÅ¥¸ÕÆ®ÀÇ DTD¿¡ ¿£ÅÍÆ¼¸¦ Á¤ÀÇÇÔÀ¸·Î½á XML´ÙÅ¥¸ÕÆ®¸¦ ÆÄ¶ó¹ÌÅÍ·Î ³ªÅ¸³»´Â ¹æ¹ýÀ»
¼³¸íÇÑ´Ù. XML´ÙÅ¥¸ÕÆ®¿¡¼ ¾î¶² ÅØ½ºÆ®°¡ ¿£ÅÍÆ¼ ·¹ÆÛ·±½º¸¦ ´ëüÇÒ °ÍÀÎÁö¸¦ Á¶Á¤ÇÏ´Â entity
resolver¸¦ ÀÛ¼ºÇÏ´Â ¹æ¹ýµµ ¼³¸íÇÑ´Ù.
¿£ÅÍÆ¼ÀÇ Á¤ÀÇ
XML´ÙÅ¥¸ÕÆ®ÀÇ ¿©·¯ °÷¿¡¼ ¹Ýº¹»ç¿ëµÇ´Â ÅØ½ºÆ®´Â ¿£ÅÍÆ¼·Î Ç¥ÇöÇÏ´Â °ÍÀÌ ´õ ³´´Ù. ¿£ÅÍÆ¼´Â ´ÙÅ¥¸ÕÆ®ÀÇ
DTD¿¡ ½±°Ô Á¤ÀǵȴÙ. ¿£ÅÍÆ¼¸¦ Á¤ÀÇÇÏ´Â ¿¹Á¦´Â »ùÇÃÄÚµå ÆÄÀÏ
misc/data.xml¿¡¼ º¼ ¼ö ÀÖ´Ù. <!ENTITY helloWorld "Hello, world!">
& °ú <¸¦ »ç¿ëÇÏ´Â °Íó·³, ¿£ÅÍÆ¼´Â XMLÀÚü¿¡ »ç¿ëµÉ ¼öµµ ÀÖ´Ù.
data.xmlÆÄÀÏ¿¡¼ Á¦°øÇÏ´Â ¿¹°¡ ÀÖ´Ù. <This>
<That>&helloWorld;</That>
<That>&helloWorld;</That>
...
</This>
XML ÆÄ¼°¡ ÀÌ ÅØ½ºÆ®¸¦ ÀÐÀ¸¸é, &¿Í ;»çÀÌÀÇ ¸ðµç °ÍÀ» ¿£ÅÍÆ¼ÀÇ ÄÁÅÙÃ÷·Î ´ëüÇÑ´Ù. <This>
<That>Hello, world!</That>
<That>Hello, world!</That>
...
</This>
°ªÀÌ DTD¿¡ Á÷Á¢ÀûÀ¸·Î Á¤ÀÇµÈ ¿£ÅÍÆ¼´Â ³»ºÎ(internal)¿£ÅÍÆ¼¶ó°í ºÒ¸°´Ù. À̰ÍÀº CÇÁ·Î±×·¥ÀÇ
#define°ú ¸Å¿ì Èí»çÇÏ´Ù. ³»ºÎ ¿£ÅÍÆ¼´Â ÇÁ·ÎÁ§Æ®ÀÇ ´ÜÀÏ Àå¼Ò¿¡ ¹Ýº¹ÀûÀ¸·Î »ç¿ëµÇ´Â ÀúÀÛ±Ç °ø°í¿Í °°Àº
ÅØ½ºÆ®¸¦ »ðÀÔÇϴµ¥ À¯¿ëÇÏ´Ù. ³»ºÎ ¿£ÅÍÆ¼ÀÇ Á¤ÀǸ¦ ¾÷µ¥ÀÌÆ®ÇÏ¸é ´ëüµÈ ÅØ½ºÆ®¸¦ ¸ðµÎ ¹Ù²Ù°Ô µÈ´Ù.
File Contents Æ÷ÇÔÇϱâ
¶Ç ´Ù¸¥ ¿£ÅÍÆ¼´Â ¿ÜºÎ(External)¿£ÅÍÆ¼·Î¼ ½ºÆ®¸µ ´ë½Å¿¡ ÆÄÀÏÀ¸·ÎºÎÅÍ ±×°ÍÀÇ ´ëü ¹®ÀÚ¿À» ¹Þ´Â´Ù.
¿ÜºÎ¿£ÅÍÆ¼´Â CÀÇ #include¿Í ºñ½ÁÇÏ´Ù. ¿ÜºÎ ¿£ÅÍÆ¼¸¦ À§ÇÑ ´ëü ¹®ÀÚ¿(replacement text)Àº
ÆÄÀÏÀÇ Àüü ÄÁÅÙÃ÷ÀÌ´Ù.
¿ÜºÎ ¿£ÅÍÆ¼ Áß ÇÑ Á¾·ù´Â ¿£ÅÍÆ¼ÀÇ À̸§À» Áþ±â À§ÇØ PUBLIC ½Äº°ÀÚ¸¦ »ç¿ëÇÑ´Ù. ±×¸®°í ´ëü ÅØ½ºÆ®¸¦
ãÀ» À§Ä¡¸¦ XMLÇÁ·Î¼¼½Ì ÇÁ·Î±×·¥¿¡ ¸í·ÉÇϱâ À§ÇØ ½Ã½ºÅÛ ½Äº°ÀÚ¸¦ »ç¿ëÇÑ´Ù. »ùÇÃÄڵ忡¼ ÀÌ·¯ÇÑ ¹æ¹ýÀ¸·Î
4°³ÀÇ ¿ÜºÎ ¿£ÅÍÆ¼¸¦ Á¤ÀÇÇÏ´Â XML ÆÄÀÏ, data.xml¸¦ º¼ ¼ö ÀÖ´Ù. <!ENTITY firstLine
PUBLIC "-//elucify//ejtt//oct2003//firstLine"
"english.props">
<!ENTITY secondLine
PUBLIC "-//elucify//ejtt//oct2003//secondLine"
"english.props">
<!ENTITY thirdLine
PUBLIC "-//elucify//ejtt//oct2003//thirdLine"
"english.props">
<!ENTITY lastLine
PUBLIC "-//elucify//ejtt//oct2003//lastLine"
"english.props">
°¢°¢ÀÇ ¿£ÅÍÆ¼´Â ±×°ÍÀÇ public idÀÎ °íÀ¯ÀÇ À̸§À» °®´Â´Ù. PUBLIC Ű¿öµå µÚ¿¡ ³ª¿À´Â ù¹øÂ°
½ºÆ®¸µÀÌ ¹Ù·Î ±×°ÍÀÌ´Ù. µÎ¹øÂ° ½ºÆ®¸µÀº ½Ã½ºÅÛ id·Î¼ ´ëü ÅØ½ºÆ®¸¦ ãÀ» À§Ä¡¸¦ ƯÁ¤ ½Ã½ºÅÛ ½Äº°ÀÚ¿¡
Á¦°øÇÑ´Ù.
&firstLine)°ú °°Àº ¿£ÅÍÆ¼ ·¹ÆÛ·±½º°¡ XML´ÙÅ¥¸ÕÆ®¿¡ »ç¿ëµÉ ¶§¿¡´Â, XML ÇÁ·Î¼¼¼°¡
´ëü ÅØ½ºÆ®¸¦ ãÀ» ¹æ¹ýÀ» ¹Ýµå½Ã ÀÎÁöÇϰí ÀÖ¾î¾ß ÇÑ´Ù. À̸¦ ¿£ÅÍÆ¼ ·¹ÆÛ·±½º¸¦ ÇØ¼®(resolve)ÇÑ´Ù°í
ÇÑ´Ù.
µðÆúÆ®·Î, ´ëºÎºÐÀÇ XML ÇÁ·Î¼¼¼´Â ¿£ÅÍÆ¼ÀÇ ´ëü ÅØ½ºÆ®¸¦ °Ë»öÇϱâ À§ÇØ URLÀ̳ª ÆÄÀϽýºÅÛ °æ·ÎÀ»
½Ã½ºÅÛ ID·Î »ç¿ëÇÑ´Ù. ÇÏÁö¸¸ °£È¤ XMLÇÁ·Î¼¼¼°¡ ·¹ÆÛ·±½º¸¦ ¸®Á¹ºêÇÏ´Â ¹æ¹ýÀ» Á¦¾îÇØ¾ßÇÒ Çʿ䰡 ÀÖ´Ù.
°¡·É, ½Ã½ºÅÛ id°¡ URLÀε¥ ÀÎÅͳݿ¡ ¿¬°áµÇ¾î ÀÖÁö ¾Ê´Ù¸é ¾î¶»°Ô ÇÒ °ÍÀΰ¡? SAX ¿Í DOM ÆÄ¼s °¡
±â¹ÝÇϰí ÀÖ´Â SAX ÀÎÅÍÆäÀ̽º´Â entity resolver Ŭ·¡½º(entity resolver class)¸¦
Á¤ÀÇÇÔÀ¸·Î½á ¿ÜºÎ ¿£ÅÍÆ¼¸¦ À§ÇÑ ´ëü ÅØ½ºÆ®¸¦ Á¦¾îÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.
¿£ÅÍÆ¼ ·¹ÆÛ·±½º¸¦ ResolveÇϱâ
org.sax.xml.EntityResolverÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â entity
resolver´Â signature°¡ ´ÙÀ½°ú °°Àº ´ÜÀÏ ¸Þ¼Òµå resolveEntity¸¦
°®´Â´Ù.
public InputSource resolveEntity(String publicID,
String systemID)
throws SAXException;
ÀÌ ¸Þ¼Òµå´Â Àμö·Î ¿£ÅÍÆ¼ÀÇ public id ³ª system id¸¦ ¹Þ´Â´Ù. À̰͵éÀº
<!ENTITY>¼±¾ð »ó´ÜºÎÀÇ Å°¿öµå PUBLIC µÚ¿¡ ¿À´Â ù¹øÂ°, µÎ¹øÂ°
ÀμöµéÀÌ´Ù. ÀÌ´Â org.sax.xml.InputSource ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇÏ´Â °´Ã¼¸¦
¸®ÅÏÇÑ´Ù. entity resolver´Â ¿£ÅÍÆ¼¸¦ À§ÇÑ ´ëü ÅØ½ºÆ®ÀÇ À§Ä¡¸¦ Á¤Çϱâ À§ÇØ public °ú
system id¸¦ »ç¿ëÇÑ´Ù. ±×¸®°í ÆÄ¼°¡ ´ëü ÅØ½ºÆ®¸¦ ¾ò±â À§ÇØ ¾×¼¼½ºÇÏ´Â
InputSource °´Ã¼¸¦ ¸®ÅÏÇÑ´Ù.
ÀÌ ±ÛÀÇ »ùÇà ÄÚµå´Â PropertiesŬ·¡½º¸¦ ÀÌ¿ëÇØ¼ Java
¼Ó¼º(property) ÆÄÀÏÀ» Àд entity resolver
PropertyEntityResolver ¶ÇÇÑ Æ÷ÇÔÇϰí ÀÖ´Ù. ÆÄÀÏÀ» ·ÎµåÇÏ°í ´ëü
ÅØ½ºÆ®¸¦ °Ë»öÇÏ´Â ÄÚµå´Â ´ÙÀ½°ú °°´Ù. // Load properties from a URL.
protected void loadProps(String urlString)
throws MalformedURLException, IOException {
URL url = new URL(urlString);
URLConnection con = url.openConnection();
_props = new Properties();
_props.load(con.getInputStream());
}
// Given the name of a property,
// return the property's value
public InputSource resolveEntity(
String publicID, String systemID)
throws SAXException {
// Load properties from URL referenced
// by system id.
// Assume system id is the same for all symbols.
if (_props == null) {
try {
loadProps(systemID);
} catch (Exception e) {
throw new SAXException(e);
}
}
// Extract property name from public ID
int index = publicID.lastIndexOf("//");
String value = "???PropertyNotFound???";
if (index >= 0) {
value = _props.getProperty(
publicID.substring(index + 2));
}
StringReader sr = new StringReader(value);
return new InputSource(sr);
}
»ùÇà Ŭ·¡½º EntityResolverDemo°¡ DOM ÆÄ¼(parser)¸¦
»ý¼ºÇϸé, ´ÙÀ½°ú °°ÀÌ Å¬·¡½º¸¦ À§ÇÑ entity resolver¸¦
PropertyEntityResolverÀÇ ÀνºÅϽº·Î ¼³Á¤ÇÑ´Ù. // Create the parser, and set the error handler
// and entity resolver
DocumentBuilder db = dbf.newDocumentBuilder();
db.setErrorHandler(this);
PropertyEntityResolver propertyEntityResolver =
new PropertyEntityResolver();
db.setEntityResolver(propertyEntityResolver);
ÆÄ¼°¡ ¿ÜºÎ ¿£ÅÍÆ¼ ·¹ÆÛ·±½º¸¦ ¸¸³ª°Ô µÇ¸é ÆÄ¼´Â
PropertyEntityResolver.resolveEntity¸¦ È£ÃâÇϰí, ±×°Í¿¡
´ëÇÑ ÀÀ´äÀ¸·Î ´ëü ÅØ½ºÆ®¸¦ Æ÷ÇÔÇϰí ÀÖ´Â InputSource¸¦ ¹Þ´Â´Ù. ±×¸®°í ³ª¼
´ëü ÅØ½ºÆ®¸¦ ÀÐ°í ±×°ÍÀ» ¿£ÅÍÆ¼ ·¹ÆÛ·±½º°¡ ¹ß»ýÇÑ result XML¾ÈÀÇ ±× ·¹ÆÛ·±½º¿Í ġȯÇÑ´Ù.
»ùÇà ¾ÖÇø®ÄÉÀ̼ÇÀ» ¹èÆ÷ÇÏ°í ½ÇÇàÇÏ´Â ¹æ¹ýÀº »ùÇÃÄÚµå
½ÇÇàÇϱ⸦ Âü°íÇÑ´Ù. ERDemo ÇÁ·Î±×·¥À» ½ÇÇàÇϴµ¥ ÇÊ¿äÇÑ »çÇ×Àº
À妽ºÆäÀÌÁö¸¦ Âü°íÇÑ´Ù. english.propsÆÄÀÏÀ» ÁöÁ¤Çϰí ÀÖ´Â
data.xmlÀ» ÀÌ¿ëÇØ¼ »ùÇà ÇÁ·Î±×·¥À» ½ÇÇàÇØ º¸ÀÚ.
- entity resolver jar ÆÄÀϷκÎÅÍ µ¥ÀÌÅÍ ÆÄÀÏÀ» ÃßÃâÇÏÀÚ,
ERDemo.jar: jar xvf ERDemo.jar misc
CLASSPATH¿¡ ERDemo.jar¸¦
Ãß°¡ÇÑ´Ù.Put ERDemo.jar in your
CLASSPATH.
- ¿¹Á¦¸¦ ½ÇÇàÇÑ´Ù.
java ERDemo misc/data.xml
ERDemo ÇÁ·Î±×·¥À» ½ÇÇàÇϸé, ´ÙÀ½°ú °°Àº ¿µ¹® ´ëü ÅØ½ºÆ®¸¦ Æ÷ÇÔÇÑ
XML´ÙÅ¥¸ÕÆ®¸¦ »ý¼ºÇÏ°Ô µÈ´Ù.
<?xml version="1.0" encoding="UTF-8"?>
<This>
<That>Hello, world!</That>
<That>Hello, world!</That>
<That>Line 1: This line is written in English.
</That>
<That>Line 2: How are you?</That>
<That>Line 3: What would you like to eat?</That>
<TheOther>Last line: I must say goodbye.
</TheOther>
</This>
±× ´ÙÀ½¿£ data.xml¸¦ ÆíÁýÇÏ°í ¸ðµç <!ENTITYÁ¤ÀÇ¿¡ ´ÙÀ½°ú °°ÀÌ
"english.props"¸¦ "spanish.props" ·Î
´ëÃ¼ÇØ º¸ÀÚ. <!ENTITY firstLine
PUBLIC "-//elucify//ejtt1003//firstLine"
"spanish.props">
<!ENTITY secondLine
PUBLIC "-//elucify//ejtt1003//secondLine"
"spanish.props">
<!ENTITY thirdLine
PUBLIC "-//elucify//ejtt1003//thirdLine"
"spanish.props">
<!ENTITY lastLine
PUBLIC "-//elucify//ejtt1003//lastLine"
"spanish.props">
ÅØ½ºÆ®´Â ´ÙÀ½°ú °°ÀÌ ¹Ù²ð °ÍÀÌ´Ù. <?xml version="1.0" encoding="UTF-8"?>
<This>
<That>Hello, world!</That>
<That>Hello, world!</That>
<That>Line 1: Esta linea esta escrito en Espagnol.
</That>
<That>Line 2: Como estas?</That>
<That>Line 3: Que quieres cenar?</That>
<TheOther>Last line: Hay que decir adios!
</TheOther>
</This>
»ùÇà ÄÚµå´Â ºÒ¾î¿Í µ¶¾î·Î µÈ ¼Ó¼º ÆÄÀϵµ Æ÷ÇÔÇϰí ÀÖÀ¸´Ï, ÀÌ·¯ÇÑ ÆÄÀϵéÀ» ÀÌ¿ëÇØ¼ »ùÇà Äڵ带
½ÇÇàÇØº¸´Â °Íµµ ÁÁÀº »ý°¢ÀÌ´Ù.
JNDI¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â JNDI
Æ©Å丮¾óÀ» Âü°íÇÑ´Ù.
»ùÇÃÄÚµå ½ÇÇàÇϱâ
ÀÌ ÆÁÀÇ »ùÇÃ
¾ÆÄ«À̺긦 ´Ù¿î·Îµå¹ÞÀÚ. ¾ÖÇø®ÄÉÀ̼ÇÀÇ ÄÁÅØ½ºÆ® ·çÆ®´Â ttoct2003 À̰í, ´Ù¿î·ÎµåµÈ EARÆÄÀÏÀº
¿Ï¼ºµÈ »ùÇÿ¹Á¦Äڵ带 Æ÷ÇÔÇÑ´Ù.
»ùÇÃÇÁ·Î±×·¥À» ½ÇÇàÇϱâ À§Çؼ´Â ´ÙÀ½ °úÁ¤ÀÌ ÇÊ¿äÇÏ´Ù
- j2ee¼¹ö¿Í µ¥ÀÌÅͺ£À̽º ¼¹ö ¸ðµÎ ½ÇÇà ÁßÀÎÁö È®ÀÎÇÏÀÚ. J2EE Reference
ImplementationÀ» À§Çؼ´Â ´ÙÀ½ 2°¡Áö¸¦ ¸ðµÎ ½ÇÇàÇØ¾ß ÇÑ´Ù.
j2ee
-verbose
and
cloudscape
-start
- ¾Õ¼ ¼³¸íÇÑ °Íó·³ earÆÄÀÏÀ» ´Ù¿î·Îµå ¹ÞÀÚ.
- ¼¹ö¿¡ earÆÄÀÏÀ» ¹èÆ÷ÇÏÀÚ. »ç¿ëÀÚ´Â deploytool ÇÁ·Î±×·¥À» ÀÌ¿ëÇØ¼ J2EE
Reference Implementation¿¡ ¾ÖÇø®ÄÉÀÌ¼Ç ¾ÆÄ«À̺ê(ttoct2003.ear)¸¦ ¹èÆ÷ÇÒ ¼ö
ÀÖ´Ù.
$J2EE_HOME/deploytool -deploy ttoct2003.ear localhost
·ÎÄà ȣ½ºÆ®(localhost)¸¦ ¼¹ö°¡ ¼³Ä¡µÇ´Â È£½ºÆ®ÀÇ À̸§À¸·Î ´ëüÇÏÀÚ. ´ÜÀÏ ¸Ó½Å¿¡
ÀνºÅçÇÒ ¶§, È£½ºÆ®À̸§Àº ÀϹÝÀûÀ¸·Î(±ÛÀÚ ¶æ´ë·Î) localhost°¡ µÈ´Ù.
- ¾ÖÇø®ÄÉÀ̼ÇÀ»
http://localhost:8000/ttoct2003¿¡
¾×¼¼½ºÇÏÀÚ.
Reference Implementationº¸´Ù´Â J2EEÀÇ specificationÀ» µû¸£´Â ±â´É ±¸ÇöÀÇ
Ãø¸é¿¡¼ »ç¿ëÇϰíÀÚ ÇÑ´Ù¸é »ç¿ëÀÚÀÇ Ç÷§Æû¿¡ ¾ÖÇø®ÄÉÀ̼ÇÀ» ¹èÆ÷Çϱâ À§ÇØ J2EE ÇÁ·Î´öÆ®ÀÇ ¹èÆ÷
Åø(deployment tool)À» »ç¿ëÇÑ´Ù.
¾ÖÇø®ÄÉÀ̼ÇÀÇ ½ÇÇà¿¡ ´ëÇÑ Áö½Ã»çÇ×Àº index.html welcome fileÀ»
Âü°íÇÑ´Ù.
|