·Î±×ÀÎ | ȸ¿ø°¡ÀÔ (´º½º·¹ÅͽÅû) | SITEMAP
   
  °³¹ß   Ç÷§Æû   ½Ã½ºÅÛ   ¸Å´ÏÁö¸ÕÆ®   Àüü±â»ç  
ÀÚ¹Ù
´å³Ý
C/C++
DB
¸ðµ¨¸µ
À¥°³¹ß
±âŸ
À¯´Ð½º/¸®´ª½º
À©µµ¿ì
±âŸ
¼­¹ö
³×Æ®¿öÅ©
º¸¾È
±âŸ
BM
PM
±âŸ
 
   
 
 
   
 
 
±â»çÀúÀå
0
 
¸¶ÀÌ ½ºÅ©·¦
À¯¿¬ÇÑ ±×·çºñ·Î ÀÛ¼ºÇϴ¡¸±×·çºê¸´°ú GSP¡¹

±èÇÊÈ£ (¼þ½Ç´ëÇб³ ±³¼ö)   2005/03/04
¿¬Àç¼ø¼­
1ȸ. µ¿ÀûÀ̰í À¯¿¬ÇÑ ½ºÅ©¸³ÆÃ ¾ð¾î, ±×·çºñ
2ȸ. ±×·çºê¸´°ú GSP
3ȸ. ±×·çºñ¿Í Ÿ ¾ð¾îÀÇ ºñ±³
[Áöµð³ÝÄÚ¸®¾Æ]
¿¬Àç °¡ÀÌµå ¶óÀÎ ¿î¿µÃ¼Á¦ : À©µµ¿ì/À¯´Ð½º/¸®´ª½º/¸Æ OS X°³¹ßµµ±¸ : J2SE 1.4.2, ±×·çºñ 1.0 º£Å¸ 7±âÃÊÁö½Ä : ÀÚ¹Ù, ÆÄÀ̽ã, ·çºñ, ±âŸ ½ºÅ©¸³ÆÃ ¾ð¾îÀÀ¿ëºÐ¾ß : JVM ±â¹Ý ½ºÅ©¸³Æ® ÇÁ·Î±×·¡¹Ö
ÀÚ¹Ù°¡ ´å³Ýº¸´Ù °­¼¼ÀÎ °÷Àº ¼­¹öÃø ¾ÖÇø®ÄÉÀ̼ÇÀÌ´Ù. µ¿ÀûÀ̰í À¯¿¬ÇÑ ±×·çºñ(Groovy) ¾ð¾î·Î µ¥ÀÌÅͺ£À̽º ÀÔÃâ·Â Äڵ带 Â¥º¸°í, ¶Ç ÀÚ¹ÙÀÇ ¼­¹öÃø ¼Ö·ç¼ÇÀ¸·Î ¸¹ÀÌ »ç¿ëµÇ´Â ¼­ºí¸´°ú JSP¿¡ ÇØ´çÇÏ´Â ±×·çºê¸´(Groovlet)°ú GSP¸¦ ´õ °£°áÇÏ°Ô ÀÛ¼ºÇغ¸ÀÚ.

Áö³­ ±Û¿¡¼­´Â ±×·çºñ 1.0 º£Å¸ 6À» ±âÁØÀ¸·Î ¼³¸íÇÏ¿´Áö¸¸ ±× µ¿¾È ±×·çºñ 1.0 º£Å¸ 7ÀÌ ³ª¿Ô´Ù. º£Å¸ 7Àº º£Å¸ 6¿¡¼­ ¾Ë·ÁÁø ¸î °¡Áö ¹ö±×°¡ ¼öÁ¤µÇ°í, »õ·Î¿î ±â´ÉÀÌ Ãß°¡µÈ ¹öÀüÀÌ´Ù. À̹ø ±Û¿¡¼­´Â º£Å¸ 7À» ±âÁØÀ¸·Î ÇÏ¿© ±×·çºñ SQL, ±×·çºê¸´, GSP¸¦ ¼Ò°³Çϰí, BSF·Î ±×·çºñ¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸±â·Î ÇÑ´Ù.

Ŭ·ÎÀú¿Í ÇÔ¼ö ÇÁ·Î±×·¡¹Ö  

´ÙÀ½Àº www.elook.org/computing/closure.htm¿¡ ³ª¿À´Â Ŭ·ÎÀú(closure)ÀÇ Á¤ÀÇÀÌ´Ù.

      Ç¥Çö½ÄÀ» °®°í ¶Ç ±× Ç¥Çö½ÄÀÇ Æò°¡¿¡ ¾²ÀÌ´Â º¯¼ö ¹ÙÀεù ȯ°æÀ» °®´Â µ¥ÀÌÅÍ ±¸Á¶(a data structure that holds an expression and an environment of variable bindings in which that expression is to be evaluated)

±×·çºñ¿¡¼­ Ŭ·ÎÀú¸¦ ¸¹ÀÌ ¾´´Ù°í Çߴµ¥ Ŭ·ÎÀú¶ó´Â ¿ë¾î´Â ¡®ÇÔ¼ö¸¦ ÀÚÀ¯ º¯¼ö À§·Î Ŭ·ÎÁî¾÷(close up)ÇÑ´Ù¡¯´Â Àǹ̿¡¼­ µû¿Â °ÍÀ̶ó°í ÇÑ´Ù. Ŭ·ÎÀú¶ó´Â °³³äÀÇ ¿ª»ç´Â C ¾ð¾î³ª Æ÷Æ®¶õ ¾ð¾îº¸´Ù ´õ ¿À·¡µÆ´Ù.

Ŭ·ÎÀú´Â ÇÔ¼ö ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼­ ¶÷´Ù-Ķť·¯½º(¥ë-calculus)¶ó°í ÇÏ´Â °Í°ú ¹ÐÁ¢ÇÑ ¿¬°üÀÌ ÀÖ´Ù. 1924³â°æ ¼éÇÉÄÌÀÌ °£´ÜÇÑ ÇÔ¼ö ÀÌ·ÐÀ» °³¹ßÇÏ¿´°í, 1934³â¿¡´Â ¾Ë·ÐÁ¶ óġ°¡ ¶÷´Ù-Ķť·¯½º¸¦ ¼Ò°³Çϸ鼭 À̸¦ Çü½Ä ÁýÇշп¡ ÀÌ¿ëÇÏ¿´´Ù.

1940³â°æ¿¡´Â ÇϽºÄÌ B. Ä¿¸®°¡ ÀÚÀ¯ º¯¼ö¸¦ °®´Â ÇÔ¼ö ÀÌ·ÐÀ» ¼Ò°³ÇÏ¿© ÇÔ¼ö ÇÁ·Î±×·¡¹ÖÀÇ ±âÃʸ¦ ¼¼¿ü´Ù(Âü°íÀÚ·á). LISP ¾ð¾î¿Í ½º¸ôÅå ¾ð¾î¿¡¼­ Ŭ·ÎÀú¸¦ µµÀÔÇÏ¿´°í, ·çºñ(Ruby) ¾ð¾î¿¡ ÀÌ¾î ±×·çºñ ¾ð¾î¿¡ À̸¥´Ù.

±×·çºñ 1.0 º£Å¸ 7 ¼³Ä¡¿Í ±×·çºñ CVS ¼³Ä¡
±×·çºñ 1.0 º£Å¸ 7À» º£Å¸ 6 ¶§¿Í ¸¶Âù°¡Áö·Î ±×·çºñ ´Ù¿î·Îµå ÆäÀÌÁö(dist.codehaus.org/groovy/distributions)¿¡¼­ ´Ù¿î·ÎµåÇÏ¿© ´ÙÀ½ jar ¸í·ÉÀ¸·Î ¾ÐÃàÀ» ÇØÁ¦Çϰí, ȯ°æº¯¼ö °æ·Î(PATH)¸¸ Àâ¾ÆÁÖ¸é ¸ðµç °÷¿¡¼­ groovy, groovyc, groovysh, groovyConsole ¸í·ÉµéÀ» ¾µ ¼ö ÀÖ´Ù. ÀÌµé ¸í·ÉÀÌ Ç¥ÁØ À§Ä¡(Áï, ±×·çºñ°¡ ¼³Ä¡µÈ °÷ÀÇ bin ¼­ºêµð·ºÅ丮)¿¡ ÀÖ´Â °æ¿ì¿¡´Â ȯ°æº¯¼ö GROOVY_HOME°ú CLASSPATH´Â º°µµ·Î ÀâÁö ¾Ê¾Æµµ µÈ´Ù.

±×·¸Áö ¾ÊÀº °æ¿ì¿¡´Â ȯ°æº¯¼ö GROOVY_HOME¸¦ Á¤ÇØÁÖ¾î¾ß ÇÑ´Ù. ÀÚ¹Ù¿¡¼­ ±×·çºñ¸¦ ÀÓº£µùÇÏ´Â °æ¿ì¿¡´Â %GROOVY_HOME%\lib µð·ºÅ丮 ¾Æ·¡¿¡ ÀÖ´Â groovy-1.0-beta-7.jar, asm-1.4.3.jar, commons-cli-1.0.jar ÆÄÀϵéÀ» CLASSPATH¿¡ Àâ¾ÆÁÖ¾î¾ß ÇÑ´Ù.

C:\> jar -xvf <´Ù¿î·ÎµåÀúÀå°æ·Î¸í>\groovy-1.0-beta-7.zip
C:\> jar -xvf <´Ù¿î·ÎµåÀúÀå°æ·Î¸í>\groovy-1.0-beta-7-src.zip
C:\> set PATH=C:\groovy-1.0-beta-7\bin;%PATH%
C:\> cd \Test
C:\Test> groovy Hello.groovy

À§¿Í °°ÀÌ ±×·çºñ ¼Ò½º±îÁö ¼³Ä¡ÇÏ°í ³ª¸é %GROOVY_HOME%\src\test µð·ºÅ丮¿¡´Â À¯´Ö Å×½ºÆ®¸¦ Åë°úÇÑ ¸¹Àº ¿¹Á¦µéÀÌ ÀÖ´Ù. ±×·çºñ ÇÁ·Î±×·¡¹Ö¿¡ ÀÌ ¿¹Á¦µéÀº ÁÁÀº ±æÀâÀ̰¡ µÈ´Ù.

¸ÞÀ̺ìÀ¸·Î ±×·çºñ CVS ¼³Ä¡Çϱâ À§ÇÑ Áغñ
±×·çºñ CVS·ÎºÎÅÍ Á÷Á¢ ¼³Ä¡ÇÒ ¼öµµ ÀÖ´Ù. ¸ÞÀ̺ì(Maven)À» ÀÌ¿ëÇϸé CVS üũ¾Æ¿ô°ú Ant ºôµå¸¦ ½±°Ô ÇÒ ¼ö ÀÖ´Ù. À©µµ¿ì °è¿­ ȯ°æ¿¡¼­ ¸ÞÀ̺ìÀ» ÀÌ¿ëÇÏ¿© ¼³Ä¡ÇÏ°í ºôµåÇÏ·Á¸é ´ÙÀ½ ÀÚ·áµéÀ» ÁغñÇÑ´Ù.

      ¡Þ cvs-1-12-9.zip              ¸í·ÉÇà CVS 1.12.9
      ¡Þ apache-ant-1.5.x-bin.zip     Apache-Ant 1.5.x(archive.apache.org/dist/ant/binaries)
      ¡Þ maven-1.0.exe                 Apache-Maven 1.0

¸í·ÉÇà CVS, Apache-Ant, Apache-MavenÀÌ ¼³Ä¡µÈ °÷À» PATH·Î Àâ´Â´Ù.

C:\> set PATH=c:\cvs-1.12.9;%PATH%
C:\> set PATH=c:\ant-1.5.1\bin;%PATH%
C:\> set PATH=c:\maven-1.0\bin;%PATH%

CVS ÀÛ¾÷À» À§ÇÑ µð·ºÅ丮 C:\MyCvs¸¦ ¸¸µé°í, ±×·çºñ CVS¸¦ ÀúÀåÇÒ ±âº» µð·ºÅ͸® C:\MyCvs\groovy¸¦ ¸¸µç´Ù. ¶Ç CVSHOME ȯ°æº¯¼ö¸¦ Á¤ÇÑ´Ù. CVSHOMEÀº ¸í·ÉÇà CVS°¡ ÀνÄÇϴ ȯ°æº¯¼öÀÌ´Ù. ÀÌ È¯°æº¯¼ö¿¡ ³Ö¾îÁÖ´Â °ªÀº CVS Ȩ¿¡¼­ °¡Á®¿Â ÆÄÀϵéÀÌ ÀúÀåµÇ´Â ±âÁØ µð·ºÅ丮ÀÌ´Ù.

C:\> md \MyCvs
C:\> md \MyCvs\groovy
C:\> cd \MyCvs
C:\MyCvs> set CVSGOME=C:\MyCvs\groovy

¸ÞÀ̺ìÀ¸·Î ±×·çºñ CVS ÀÚ·á °¡Á®¿À±â
¸ÞÀ̺ìÀ¸·Î ±×·çºñ CVS¿¡¼­ groovy-core ÆÄÀϵéÀ» °¡Á®¿À±â À§ÇØ ´ÙÀ½ ³»¿ëÀ» ¸ðµÎ ÇÑ ÁÙ·Î ÀÔ·ÂÇÏ¿© startMaven.bat¶ó´Â ÆÄÀϸíÀ¸·Î ÀúÀåÇÏ°í ½ÇÇàÇÑ´Ù.

    maven scm:checkout-project
        -Dmaven.scm.method=cvs
        -
Dmaven.scm.cvs.module=groovy/groovy-core
        -Dmaven.scm.cvs.root=:ext:username@cvs.groovy.codehaus.org:
/home/projects/groovy/scm
        -Dmaven.scm.checkout.dir=.

C:\MyCvs> startMaven

¸ÞÀ̺ìÀ¸·Î ±×·çºñ ºôµåÇϱâ
ÀÌÁ¦ ±×·çºñ µð·ºÅ丮·Î °¡¼­ ¸ÞÀ̺ìÀ» ½ÇÇàÇÑ´Ù.

C:\MyCvs> cd groovy
C:\MyCvs\groovy> maven

±×·¯¸é ¸ÞÀ̺ìÀÌ ºôµå¿¡ ÇÊ¿äÇÑ jar ÆÄÀϵéÀ» °¡Á®¿À°í, ant·Î ºôµåÇϰí, À¯´Ö Å×½ºÆ®ÇÏ´Â °úÁ¤±îÁö ¸ðµÎ ÀÚµ¿À¸·Î ¼öÇàÇÑ´Ù. ÀÌ Áß¿¡ À¯´Ö Å×½ºÆ® °úÁ¤ÀÌ °¡Àå ¿À·¡ °É¸°´Ù. ÀÌÁ¦ groovy-1.0-beta-8-SNAPSHOTÀÌ ºôµåµÈ µð·ºÅ丮 C:\MyCvs\groovy\groovy-core\target\installÀ» C:\groovy-1.0-beta-8-SNAPSHOTÀ¸·Î º¹»çÇÑ´Ù. ÀÌ·Î½á ¸ÞÀ̺ìÀ» ÀÌ¿ëÇÏ¿© ±×·çºñ CVSÀÇ ºôµå ¼³Ä¡ °úÁ¤ÀÌ ¸ðµÎ ³¡³­´Ù.

±×·çºñ ºôµå ÈÄ Å×½ºÆ®Çϱâ
±×·çºñ¸¦ ½ÇÇàÇϱâ À§Çؼ­´Â ±×·çºñÀÇ bin µð·ºÅ丮¸¦ ȯ°æº¯¼ö PATH¿¡ ÀνĽÃŲ´Ù.

C:\MyCvs\groovy> cd \Test
C:\Test> set PATH=C:\groovy-1.0-beta-8-SNAPSHOT\bin;%PATH%
C:\Test> groovy Hello.groovy

±×·çºñ SQL
±×·çºñ¿¡´Â ¸Þ¸ð¸® ±â¹Ý µ¥ÀÌÅͺ£À̽ºÀÎ ¾×½Ã¿Â(Axion) 1.0 M3°¡ Æ÷ÇԵǾî ÀÖ´Ù. %GROOVY_HOME%\lib µð·ºÅ丮¿¡ ÀÖ´Â axion-1.0-m3.jar ÆÄÀÏÀÌ ±×°ÍÀÌ´Ù. »ó¿ëÀÇ µ¥ÀÌÅͺ£À̽ºÃ³·³ °ÅâÇÏÁö´Â ¾ÊÁö¸¸ ±×·çºñ¿Í ±ÃÇÕÀÌ Àß ¸Â´Â Àڱ׸¶ÇÑ µ¥ÀÌÅͺ£À̽º°¡ ¾Æ´Ñ°¡ ÇÑ´Ù. ¾×½Ã¿ÂÀº ¸Þ¸ð¸® »ó¿¡¼­¸¸ Á¸ÀçÇÏ´Â ¸Þ¸ð¸® ±â¹Ý µ¥ÀÌÅͺ£À̽º·Îµµ ¾µ ¼ö ÀÖ°í, µð½ºÅ© »ó¿¡ Á¸ÀçÇÏ´Â µð½ºÅ© ±â¹Ý µ¥ÀÌÅͺ£À̽º·Î ¾µ ¼ö ÀÖ´Â DBMS·Î¼­ JDBC 2.0 ¹× 3.0À» ÃæÁ·ÇÑ´Ù. ¾×½Ã¿Â ȨÆäÀÌÁö´Â axion.tigris.orgÀÌ´Ù.

¡ß ¸Þ¸ð¸® ±â¹Ý ¾×½Ã¿Â µ¥ÀÌÅͺ£À̽ºÀÇ µ¥ÀÌÅͼҽº »ý¼ºÇϱâ:
      new AxionDataSource("jdbc:axiondb:µ¥ÀÌÅͺ£À̽º¸í")

¡ß µð½ºÅ© ±â¹Ý ¾×½Ã¿Â µ¥ÀÌÅͺ£À̽ºÀÇ µ¥ÀÌÅͼҽº »ý¼ºÇϱâ(°æ·Î¸íÀº DB°¡ Á¸ÀçÇÏ´Â À§Ä¡):
      new AxionDataSource("jdbc:axiondb:µ¥ÀÌÅͺ£À̽º¸í:°æ·Î¸í")

°æ·Î¸íÀÇ À¯¹«·Î µð½ºÅ© µ¥ÀÌÅͺ£À̽ºÀÎÁö ¸Þ¸ð¸® µ¥ÀÌÅͺ£À̽ºÀÎÁö ±¸º°ÇÑ´Ù. <¸®½ºÆ® 1>ÀÇ ¿¹Á¦¿¡¼­ µ¥ÀÌÅͼҽº¸¦ »ý¼ºÇÏ´Â ºÎºÐÀº ´ÙÀ½°ú °°´Ù.

      new AxionDataSource("jdbc:axiondb:tempDB")

µ¥ÀÌÅͺ£À̽º À̸§Àº tempDBÀÌ´Ù. °æ·Î¸íÀÌ ¾øÀ¸¹Ç·Î ¸Þ¸ð¸® ±â¹Ý µ¥ÀÌÅͺ£À̽º·Î »ç¿ëÇÔÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ ¿¹Á¦¿¡¼­ createSql() ÇÔ¼ö´Â »ý¼ºµÈ µ¥ÀÌÅͼҽº¸¦ ¹ÝȯÇÑ´Ù.

      sql = createSql()     // groovy.sql.Sql »ý¼º

»ý¼ºµÈ µ¥ÀÌÅͼҽº´Â º¯¼ö sql¿¡ ÀúÀåµÇ¾î ÀÌÈÄ Àü¿ª º¯¼ö·Î °è¼Ó »ç¿ëµÈ´Ù.

¡ß SQL ½ºÅ©¸³Æ® ½ÇÇàÇϱâ
      // <¸®½ºÆ® 1>ÀÇ  ÇÔ¼ö createTables()¿¡¼­ »ç¿ë
      sql.execute(SQL_½ºÅ©¸³Æ®)

¡ß µ¥ÀÌÅÍ ÀÔ·Â, ¼öÁ¤, »èÁ¦Çϱâ
      sql.executeUpdate(SQL_INSERT_±¸¹®)    
      sql.executeUpdate(SQL_DELETE_±¸¹®)    
      // <¸®½ºÆ® 1>ÀÇ  ÇÔ¼ö testExecuteUpdate()¿¡¼­ »ç¿ë
      sql.executeUpdate(SQL_UPDATE_±¸¹®)

¡ß µ¥ÀÌÅÍ ÀÔ·ÂÇϱâ
      table = sql.dataSet("Å×À̺í¸í")  
      // <¸®½ºÆ® 1>ÀÇ ÇÔ¼ö insertInitialData()¿¡¼­ »ç¿ë
      table.add(.....)

¡ß µ¥ÀÌÅÍ Á¶È¸Çϱâ
      rs = sql.executeQuery(SQL_½ºÅ©¸³Æ®)
      rs.getXXX("Ä÷³¸í¡°)
¶Ç´Â
      // <¸®½ºÆ® 1>ÀÇ ÇÔ¼ö testQuery() µî¿¡¼­ »ç¿ë
      sql.eachRow(SQL½ºÅ©¸³Æ®) { ...Ŭ·ÎÀú ±¸Çö... }
¶Ç´Â
      // <¸®½ºÆ® 1>ÀÇ ÇÔ¼ö testDataSet() µî¿¡¼­ »ç¿ë
      table = sql.dataSet("Å×À̺í¸í")
      table.each { ...Ŭ·ÎÀú... }

 <¸®½ºÆ® 1> ¸Þ¸ð¸® ±â¹Ý Axion DB¸¦ ÀÌ¿ëÇÏ´Â Groovy SQL ¿¹Á¦

¾×½Ã¿Â ´ë½Å MySQL, ¿À¶óŬ, MS SQL µîÀÇ °í±Þ DBMS¸¦ ¾µ ¼öµµ ÀÖ´Ù. <¸®½ºÆ® 2>´Â <¸®½ºÆ® 1>À» MySQL ¿ëÀ¸·Î ¼öÁ¤ÇÑ °ÍÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ MySQL ¿ë µ¥ÀÌÅͺ£À̽º¿Í Å×À̺íÀ» ¹Ì¸® »ý¼ºÇØ µÐ´Ù.  

C:\Test> %MYSQL_HOME%\bin\mysql -u root -p
Enter password: XXXXXXXX
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.23.46-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database tempDB;
Query OK, 1 row affected (0.02 sec)

mysql> use tempDB;
Database changed
mysql> create table ACTORS ( uid varchar(20), name varchar(20) );
Query OK, 0 rows affected (0.04 sec)

mysql> create table ROLES ( uid varchar(20), role varchar(20) );
Query OK, 0 rows affected (0.01 sec)

mysql> quit
Bye

 <¸®½ºÆ® 2> MySQL µ¥ÀÌÅͺ£À̽º¸¦ ÀÌ¿ëÇÏ´Â Groovy SQL ¿¹Á¦

ÀÌÁ¦ µð½ºÅ© ±â¹Ý ¾×½Ã¿Â µ¥ÀÌÅͺ£À̽º¸¦ ¸¸µé¾î »ç¿ëÇØ º¸ÀÚ. ¾×½Ã¿ÂÀ» µ¶¸³ÀûÀ¸·Î ½ÇÇàÇϱâ À§Çؼ­ ´ÙÀ½°ú °°ÀÌ CLASSPATH ȯ°æº¯¼ö¸¦ ¼³Á¤ÇÑ´Ù.

C:\Test> set CLASSPATH=%GROOVY_HOME%\lib\axion-1.0-M3-dev.jar;%CLASSPATH%
C:\Test> set CLASSPATH=%GROOVY_HOME%\lib\commons-collections-3.0-dev2.jar;%CLASSPATH%
C:\Test> set CLASSPATH=%GROOVY_HOME%\lib\commons-logging-1.0.3.jar;%CLASSPATH%
C:\Test> set CLASSPATH=%GROOVY_HOME%\lib\regexp-1.2.jar;%CLASSPATH%

´ÙÀ½°ú °°ÀÌ ÀÚ¹Ù ¸í·ÉÀ¸·Î ¾×½Ã¿ÂÀ» µ¶¸³ÀûÀ¸·Î ½ÇÇàÇÏ¿© tempDB¶ó´Â µ¥ÀÌÅͺ£À̽º¿¡ µÎ Å×À̺í ACTORS¿Í ROLES¸¦ »ý¼ºÇÑ´Ù. ±×·¯¸é C:\AxionDB\tempDB ¾Æ·¡¿¡ ACTORS¿Í ROLES ¼­ºêµð·ºÅ丮°¡ »ý°Ü ÀÖÀ» °ÍÀÌ´Ù.

C:\Test> java org.axiondb.tools.Console tempDB c:\AxionDB\tempDB

Type 'quit' to quit the program.
axion> create table ACTORS ( uid varchar(20), name varchar(20) )
Executed.
axion> create table ROLES ( uid varchar(20), role varchar(20) )
Executed.
axion> quit

<¸®½ºÆ® 3> µð½ºÅ© ±â¹Ý ¾×½Ã¿Â µ¥ÀÌÅͺ£À̽º¸¦ ÀÌ¿ëÇÏ´Â ±×·çºñ SQL ¿¹Á¦<¸®½ºÆ® 1> ½ºÆäÀ̽ºÅ¥ºêÀÇ ¸ÞÀÎ ¿¹Á¦

±×·çºê¸´
±×·çºê¸´À̶õ ±×·çºñ ¼­ºí¸´(Groovy Servlet)À» ÁÙÀÎ ¿ë¾î·Î¼­ ¡°±×·çºñ ¾ð¾î·Î ÀÛ¼ºÇÑ ÀÚ¹Ù ¼­ºí¸´¡±À» ÀǹÌÇÑ´Ù. ±×·çºê¸´Àº ±×·çºñ-ÄÚ¾î ÆÐŰÁö¿¡ Æ÷ÇԵǾî ÀÖ´Ù. Âü°íÀÚ·á¿¡ °£´ÜÇÑ ±×·çºê¸´ ¿¹Á¦µµ ¼Ò°³µÇ¾î ÀÖ´Ù.

ÀÚ¹ÙÀÇ °æ¿ì¿¡´Â ¼­ºí¸´ ¼Ò½º ÆÄÀÏÀÌ ÄÄÆÄÀÏµÈ Å¬·¡½º ÆÄÀÏÀÌ ¼­ºí¸´ÀÌÁö¸¸, ±×·çºñÀÇ °æ¿ì ½ºÅ©¸³ÆÃ ¾ð¾îÀÎ °ü°è·Î *.groovy ÀÇ ÆÄÀϸíÀ» °®´Â ¼Ò½º ÆÄÀÏ ÀÚü°¡ ±×·çºê¸´ÀÌ´Ù. ÇöÀç ±×·çºê¸´Àº ÅèĹ(Tomcat) 4.x ¹× 5.x¿¡¼­ Àß µ¿ÀÛÇÔÀÌ È®ÀεǾú´Ù. ´ÙÀ½Àº ÅèĹ¿¡¼­ ±×·çºê¸´À» µ¿ÀÛ½Ã۱â À§ÇÑ ÀýÂ÷ÀÌ´Ù.

%GROOVY_HOME%\lib ¹Ø¿¡ ÀÖ´Â asm-1.0.3.jar¿Í commons-cli-1.0.jar ±×¸®°í ÀÌ´ÞÀÇ µð½ºÄÏÀ¸·Îµµ Á¦°øµÇ´Â ÆÐÄ¡ ¶óÀ̺귯¸® groovy-1.0-beta-7-p2.jar¸¦ ÅèĹÀÇ <ÄÁÅØ½ºÆ®>\WEB-INF\lib µð·ºÅ丮¿¡ º¹»çÇÑ´Ù. ¿©±â¼­ groovy-1.0-beta-7-p2.jar´Â ÇÊÀÚ°¡ ±×·çºê¸´ °ü·Ã ºÎºÐÀ» ÆÐÄ¡ÇÑ °ÍÀ¸·Î¼­ ¿ø·¡ÀÇ groovy-1.0-beta-7.jar ´ë½Å À̰ÍÀ» ¾²µµ·Ï ÇÑ´Ù. ÀÌ ÆÐÄ¡ ¶óÀ̺귯¸®´Â ÀÌ´ÞÀÇ µð½ºÄÏÀ¸·Î Á¦°øµÈ´Ù.

<¸®½ºÆ® 4>¸¦ ÀÛ¼ºÇÏ¿© <ÄÁÅØ½ºÆ®>/WEB-INF/web.xml ÆÄÀÏ·Î ÀúÀåÇÑ´Ù. web.xml ÆÄÀÏ¿¡¼­ ±×·çºñ ±×·çºê¸´ ¼³Á¤ Áß¿¡ init-param ¿¤¸®¸ÕÆ®ÀÇ µð¹ö±×(debug) °ªÀº 0¿¡¼­ 11±îÁö ÁÙ ¼ö Àִµ¥ ÀÌ ¼ö°¡ Ŭ¼ö·Ï Äֿܼ¡ µð¹ö±×¸¦ À§ÇÑ Ãâ·ÂÀÌ ¸¹¾ÆÁø´Ù. º¸ÅëÀº 0À¸·Î ÇØ µÎ°í, µð¹ö±ëÇÒ ¶§¸¸ ´õ Å« °ªÀ¸·Î ÇÑ´Ù.

 <¸®½ºÆ® 4> ÅèĹ 5¿¡¼­ Groovlet ½ÇÇàÀ» À§ÇÑ web.xml ÆÄÀÏÀÇ ³»¿ë

±×·çºê¸´ ¼³Á¤ÀÌ Àß µÇ¾ú´ÂÁö Å×½ºÆ®ÇØ º¸ÀÚ. ´ÙÀ½ÀÇ Ã¹ ¹øÂ° ±×·çºê¸´ ¿¹Á¦¸¦ <ÄÁÅØ½ºÆ®>/greeting.groovy·Î ÀúÀåÇϰųª <ÄÁÅØ½ºÆ®>/WEB-INF/groovy/greeting.groovy·Î ÀúÀåÇÑ´Ù.

<ÄÁÅØ½ºÆ®>/WEB-INF/groovy µð·ºÅ丮´Â »ç¿ëÀº ÇÊÀÚ°¡ ÆÐÄ¡ÇÑ ¹öÀü¸¸ Áö¿øÇÑ´Ù. ÀÌ µð·ºÅ丮´Â ±×·çºñ ¼Ò½º·Î ÀÛ¼ºµÈ Ŭ·¡½º ÆÄÀÏÀ» ã´Â ±âÁØ µð·ºÅ丮À̱⵵ ÇÏ´Ù. Groovy Ŭ·¡½º¸¦ ·ÎµùÇÒ ¶§ À̰÷À» ±âÁØÀ¸·Î packageName.className ±ÔÄ¢ÀÌ Àû¿ëµÈ´Ù.

¡ß ù ¹øÂ° ±×·çºê¸´ ¿¹Á¦ : greeting.groovy
import java.util.Date
println "<b>${param.z}</b>´Ô, ȯ¿µÇÕ´Ï´Ù. <br />"
println "ÇöÀç ½Ã°¢Àº <font color='blue'>${new Date()}</font> <br />"

´ÙÀ½ ¿¹Á¦´Â ±¸±¸´Ü Ç¥¸¦ Ãâ·ÂÇÏ´Â ±×·çºê¸´ ¿¹Á¦ÀÌ´Ù. Ŭ·ÎÀú ³»¿¡¼­ Ãâ·ÂÇÒ ¶§´Â println ¸Þ½îµå°¡ ¾Æ´Ï¶ó out.println ¸Þ½îµå·Î Ãâ·ÂÇØ¾ß ÇÑ´Ù. Ŭ·ÎÀú ³»¿¡¼­ out¸¦ ½á¾ß ÇÏ´Â °ÍÀº ÇöÀç ±×·çºñÀÇ Å¬·ÎÀú °ü·Ã ¹®Á¦Á¡ Áß ÇϳªÀÎ °ÍÀ¸·Î º¸ÀδÙ.

¡ß ±¸±¸´Ü Ç¥ Ãâ·Â Groovet ¿¹Á¦ : gugu.groovy

println "<b>${dan}´Ü</b>: <br />"
for (x in 1..9) {
   println "${dan} X ${x} = ${dan * x} <br />"
}
println "<hr />"
println "<b>${dan}´Ü</b>: <br />"
1.upto(9) { |x|
   out.println "${dan} X ${x} = ${dan * x} <br />"
}

<¸®½ºÆ® 5>´Â 1³â Ä¡ ´Þ·ÂÀ» º¸¿©ÁÖ´Â ±×·çºê¸´ ¿¹Á¦ÀÌ´Ù. ÀÌ´Â ¼­ºí¸´°ú ±×·çºê¸´À» ºñ±³Çϱâ À§ÇØ Âü°íÀÚ·á ¿¡ ¼Ò°³µÈ ´Þ·Â ¼­ºí¸´ ¿¹Á¦¸¦ ±×·çºê¸´À¸·Î º¯È¯ÇÑ °ÍÀÌ´Ù.  

 <¸®½ºÆ® 5> ´Þ·Â ±×·çºê¸´ ¿¹Á¦ : calendar.groovy

GSP
ÀÚ¹Ù¼­¹ö ÆäÀÌÁö(JavaServer Pages)¸¦ ÁÙ¿©¼­ JSP¶ó°í ÇϵíÀÌ ±×·çºñ¼­¹ö ÆäÀÌÁö(GroovyServer Pages)¸¦ ÁÙ¿©¼­ GSP¶ó°í ÇÑ´Ù. GSP´Â ¿ø·¡ 2004³â 1¿ù¿¡ Æ®·ÎÀÌ Çì´×°Å¿¡ ÀÇÇØ ÀÛ¼ºµÇ¾ú´ø °ÍÀÌ´Ù.

GSP´Â groovy-core¿¡ Æ÷ÇԵǾî ÀÖÁö ¾ÊÁö ¾Ê°í º°µµÀÇ ¸ðµâ·Î µÇ¾î ÀÖ´Ù. GSP¸¦ ¾µ·Á¸é ±×·çºñ GSP ¸ðµâ CVS¿¡¼­ ¼Ò½º¸¦ °¡Á®¿Í¾ß ÇÑ´Ù.

¡ß Groovy CVS¿¡ ·Î±×ÀÎÇϱâ

   > cvs -d :pserver:anonymous@cvs.groovy.codehaus.org:/home/projects/groovy/scm login
   password:

ÆÐ½º¿öµå¿¡ anonymous¸¦ ÀÔ·ÂÇÑ´Ù.

¡ß Groovy CVS¿¡¼­ GSP ¸ðµâ °¡Á®¿À±â

   > cvs -z3 -d :pserver:anonymous@cvs.groovy.codehaus.org:/home/projects/groovy/scm co groovy/modules/pages

±×·çºñ°¡ ±×µ¿¾È 1.0 º£Å¸ 6, º£Å¸ 7·Î ¾÷±×·¹À̵åµÇ¸é¼­ 2004³â 1¿ù¿¡ ÀÛ¼ºµÇ¾ú´ø GSP°¡ »õ·Î¿î ±×·çºñ ¹öÀü°ú ¸ÂÁö ¾Ê°Ô µÇ¾ú´Ù. ±×·¡¼­ ÇÊÀÚ°¡ GSP¸¦ »õ ¹öÀüÀÇ ±×·çºñ¿Í Àß µ¿ÀÛÇϵµ·Ï ¼öÁ¤ÇÏ¿´´Ù. ¼öÁ¤ÇÑ ¼Ò½º¿Í jar ¶óÀ̺귯¸® ÆÄÀÏÀ» ÀÌ´ÞÀÇ µð½ºÄÏÀ¸·Î Á¦°øÇÑ´Ù. ÀÌ´ÞÀÇ µð½ºÄÏ¿¡ gsp-1.2-e7.jar¶ó´Â À̸§À¸·Î µÇ¾î ÀÖ´Ù. À̸¦ <ÄÁÅØ½ºÆ®>/WEB-INF/lib µð·ºÅ丮¿¡ º¹»çÇÑ´Ù.

          gsp-1.2-e7.jar

<¸®½ºÆ® 6>Àº <ÄÁÅØ½ºÆ®>/WEB-INF/web.xml ÆÄÀÏ¿¡ Ãß°¡µÇ¾î¾ß ÇÒ ³»¿ëÀÌ´Ù. GSP ¼³Á¤ Áß init-param ¿¤¸®¸ÕÆ®¿¡¼­ debugÀÇ °ªÀº 0¿¡¼­ 11±îÁö ÁÙ ¼ö Àִµ¥ ÀÌ ¼ö°¡ Ŭ¼ö·Ï ÅèĹ ½ÇÇà Äֿܼ¡ µð¹ö±×¿ë Ãâ·ÂÀÌ ¸¹¾ÆÁöµµ·Ï µÇ¾î ÀÖ´Ù.

 <¸®½ºÆ® 6> GSP¸¦ À§ÇØ web.xml ÆÄÀÏ¿¡ Ãß°¡µÉ ³»¿ë

GSP¿¡¼­´Â ¹ÙÀεåµÈ 5°³ÀÇ °´Ã¼ out, request, response, application, sessionµéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½ ¿¹Á¦¸¦ <ÄÁÅØ½ºÆ®>/greeting.gsp·Î ÀúÀåÇϰí, URL ÁÖ¼Ò localhost:8080/<ÄÁÅØ½ºÆ®>/greeting.gsp?z=guest ¸¦ ¹æ¹®ÇÏ¿© Å×½ºÆ®ÇÑ´Ù. ¿¹Á¦¿¡¼­ ${param.z}´Â ´õ °£´ÜÈ÷ ${z}·Î ÇØµµ µÈ´Ù.

¡ß ù ¹øÂ° GSP ¿¹Á¦ : greeting.gsp
<%@ page import="java.util.Date" %>
<b>${param.z}</b>´Ô, ȯ¿µÇÕ´Ï´Ù. <br />
ÇöÀç ½Ã°¢Àº <font color="blue">${new Date()}</font> <br />

´ÙÀ½ ¿¹Á¦´Â ¾Õ¿¡¼­ ¼Ò°³µÈ ±¸±¸´Ü Ç¥ Ãâ·Â GroovletÀ» GSP·Î °íÄ£ °ÍÀÌ´Ù. ¿¹Á¦¿¡¼­ º¯¼ö danÀº param.danÀ¸·Î ÇØµµ µÈ´Ù.

? ±¸±¸´Ü Ç¥ Ãâ·Â GSP ¿¹Á¦ : gugu.gsp
<b>${dan}´Ü</b>: <br />
<% for (x in 1..9) { %>
   ${dan} X ${x} = ${dan * x} <br />
<% } %>
<hr />
<b>${dan}´Ü</b>: <br />
<% 1.upto(9) { |x| %>
   out.println "${dan} X ${x} = ${dan * x} <br />"
<% } %>

Groovy 1.0 º£Å¸ 6, º£Å¸ 7¿¡ ÀÖ´ø ¿ø·¡ÀÇ ±×·çºê¸´ ¶óÀ̺귯¸®´Â ÅØ½ºÆ®¸¸ Ãâ·ÂÇϵµ·Ï µÇ¾î ÀÖ´Ù. Çì´×°Å°¡ ¸¸µç ¿ø·¡ÀÇ GSPµµ ±×·¯ÇÏ¿´´Ù. ±×·¯³ª ÇÊÀÚ°¡ ¼öÁ¤ÇÑ ±×·çºê¸´ ¶óÀ̺귯¸®¿Í GSP ¸ðµâÀº À̹ÌÁö °°Àº ¹ÙÀ̳ʸ®µµ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. À̹ÌÁö Ãâ·ÂÇÏ´Â Groovlet ¿¹Á¦´Â Áö¸é °ü°è»ó ÀÌ´ÞÀÇ µð½ºÄÏ¿¡ ³Ö±â·Î Çϰí, <¸®½ºÆ® 7>¿¡ À̹ÌÁö Ãâ·Â GSP ¿¹Á¦¸¦ ¼Ò°³ÇÑ´Ù.

ÀÌ ¿¹Á¦´Â ÀÚÀÌ½ð¼­ºí¸´(JythonServlet) ¿¹Á¦¸¦ GSP·Î ¼öÁ¤ÇÑ °ÍÀÌ´Ù. ½ÇÇà ³¡±îÁö Ãâ·ÂÇÒ ¹ÙÀ̳ʸ® µ¥ÀÌÅÍ ¿Ü¿¡ ¾î´À ¹®ÀÚµµ Àý´ë·Î Ãâ·ÂµÇÁö ¾Êµµ·Ï ½ºÅ©¸³Æ²¸´ ű׸¦ ÀÛ¼ºÇØ¾ß ÇÑ´Ù. Áï, <%@ ...... %><% ...... %> ½ÄÀ¸·Î ÇÑ ½ºÆ®¸³Æ²¸´ ű×ÀÇ ³¡°ú ±× ´ÙÀ½ ½ºÆ®¸³Æ²¸´ ű×ÀÇ ½ÃÀÛ »çÀÌ¿¡ ¾Æ¹« ±ÛÀÚµµ Ãâ·ÂµÇÁö ¾Êµµ·Ï ¿ÏÀüÈ÷ ºÙ¿©¼­ ÀÛ¼ºÇØ¾ß ÇÑ´Ù(<¸®½ºÆ® 7>ÀÇ 8°ÁÙ ÂüÁ¶).

 <¸®½ºÆ® 7> Java2D À̹ÌÁö Ãâ·Â GSP ¿¹Á¦ : starImage.gsp

±×·çºñ¸¦ BSF¿Í ÇÔ²²
¿©±â¼­´Â BSF(Bean Sctript Framework)¸¦ ½á¼­ JSP ÆÄÀÏ¿¡¼­ ±×·çºñ¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¼³¸íÇϰíÀÚ ÇÑ´Ù. BSF´Â ÀÚ¹Ù ¼Ò½º¿¡¼­ ¿©·¯ °¡Áö ½ºÅ©¸³Æ® ¾ð¾î¸¦ ½±°Ô »ç¿ëÇϱâ À§ÇØ °³¹ßµÈ µµ±¸ÀÌ´Ù. BSF¸¦ ÀÌ¿ëÇϸé ÀÚ¹Ù ¼Ò½º ÆÄÀÏÀ̳ª JSP ÆÄÀÏ¿¡¼­ ÀÚ¹Ù ¾ð¾î°¡ ¾Æ´Ñ ´Ù¸¥ ¾ð¾î·Îµµ ¼Ò½º¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. ÇöÀç´Â ¸®³ë(Rhino), ÀÚÀ̽ð(Jython), ºó½©(BeanShell), Jacl, Tcl, ±×·çºñ µîÀ» ¾µ ¼ö ÀÖ´Ù. JSP¿¡¼­ BSFÀ» ¾²±â À§Çؼ­´Â ´ÙÀ½ jar ÆÄÀϵéÀ» ±¸ÇÏ¿© <ÄÁÅØ½ºÆ®>/WEB-INF/lib µð·ºÅ丮¿¡ °®´Ù ³õ´Â´Ù.

    ¡ß bsf-2.3.0-rc1.jar        jakarta.apache.prg/bsf¿¡¼­ ±¸ÇÑ´Ù.
    ¡ß jython.jar              mozilla.org/rhino¿¡¼­ ±¸ÇÑ´Ù.
    ¡ß jacl.jar ¹× tcljava.jar     jacl.sourceforge..net/download.html¿¡¼­ ±¸ÇÑ´Ù.

<ÄÁÅØ½ºÆ®>/WEB-INF/web.xml ÆÄÀÏ¿¡ ´ÙÀ½Ã³·³ taglib ¿¤¸®¸ÕÆ®¸¦ Ãß°¡ÇÑ´Ù. taglib-bsf.tld ÆÄÀÏÀº bsf-2.3.0-rc1¿¡ ÀÖ´Â ±×´ë·ÎÀÌ´Ù.

       <web-app>
            ....................................
             <taglib>
                 <taglib-uri>http://jakarta.apache.org/taglibs/bsf-2.0</taglib-uri>
                 <taglib-location>/WEB-INF/taglibs-bsf.tld</taglib-location>
             </taglib>
       </web-app>

BSF¿¡¼­ ±×·çºñ¸¦ ¾²±â À§Çؼ­´Â ´ÙÀ½°ú °°ÀÌ ±×·çºñ ½ºÅ©¸³Æ® ¿£Áø µî·Ï °úÁ¤ÀÌ ´õ ÇÊ¿äÇÏ´Ù. BSFÀÇ Â÷ÈÄ ¹öÀü¿¡¼­´Â ÀÌ·± º°µµÀÇ °úÁ¤ÀÌ ¾ø¾îµµ µÉ °ÍÀ¸·Î º»´Ù.

    
      org.apache.bsf.BSFManager.registerScriptingEngine(
                    "groovy",
                    "org.codehaus.groovy.bsf.GroovyEngine",
                    new String[] { "groovy", "gy" }
      );

 <¸®½ºÆ® 7> BSF¸¦ ÀÌ¿ëÇÏ´Â JSP ¿¹Á¦ : bsfTest.jsp

±×·çºñ ¿ÀÇ ÇÁ·ÎÁ§Æ®
2005³â º½Âë¿¡´Â ±×·çºñ¿¡ °üÇÑ ¼­ÀûÀÌ ¸î °¡Áö ³ª¿Ã °ÍÀ¸·Î ¿¹»óµÈ´Ù. ±×·çºñ°¡ ¾ÆÁ÷ º£Å¸ ¹öÀüÀ̶ó ¹ö±×°¡ Á¦¹ý ÀÖ°í, »õ ¹öÀüÀÌ ³ª¿Ã ¶§¸¶´Ù º¯°æµÇ´Â °Íµµ ÀÖÁö¸¸, ±×·çºñ À§Å° ÆäÀÌÁö¿Í ±×·çºñ ¸ÞÀϸµ ¸®½ºÆ®¸¦ ÅëÇØ ±×·çºñ ¿ÀÇ ÇÁ·ÎÁ§Æ®¸¦ ÁöÄѺ¸¸é¼­ ±× ¹ßÀüÀ» Á÷Á¢ üÇèÇÏ´Â °ÍÀº À¯ÀÍÇϰí ÁÁÀº °æÇèÀÌ µÇ¸®¶ó º»´Ù. ÀÌ ±Û¿¡¼­ ¾ð±ÞµÈ ÀÚ·á Áß ÀϺδ ÇÊÀÚÀÇ ±¹³» ±×·çºñ ¾ð¾î ȨÆäÀÌÁö¿¡¼­µµ ±¸ÇÒ ¼ö ÀÖµµ·Ï ÇϰڴÙ.

´ÙÀ½ ±Û¿¡¼­´Â ±×·çºñ¿¡¼­ Á¦°øÇÏ´Â ¸î °¡Áö ºô´õµé¿¡ ´ëÇØ ¾Ë¾Æº¸°í, ±×·çºñ ¾ð¾î¸¦ ´Ù¸¥ ½ºÅ©¸³Æ® ¾ð¾î¿ÍÀÇ ºñ±³ÇØ º¸°íÀÚ ÇÑ´Ù. @

* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.
µ¶ÀÚÀÇ°ß ³²±â±â (·Î±×ÀÎ ÈÄ µ¶ÀÚ ÀǰßÀ» ³²±â½Ç ¼ö ÀÖ½À´Ï´Ù.)
¾ÆÀ̵ð ºñ¹Ð¹øÈ£
 
 
'ÁÖÃãÁÖÃã ¼Ò´Ï' º¸±ÞÇü Ä·ÄÚ´õ ½ÃÀå »ï¼º ¸Í°ø¡¦À¯Æ©ºê ¸ÂÃãÇü 'VM-MX20C' [00:07:48]
ÁøÇà ·ùÁØ¿µ ±âÀÚ, Á¦ÀÛ À¯È¸Çö PD
[ZDNET ¿µ¹®¹æ¼Û]±¸±Û À¥ºê¶ó¿ìÀú '±¸±Û Å©·Ò' º£Å¸¹öÀü °ø°³ [00:01:29]
Áöµð³ÝÄÚ¸®¾Æ ¿µ»óÁ¦ÀÛÆÀ
EMC-·¹³ëº¸, ¿Â¶óÀÎ µ¥ÀÌÅÍ ¹é...
SK C&C, ¾È»ê½Ã Áö´ÉÇü±³ÅëÁ¤...
Ä«Æä24 ¼îÇθô ÇØ¿Ü¹è¼Û '½ºÇǵå...
Çѱ¹¾îµµºñ, '¾ÖÅ©·Î¹î 9' ÇѱÛ...
LGÀüÀÚ, 8¹é¸¸ È­¼Ò ¸ÖƼ¹Ìµð¾î...