{"id":878,"date":"2012-06-04T06:49:48","date_gmt":"2012-06-04T06:49:48","guid":{"rendered":"http:\/\/brain.dailyon.net\/?p=878"},"modified":"2012-06-04T06:49:48","modified_gmt":"2012-06-04T06:49:48","slug":"what-is-spring-roo","status":"publish","type":"post","link":"https:\/\/blog.goorigo.com\/?p=878","title":{"rendered":"What is Spring Roo?"},"content":{"rendered":"<p>\uc790\ubc14 \uac1c\ubc1c\uc790\ub97c \uc704\ud55c \uc2e0\uc18d\ud55c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c \ud234 Spring Roo<\/p>\n<p>Spring Roo\ub294 \ubb34\uc5c7\uc778\uac00?<\/p>\n<p>\uc6b0\uc120, \uc27d\uac8c \uc624\ud574 \ud560 \uc218 \uc788\ub294 \ubd80\ubd84\ubd80\ud130 \uc5b8\uae09\ud558\ub294 \uac83\uc774 \uc88b\uaca0\ub2e4. \u201cSpring Roo\u201d\ub294 \ud504\ub808\uc784\uc6cc\ud06c\uac00 \uc544\ub2c8\ub77c \uac1c\ubc1c \ud234\uc774\ub2e4. \uc77c\uc885\uc758 \ucf54\ub4dc \uc0dd\uc131 \ud234\uc774\ub2e4. \uc790\ubc14 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ub7f0\ud0c0\uc784\uc2dc\uc5d0 \uc0ac\uc6a9\ud560 \uc544\ubb34\ub7f0 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub3c4 \uc81c\uacf5\ud558\uc9c0 \uc54a\uc73c\uba70, \uc5b4\ub5a0\ud55c \ucf54\ub529\uc774\ub098 \uc544\ud0a4\ud14d\ucc98 \uc2a4\ud0c0\uc77c\uc744 \uac15\uc694\ud558\uc9c0\ub3c4 \uc54a\ub294\ub2e4. \ub530\ub77c\uc11c \ud504\ub808\uc784\uc6cc\ud06c\ub85c \ubcfc \uc218 \uc5c6\ub2e4. \uadf8\ub7ec\ubbc0\ub85c, Ruby on Rails\ub098 Play\uc640 \ube44\uad50\ud558\ub294 \uac83\uc740 \ud0c0\ub2f9\ud558\uc9c0 \uc54a\ub2e4. Spring Roo\ub97c \uc0ac\uc6a9\ud574\uc11c \uac1c\ubc1c\ud560 \uc218 \uc788\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc740 \uae30\ubcf8\uc801\uc73c\ub85c \uc2a4\ud504\ub9c1 \uae30\ubc18\uc758 \uc790\ubc14 (\uc6f9) \uc560\ud50c\ub9ac\ucf00\uc774\uc158, GWT \uc560\ud50c\ub9ac\ucf00\uc774\uc158, Google App Engine\uc6a9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub4f1 \ub2e4\uc591\ud558\ub2e4. \ub2e8\uc9c0, \ube60\ub978 \uac1c\ubc1c\uc744 \uac00\ub2a5\ucf00 \ud574\uc8fc\ub294 \uac1c\ubc1c \ud234\uc77c \ubfd0\uc774\ub2e4. \uadf8\ub7fc \uc5b4\ub5a4 \ubc29\ubc95\uc73c\ub85c \uac1c\ubc1c\uc744 \ube60\ub974\uac8c \ud574\uc8fc\ub294\uc9c0 \uc2e4\uc2b5\uc744 \ud1b5\ud574\uc11c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n<p>Spring Roo \uc124\uce58<\/p>\n<p>Spring Roo\ub294 \uac1c\ubcc4\uc801\uc73c\ub85c \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc544\uc11c \uc124\uce58\ud560 \uc218\ub3c4 \uc788\uc9c0\ub9cc, \uc0ac\uc2e4 \ubcc4\ub2e4\ub978 \uc124\uce58 \uacfc\uc815\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\ub2e4. \ub2e4\uc6b4\ubc1b\uc544\uc11c \uc555\ucd95\uc744 \ud478\ub294 \uac83\uc73c\ub85c \ub05d\uc774\ub2e4. Spring Too Suite(STS)\ub97c \ub2e4\uc6b4\ubc1b\uc544 \uc124\uce58\ud588\ub2e4\uba74, Spring Roo\ub97c \ubcc4\ub3c4\ub85c \uc124\uce58\ud558\uc9c0 \uc54a\uc544\ub3c4 \ub41c\ub2e4. \uc774\ubbf8 STS\ub97c \uc124\uce58\ud558\uba74\uc11c \uac19\uc774 \uc124\uce58\ub410\uc744 \uac83\uc774\ub2e4.<\/p>\n<p>Spring Roo \ud504\ub85c\uc81d\ud2b8 \ub9cc\ub4e4\uae30<\/p>\n<p>New -&gt; Project -&gt; Spring Roo Project\ub97c \uc120\ud0dd\ud558\uba74, Roo \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub2e4. Spring Roo \ucd08\uae30 \ubc84\uc804\uc740 \ucf58\uc194\uc5d0\uc11c\ub9cc \uc791\uc5c5\ud574\uc57c \ud588\uc5c8\uc9c0\ub9cc, STS\uc5d0\uc11c Spring Roo \uc9c0\uc6d0 \uae30\ub2a5\uc744 \ucd94\uac00\ud55c \ub4a4\ub85c\ub294, \ucf58\uc194\uc5d0\uc11c \uc791\uc5c5\ud574\uc57c \ud560 \ud544\uc694\uac00 \uc5c6\uc5b4\uc84c\ub2e4. \uc774 \uba54\ub274\ub97c \uc0ac\uc6a9\ud574\uc11c \ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uace0 \ub098\uba74 STS\uc758 Package Explorer\uc5d0 \ud504\ub85c\uc81d\ud2b8\uac00 \uc0dd\uae30\uace0 STS \ud558\ub2e8\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc740 Roo Shell\uc744 \ubcfc \uc218 \uc788\ub2e4.<\/p>\n<p>\uc55e\uc73c\ub85c \uc774 \ubdf0\uac00 \ucf58\uc194\uc744 \ub300\uc2e0\ud560 \uac83\uc774\ub2e4. \uc5ec\uae30\uc11c roo\uac00 \uc81c\uacf5\ud558\ub294 DSL\uc744 \uc0ac\uc6a9\ud574\uc11c JPA\ub97c \uc124\uc815\ud558\uace0, \uc5d4\ud2f0\ud2f0 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4e4\uace0, \uac01 \uc5d4\ud2f0\ud2f0\uc5d0 \ud544\ub4dc\ub97c \ucd94\uac00\ud558\uace0, \uc5f0\uad00 \uad00\uacc4\ub97c \uc124\uc815\ud558\uace0, \ucee8\ud2b8\ub864\ub7ec\ub97c \ub9cc\ub4e4\uace0, \ud14c\uc2a4\ud2b8\ub97c \ub9cc\ub4dc\ub294 \ub4f1\uc758 \uc5ec\ub7ec \uc791\uc5c5\uc744 \ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\ud504\ub85c\uc81d\ud2b8 \uad6c\uc870\ub294 \ud3c9\ubc94\ud55c \uba54\uc774\ube10 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870\uc774\uace0, \uc2a4\ud504\ub9c1 \uc124\uc815 \ud30c\uc77c\uc778 applicationContext.xml\uc744 \ubcfc \uc218 \uc788\ub2e4. \uc774\uc640 \uac19\uc740 \uba54\uc774\ube10 \ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4e4\uace0 \uae30\ubcf8 \uc2a4\ud504\ub9c1 \uc124\uc815\uacfc pom.xml\uc5d0 \uc2a4\ud504\ub9c1 \uc758\uc874\uc131\uae4c\uc9c0 \ucc44\uc6cc\ub123\ub294 \uc791\uc5c5\uc740 \uba54\uc774\ube10 \uc544\ud0a4\ud0c0\uc785 \uc5c6\uc774\ub294 \uc0c1\ub2f9\ud788 \uc624\ub798 \uac78\ub9ac\ub294 \uc791\uc5c5\uc774\ub2e4. \uc774\uac83\ub9cc\uc73c\ub85c\ub3c4 \ucda9\ubd84\ud788 Spring Roo\uc758 \uac00\uce58\uac00 \uc788\ub2e4\uace0 \uc0dd\uac01\ud558\uc9c0\ub9cc, \ub300\ubd80\ubd84\uc758 \ub3c5\uc790\ub294 \uc5ec\uae30\uc11c \ub9cc\uc871\ud558\uc9c0 \ubabb\ud560 \uac83\uc774\ub2e4. \uac8c\ub2e4\uac00, \ubcf8\uc778\uc774 \uc9c1\uc811 \uad00\ub9ac\ud558\uace0 \uc788\uac70\ub098 \uc0ac\ub0b4\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uba54\uc774\ube10 \uc544\ud0a4\ud0c0\uc785\uc774 \uc788\ub2e4\uba74, \ubc29\uae08 Spring Roo\uac00 \uc81c\uacf5\ud55c \ube60\ub978 \uac1c\ubc1c \uc9c0\uc6d0 \uae30\ub2a5\uc744 \ubcc4 \uac83 \uc544\ub2cc \uac83\ucc98\ub7fc \ub290\uaef4\uc9c8 \uac83\uc774\ub2e4.<\/p>\n<p>\uacc4\uc18d\ud574\uc11c \uc2a4\ud504\ub9c1 \ube48 \uc124\uc815 \ud30c\uc77c\uc744 \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n<p>&lt;beans xmlns=&quot;http:\/\/www.springframework.org\/schema\/beans&quot;<\/p>\n<p>\u2026<\/p>\n<p>applicationContext.xml\uc5d0 \ub4e4\uc5b4\uc788\ub294 \ube48 \uc124\uc815\uc5d0\uc11c \uc8fc\uc11d\uc744 \uc81c\uc678\ud558\uba74 \uc704\uc640 \uac19\uc740 \uc124\uc815\ub9cc \ub0a8\ub294\ub2e4. \uc774 \uc911\uc5d0\uc11c Spring Roo\uc640 \uad00\ub828\ud574\uc11c \uac00\uc7a5 \uc911\uc694\ud55c \uc124\uc815\uc740 \ub77c\ub294 \uc124\uc815\uc774\ub2e4. \uc774 \uc124\uc815\uc744 \uc0ac\uc6a9\ud558\uba74, \uc2a4\ud504\ub9c1 ApplicationContext\uc5d0 \ube48\uc73c\ub85c \ub4f1\ub85d\ub418\uc9c0 \uc54a\uc740 \uac1d\uccb4\uc5d0\ub3c4 \uc2a4\ud504\ub9c1 Dependency Injection\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\uc640 Spring Roo<\/p>\n<p>\ube48\uc73c\ub85c \ub4f1\ub85d\ud558\uc9c0 \uc54a\uc740 \uac1d\uccb4\uc5d0 \uc2a4\ud504\ub9c1\uc774 \uad00\ub9ac\ud558\ub294 \uc758\uc874\uc131\uc744 \uc8fc\uc785\ud558\ub294 \uc77c\uc740 \uacb0\ucf54 \uc26c\uc6b4 \uc77c\uc774 \uc544\ub2c8\ub2e4. \uc989, \uc5b4\ub514\uc120\uac00, Book book = new Book(); \uc774\ub77c\uace0 book \uac1d\uccb4\ub97c \ub9cc\ub4e4\uba74, \uc774 \uac1d\uccb4\uc5d0 BookRepository \ud0c0\uc785\uc758 \ube48\uc744 \uc8fc\uc785\ud55c\ub2e4\ub294 \uac83\uc778\ub370, \uadf8\ub807\uac8c \ud558\ub824\uba74 Book \ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\uac00 \ud638\ucd9c\ub418\ub294 \uc2dc\uc810\uc5d0 \ubd80\uac00\uc801\uc778 \uc791\uc5c5\uc744 \uc218\ud589\ud574\uc57c \ud55c\ub2e4. \ud558\uc9c0\ub9cc, \uc774\ub7f0 \uae30\ub2a5\uc744 \uc2a4\ud504\ub9c1 AOP\ub85c\ub294 \ud560 \uc218 \uc5c6\ub2e4. \uc774\ub7f0 \uae30\ub2a5\uc740 \ubaa8\ub4e0 AOP \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 ApsectJ\ub97c \uc0ac\uc6a9\ud574\uc57c\uc9c0\ub9cc \uac00\ub2a5\ud558\ub2e4.<\/p>\n<p>AspectJ\uc758 \uc0dd\uc131\uc790 \ud638\ucd9c Joinpoint(AOP \uc6a9\uc5b4\ub85c, \ubd80\uac00 \uae30\ub2a5\uc744 \ucd94\uac00\ud560 \uc218 \uc788\ub294 \uc9c0\uc810\uc744 \ub9d0\ud55c\ub2e4. \ud504\ub85d\uc2dc \uae30\ubc18\uc758 \uc2a4\ud504\ub9c1 AOP\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 Joinpoint\ub294 \uba54\uc11c\ub4dc \ud638\ucd9c joinpoint \ubfd0\uc774\ub2e4.)\ub97c \uc0ac\uc6a9\ud558\uc5ec Book \ud074\ub798\uc2a4\uac00 \uc0dd\uc131\ub418\ub294 \uc2dc\uc810\uc5d0 \uc2a4\ud504\ub9c1\uc758 Dependency Injection \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud574\uc11c \uc2a4\ud504\ub9c1 ApplicationContext\uc5d0 \ub4e4\uc5b4\uc788\ub294 BookRepository \ud0c0\uc785\uc758 \ube48\uc744 \uc8fc\uc785\ud558\ub294 \uc791\uc5c5\uc774 \uac00\ub2a5\ud558\ub2e4.<\/p>\n<p>Spring Roo \uc544\ud0a4\ud14d\ucc98<\/p>\n<p>\uadf8\ub7f0\ub370, \uc774\ub7f0 \uae30\ub2a5\uc774 Spring Roo\uc5d0 \uc65c \ud544\uc694\ud560\uae4c? \uadf8\uac83\uc740 Spring Roo\uac00 \ucd5c\uadfc\uae4c\uc9c0 \uace0\uc218\ud588\ub358 \uc544\ud0a4\ud14d\ucc98 \ub54c\ubb38\uc774\ub2e4. \uc9c0\uae08\uae4c\uc9c0 Spring Roo\ub294 PEAA(Patterns of Enterprise Application Architecture)\uc5d0\uc11c \uc18c\uac1c\ud55c Active Record \ud328\ud134\uc744 \uace0\uc218\ud588\ub2e4. Active Record \ud328\ud134\uc740 DB\uc758 \ud55c \ud589\uc774 \ud558\ub098\uc758 \uac1d\uccb4\uc640 \ub300\uc751\ud558\ub3c4\ub85d \ud558\uace0 DB \uc624\ud37c\ub808\uc774\uc158\ub3c4 \ud574\ub2f9 \uac1d\uccb4\uac00 \uc9c0\ub2c8\uace0 \uc788\uac8c \ud558\ub294 \ud328\ud134\uc774\ub2e4(\ucc38\uace0, http:\/\/en.wikipedia.org\/wiki\/Active_record_pattern).<\/p>\n<p>Active Record \ud328\ud134\uc744 \uc120\ud0dd\ud55c \uc774\uc720\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc758 \uac04\ud3b8\ud568 \ub54c\ubb38\uc774\ub2e4. \u201c\ucee8\ud2b8\ub864\ub7ec -&gt; \ub3c4\uba54\uc778 \uac1d\uccb4\u201d \uc774\ub807\uac8c \ub2e8\uc21c\ud55c \ud638\ucd9c\ub85c \ubaa8\ub4e0 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\ub2c8\uae4c \uc5bc\ub9c8\ub098 \uac04\ub2e8\ud55c\uac00. \ud558\uc9c0\ub9cc, \uc2a4\ud504\ub9c1 \uc9c4\uc601\uc5d0\uc11c \ub2ec\uac11\uc9c0 \uc54a\uc544\ud558\ub294 static \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud574\uc11c Finder\ub97c \uad6c\ud604\ud558\uace0, \ud2b8\ub79c\uc7ad\uc158 \uacbd\uacc4\ub97c \uc5b4\ub514\ub85c \ub450\uc5b4\uc57c \ud558\ub294\uc9c0 \uc560\ub9e4\ud558\uba70, \uc5d4\ud2f0\ud2f0 \uac1d\uccb4\uc5d0 \uc8fc\uc785\ub418\ub294 \uc5ec\ub7ec \uc758\uc874\uc131\uc73c\ub85c \uc778\ud574\uc11c \ud14c\uc2a4\ud2b8\ud558\uae30 \uc5b4\ub835\ub2e4\ub294 \uc9c0\uc801(\ucc38\uace0, http:\/\/moleseyhill.com\/blog\/2009\/07\/13\/active-record-verses-repository\/) \ub4f1\uc774 \uc0dd\uaca8\ub098\uc790. \ucd5c\uadfc\uc5d0\ub294 \uadf8 \uc804\ub7b5\uc744 \ubc14\uafe8\ub2e4.<\/p>\n<p>(\ucd9c\ucc98: http:\/\/blog.springsource.com\/2011\/09\/14\/new-application-layering-and-persistence-choices-in-spring-roo\/)<\/p>\n<p>SpringSource\uc5d0\uc11c \ucd5c\uadfc\uc5d0 \ubc30\ud3ec\ud55c Spring Roo 1.2 M1 \ubd80\ud130\ub294 \uc77c\ubc18\uc801\uc778 Serivce, Repository \uacc4\uce35 \uad6c\uc870\uc758 \uc544\ud0a4\ud14d\ucc98\ub3c4 \uc9c0\uc6d0\ud55c\ub2e4. \ub530\ub77c\uc11c, Active Record \ud328\ud134\uc744 \uc120\ud0dd\uc801\uc73c\ub85c(\uae30\ubcf8\uac12\uc740 Active Record \ud328\ud134 \uc2a4\ud0c0\uc77c) \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\uc774\uc81c\ubd80\ud130 JPA\ub97c \uc124\uc815\ud558\uace0, \uc5d4\ud2f0\ud2f0\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uc790.<\/p>\n<p>JPA \uc124\uc815<\/p>\n<p>JPA \uacf5\uae09\uc790\uc640 \uad00\ub828 DB\ub97c \uc124\uc815\ud558\ub77c\ub294 \ud78c\ud2b8\ub97c \ubcf4\uc5ec\uc900\ub2e4. JPA\ub97c \uc124\uc815\ud558\uc790. \uc785\ub825\ucc3d\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 \uc785\ub825\ud55c\ub2e4.<\/p>\n<p>jpa setup ?provider HIBERNATE ?database HYPERSONIC_IN_MEMORY<\/p>\n<p>\uc5ec\uae30\uc11c jpa setup \uc774\ud6c4\ub85c\ub294 \ud55c \uae00\uc790\ub3c4 \uc9c1\uc811 \uc785\ub825\ud55c \uba85\ub839\uc5b4\uac00 \uc5c6\ub2e4. jpa setup\ub9cc \uc785\ub825\ud55c \ub4a4\uc5d0 \uacc4\uc18d\ud574\uc11c Ctrl+Space\ub97c \uc0ac\uc6a9\ud574\uc11c \ud78c\ud2b8\ub85c \uc81c\uacf5\ub418\ub294 \uba85\ub839\uc5b4 \uc911\uc5d0\uc11c \uc120\ud0dd\ud558\uc5ec \uc785\ub825\ud588\ub2e4. \uc774\ub7f0 \ubc29\ubc95\uc73c\ub85c \uc800\ub807\uac8c \uae34 \uba85\ub839\uc5b4\ub3c4 \uc804\ud600 \uc678\uc6b0\uc9c0 \uc54a\uace0 \uc785\ub825\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\uc774 \uba85\ub839\uc5b4\ub97c \uc785\ub825\ud558\uba74, hsqldb 1.8.0.10\uacfc Hibernate 3.6.7 \ubc84\uc804\uc744 \uc758\uc874\uc131\uc744 \uac00\uc838\uc624\uace0, applicationContext.xml\uc758 \ub0b4\uc6a9\uc744 \uc218\uc815\ud558\uba70, persistence.xml \ud30c\uc77c\uc744 \ub9cc\ub4e4\uc5b4 \uc900\ub2e4. \uc774\ub7f0 \uc791\uc5c5\uc744 \uc190\uc218 \ud558\ub824\uba74 \uc5bc\ub9c8\ub098 \uc624\ub798 \uac78\ub838\uc744\uae4c? \uc758\uc874\uc131 \uc815\ubcf4\ub97c \ucc3e\uc73c\ub824\uace0 \uba87 \ubd84 \uc18c\uc694\ud588\uc744 \uac83\uc774\uace0, applicationContext\uc5d0 JPA\uc5d0 \uc0ac\uc6a9\ud560 \ube48\uacfc \ud2b8\ub79c\uc7ad\uc158 \uc124\uc815\uc744 \ucd94\uac00\ud558\ub290\ub77c \ub610 \uba87 \ubd84 \uc18c\uc694\ud588\uc744 \uac83\uc774\ub2e4. \uadf8 \ub4a4\uc5d0 JPA \uc124\uc815 \ud30c\uc77c\uc778 persistence.xml \ud30c\uc77c\uae4c\uc9c0 \ub9cc\ub4e4\uace0 \uae30\ubcf8 \uc124\uc815\uc744 \ucd94\uac00\ud558\ub824\uba74 \uc5ed\uc2dc \ub610 \uc801\uc9c0 \uc54a\uc740 \uc2dc\uac04\uc744 \uc18c\ube44\ud588\uc744 \uac83\uc774\ub2e4. \ud558\uc9c0\ub9cc, \uc9c0\uae08 \uc774 \uc791\uc5c5\uc774 \ub2e8 \uba87 \ucd08 \uc774\ub0b4\ub85c \uc644\ub8cc\ub410\ub2e4. \ubc14\ub85c \uc774\uac83\uc774 Spring Roo\uac00 \uc81c\uacf5\ud558\ub294 \ube60\ub978 \uac1c\ubc1c\uc758 \ubb18\ubbf8 \uc911 \ud558\ub098\ub2e4.<\/p>\n<p>applicationContext.xml\uc5d0\ub294 DataSource, TrasactionManager, tx:annotation-driven, EntityManagerFactory \ube48\uc774 \ub4f1\ub85d\ub410\uace0, persistence.xml\uc5d0\ub294 JPA \uad6c\ud604\uccb4\uc778 Hibernate \uc124\uc815\uc774 \ucd94\uac00\ub410\ub2e4. \uc774 \uc911\uc5d0\uc11c\ub3c4 DataSource \uc124\uc815\uc740 \ucc98\uc74c, \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud588\uc744 \ub54c \ub4f1\ub85d\ub41c context:property-placeholder\ub97c \uc0ac\uc6a9\ud574\uc11c \ud504\ub85c\ud37c\ud2f0 \ud30c\uc77c\ub85c \ube48 \uc124\uc815 \uac12\uc744 \uc678\ubd80\ub85c \ube7c\ub450\uc5c8\uae30 \ub54c\ubb38\uc5d0, \ub098\uc911\uc5d0 DB\ub97c \ub2e4\ub978 \uac83\uc73c\ub85c \uad50\uccb4\ud558\uace0 \uc2f6\uc744 \ub54c\ub294 database.properties \ud30c\uc77c\uc758 \ub0b4\uc6a9\uc744 \uc0ac\uc6a9\ud558\ub824\ub294 DB\uc5d0 \ub9de\ub294 \uc124\uc815\uc73c\ub85c \uc218\uc815\ud558\uba74 \ub41c\ub2e4.<\/p>\n<p>\uc5d4\ud2f0\ud2f0 \ucd94\uac00<\/p>\n<p>\uc5d4\ud2f0\ud2f0\ub97c \ub9cc\ub4e4 \ub54c\ub294 \uc55e\uc5d0\uc11c \ub9d0\ud588\ub358, \ub450 \uac00\uc9c0 \uc544\ud0a4\ud14d\ucc98 \uc911\uc5d0 \ud558\ub098\ub97c \uc120\ud0dd\ud560 \uc218 \uc788\ub2e4. \uc5ec\uae30\uc11c\ub294 \uc790\ubc14 \uc9c4\uc601\uc5d0\uc11c \uc790\uc8fc \uc0ac\uc6a9\ud558\uace0 \uc788\ub294 \ud615\ud0dc\uc778 \uacc4\uce35\ud615 \uc544\ud0a4\ud14d\ucc98\ub85c \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\ub2e4. \uc785\ub825\ucc3d\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 \uc785\ub825\ud558\uc790.<\/p>\n<p>entity ?class ~.domain.Book ?activeRecord false<\/p>\n<p>ent\uae4c\uc9c0 \uc785\ub825\ud55c \ub2e4\uc74c, Ctrl+Space\ub97c \uc785\ub825\ud558\uba74, entity\ub77c\ub294 \ud0a4\uc6cc\ub4dc\uac00 \uc644\uc131\ub418\uace0 \uadf8 \ub4a4\uc5d0 Ctrl+Space\ub97c \ub610 \uc785\ub825\ud558\uba74, ?class\uac00 \uc790\ub3d9 \uc644\uc131 \ub41c\ub2e4. \uadf8 \ub2e4\uc74c, ~.domain.Book\uc740 \uc9c1\uc811 \uc785\ub825\ud574\uc57c \ud558\ub294\ub370, \uc5ec\uae30\uc11c ~\uc758 \uc758\ubbf8\ub294 Spring Roo \ud504\ub85c\uc81d\ud2b8\ub97c \ub9cc\ub4e4 \ub54c \uc124\uc815\ud55c \uae30\ubcf8 \ud328\ud0a4\uc9c0\ub97c \ub098\ud0c0\ub0b8\ub2e4. \uc5ec\uae30\uae4c\uc9c0 \uc785\ub825\ud558\uace0 \uba85\ub839\uc744 \uc2e4\ud589\ud558\uba74 Active Record \ud328\ud134\uc73c\ub85c \uc0dd\uc131\ub418\ub294\ub370, \uc5ec\uae30\uc11c\ub294 \uacc4\uce35\ud615 \uad6c\uc870\ub85c \ub9cc\ub4e4\uace0 \uc2f6\uae30 \ub54c\ubb38\uc5d0 ?\ub97c \uc785\ub825\ud558\uace0 \ub2e4\uc2dc Ctrl+Space\ub97c \uc785\ub825\ud558\uba74 \ubd80\uac00\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc635\uc158 \ubaa9\ub85d\uc774 \ucd9c\ub825\ub418\uace0, \uadf8 \uc911\uc5d0\uc11c activeRecord \uc635\uc158\uc744 \uc120\ud0dd\ud560 \uc218 \uc788\ub2e4. \uadf8\ub9ac\uace0 \ub2e4\uc2dc Ctrl+Space\ub97c \uc785\ub825\ud558\uba74 \ub2e4\uc2dc activeRecord \uc635\uc165\uc758 \uac12\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ubaa9\ub85d\uc774 \ucd9c\ub825\ub418\ub294\ub370, \uadf8 \uc911\uc5d0\uc11c false\ub97c \uc120\ud0dd\ud588\ub2e4.<\/p>\n<p>Book\uc774\ub77c\ub294 \ub3c4\uba54\uc778 \ud074\ub798\uc2a4\uac00 \uc0dd\uae30\uace0, AspectJ \ud30c\uc77c\uc774 \ub450\uac1c \uc0dd\uc131\ub410\ub2e4. \uc0dd\uc131\ub41c \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uc790.<\/p>\n<p>package whiteship.domain;<\/p>\n<p>import org.springframework.roo.addon.entity.RooJpaEntity;<\/p>\n<p>import org.springframework.roo.addon.javabean.RooJavaBean;<\/p>\n<p>import org.springframework.roo.addon.tostring.RooToString;<\/p>\n<p>@RooJavaBean<\/p>\n<p>@RooToString<\/p>\n<p>@RooJpaEntity<\/p>\n<p>public class Book {<\/p>\n<p>}<\/p>\n<p>\uc560\ub178\ud14c\uc774\uc158\uc774 \uc138\uac1c \ubd99\uc5b4\uc788\ub294 \ud145 \ube44\uc5b4\uc788\ub294 \ud074\ub798\uc2a4\ub85c \ubcf4\uc778\ub2e4. \ud558\uc9c0\ub9cc, \uc774\ubbf8 \uc774 \ud074\ub798\uc2a4\uc5d0\ub294 toString()\uacfc getter\/setter\uac00 \uc790\ub3d9 \uc0dd\uc131\ub420 \uc900\ube44\uac00 \ub418\uc5b4\uc788\ub2e4. @RooJavaBean\uacfc @RooToString\uc774 \uadf8 \uc5ed\ud560\uc744 \ud574\uc900\ub2e4. @RooJpaEntity\ub294 JPA \uc5d4\ud2f0\ud2f0\uc5d0 \ud544\uc694\ud55c id\uc640 version \uba64\ubc84 \ubcc0\uc218 \ub4f1\uc744 \ucd94\uac00\ud574\uc900\ub2e4. \ub530\ub77c\uc11c, Book \ud074\ub798\uc2a4 \uc548\uc5d0 main \uba54\uc11c\ub4dc\ub97c \ub9cc\ub4e4\uace0 book \uac1d\uccb4\ub97c \ub9cc\ub4e0 \ub2e4\uc74c\uc5d0 setId\/getId\uc640 setVersion\/getVersion \uba54\uc11c\ub4dc\ub97c \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>@RooJavaBean<\/p>\n<p>@RooToString<\/p>\n<p>@RooJpaEntity<\/p>\n<p>public class Book {<\/p>\n<p>public static void main(String[] args) {<\/p>\n<p>Book book = new Book();<\/p>\n<p>book.setId(1l);<\/p>\n<p>book.getVersion();<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>\uc5b4\ub5bb\uac8c \ub41c \uac83\uc778\uc9c0 \uad81\uae08\ud560 \uac83\uc774\ub2e4. \uc774\uc5d0 \ub300\ud55c \uc124\uba85\uc740 \ub4a4\ub85c \ubbf8\ub8e8\uace0 \uc6b0\uc120, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc644\uc131\ud574\ubcf4\uc790.<\/p>\n<p>\ud544\ub4dc \ucd94\uac00<\/p>\n<p>main \uba54\uc11c\ub4dc\ub294 \ud14c\uc2a4\ud2b8 \uc6a9\ub3c4\uc600\uc73c\ub2c8, \ucf54\ub4dc\ub97c \uc0ad\uc81c\ud558\uace0 \uc774\uc81c \ud544\ub4dc\ub97c \ucd94\uac00\ud574\ubcf4\uc790. Roo Shell\uc5d0 \ub2e4\uc74c\uacfc \uac19\uc774 \uc785\ub825\ud55c\ub2e4.<\/p>\n<p>field string ?fieldName name ?class whiteship.domain.Book<\/p>\n<p>\uadf8\ub7fc Book \ud074\ub798\uc2a4 \ucf54\ub4dc\uac00 \ub2e4\uc74c\uacfc \uac19\uc774 \ubc14\ub010\ub2e4.<\/p>\n<p>@RooJavaBean<\/p>\n<p>@RooToString<\/p>\n<p>@RooJpaEntity<\/p>\n<p>public class Book {<\/p>\n<p>private String name;<\/p>\n<p>}<\/p>\n<p>\ubb3c\ub860, \uc774 \uc815\ub3c4\ub294 \uad73\uc774 Roo Shell\uc744 \uac70\uce58\uc9c0 \uc54a\uace0, \uc9c1\uc811 \ucf54\ub529\uc744 \ud574\ub3c4 \ubb34\uad00\ud558\ub2e4. \ub300\uc2e0, \uc774\ub7f0 \uae30\ub2a5\uc744 \uc5b4\ub5bb\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\ub294\uc9c0 \uc54c\ub824\uc8fc\uace0 \uc2f6\uae30 \ub54c\ubb38\uc5d0 \ubcf4\uc5ec\uc900 \uac83\uc774\ub2e4. \uc9c0\uae08\uae4c\uc9c0 Roo Shell\uc5d0\uc11c \uc0ac\uc6a9\ud55c \uba85\ub839\uc5b4\ub97c \ubaa8\uc544\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<p>jpa setup ?provider HIBERNATE ?database HYPERSONIC_IN_MEMORY<\/p>\n<p>entity ?class ~.domain.Book ?activeRecord false<\/p>\n<p>field string ?fieldName name ?class whiteship.domain.Book<\/p>\n<p>\uc774 \uba85\ub839\uc5b4\ub97c \ubaa8\uc544\uc11c \uc2a4\ud06c\ub9bd\ud2b8 \ud30c\uc77c\ub85c \uc7ac\uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. \uc774\ub807\uac8c Roo \uba85\ub839\uc5b4\ub97c \ubaa8\uc544\uc11c \uc2a4\ud06c\ub9bd\ud2b8 \ud30c\uc77c\uc744 \ub9cc\ub4e4\uc5b4\uc11c sample.roo\uc640 \uac19\uc740 \ud615\uc2dd\uc73c\ub85c \uc800\uc7a5\ud55c \ub4a4\uc5d0, Roo Shell\uc5d0\uc11c \u201cscript ?file \ud30c\uc77c\uba85\u201d \uba85\ub839\uc744 \uc0ac\uc6a9\ud574\uc11c \ud574\ub2f9 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc2e4\ud589\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>Repository \uc0dd\uc131<\/p>\n<p>\uacc4\uc18d\ud574\uc11c Repository\ub97c \ub9cc\ub4e4\uc5b4\ubcf4\uc790. Roo Shell\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud55c\ub2e4. \uc785\ub825\ud560 \ub54c\ub294 \uc218\uc2dc\ub85c Ctrl+Space\ub97c \ub20c\ub7ec\uac00\uba70 \uc790\ub3d9\uc644\uc131\uacfc \ud78c\ud2b8\ub97c \ud65c\uc6a9\ud558\uae30 \ubc14\ub780\ub2e4. ?entity\uc640 \uac19\uc740 \uc635\uc158\uc774 \ubcf4\uc774\uc9c0 \uc54a\uc744 \ub54c\ub294 ?\ub97c \uc785\ub825\ud55c \uc0c1\ud0dc\uc5d0\uc11c \ub2e4\uc2dc Ctrl+Space\ub97c \uc785\ub825\ud558\uba74 \ubd80\uac00\uc801\uc778 \uc635\uc158\uc744 \ubcf4\uc5ec\uc900\ub2e4.<\/p>\n<p>repository jpa ?interface ~.modules.book.BookRepository ?entity ~.domain.Book<\/p>\n<p>@RooRepositoryJpa(domainType = Book.class)<\/p>\n<p>public interface BookRepository {<\/p>\n<p>}<\/p>\n<p>\uc774 \uc21c\uac04 \uc774\ubbf8 \uae30\ubcf8\uc801\uc778 CRUD\uc640 \uac80\uc0c9\uc6a9 Data Access Operation\uc774 \uad6c\ud604\ub410\ub2e4. \uac70\uc758 \ud56d\uc0c1 \uad6c\ud604\ud558\uac8c \ub418\ub294 \uadf8\ub7f0 \uae30\ub2a5\uc744 Spring Data JPA\ub97c \uc774\uc6a9\ud574\uc11c \uad6c\ud604\ud574\uc900\ub2e4.<\/p>\n<p>\uc11c\ube44\uc2a4 \uad6c\ud604<\/p>\n<p>\uc774\uc81c \uc11c\ube44\uc2a4\ub97c \ub9cc\ub4e4\uc790. Roo Shell\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc744 \uc2e4\ud589\ud55c\ub2e4.<\/p>\n<p>service ?interface ~.modules.book.BookService ?entity ~.domain.Book<\/p>\n<p>\uc774\uc81c\ub294 Roo \uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud558\ub294\ub370 \uc775\uc219\ud574\uc84c\uc744 \uac83\uc774\ub2e4. \uacb0\uacfc \ucf54\ub4dc\ub3c4 \uc5b4\ub290\uc815\ub3c4 \uc608\uc0c1\ud560 \uc218 \uc788\uc744 \uac83\uc774\ub2e4. \uc5ed\uc2dc\ub098 \ucf54\ub4dc\uac00 \ubcc4\ub85c \uc5c6\ub2e4.<\/p>\n<p>@RooService(domainTypes = { whiteship.domain.Book.class })<\/p>\n<p>public interface BookService {<\/p>\n<p>}<\/p>\n<p>public class BookServiceImpl implements BookService {<\/p>\n<p>}<\/p>\n<p>\uc774\uac83\uc73c\ub85c \uc5d4\ud2f0\ud2f0, Repository, Service \uad6c\ud604\uc774 \ub05d\ub0ac\ub2e4.<\/p>\n<p>\ucee8\ud2b8\ub864\ub7ec \uad6c\ud604<\/p>\n<p>Roo\uc758 \uc6f9 \ub2e8\uc740 \ud604\uc7ac \uc138 \uac00\uc9c0 \uae30\uc220\ub85c \uad6c\ud604\ud560 \uc218 \uc788\ub2e4. GWT, Spring Web Flow, Spring MVC \uc774 \uc14b\uc73c\ub85c \ucf54\ub4dc\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\ub294\ub370, \uc5ec\uae30\uc11c\ub294 Spring MVC \ucf54\ub4dc\ub97c \uc0dd\uc131\ud558\uaca0\ub2e4. Roo Shell\uc5d0\uc11c \ub2e4\uc74c \uba85\ub839\uc744 \uc2e4\ud589\ud558\uc790.<\/p>\n<p>web mvc setup<\/p>\n<p>\uc774\ub807\uac8c \ud558\uba74 Spring MVC\uc5d0 \ud544\uc694\ud55c \uc758\uc874\uc131\uc744 \ucd94\uac00\ud558\uace0, \uc2a4\ud504\ub9c1 \uc6f9 \uc124\uc815\uc744 \ucd94\uac00\ud558\uace0, \uae30\ubcf8\uc801\uc778 \ubdf0\uc5d0 \ud544\uc694\ud55c \uac01\uc885 \ub9ac\uc18c\uc2a4\ub97c \uc0dd\uc131\ud574 \uc900\ub2e4. \uc774\ub54c \uc0c1\ub2f9\ud788 \uc5ec\ub7ec \uae30\ub2a5\uc774 \ucd94\uac00\ub418\ub294\ub370, webmvc-config.xml\uc744 \ubcf4\uba74 \uc5b4\ub5a4 \uae30\ub2a5\uc774 \ucd94\uac00\ub410\ub294\uc9c0 \uc54c \uc218 \uc788\ub2e4. \uc774\uc81c \ucee8\ud2b8\ub864\ub7ec \ucf54\ub4dc\ub97c \uc0dd\uc131\ud574\ubcf4\uc790. Roo Shell\uc5d0 \ub2e4\uc74c \uba85\ub839\uc744 \uc2e4\ud589\ud558\uc790. \uba85\ub839\ud589\uc774 \uae38\uc9c0\ub9cc Ctrl+Space\ub97c \uc798 \ud65c\uc6a9\ud55c\ub2e4\uba74, \ubcc4\ub2e4\ub978 \uc5b4\ub824\uc6c0 \uc5c6\uc774 \uc785\ub825\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>web mvc scaffold ?class ~.modules.book.BookController ?backingType ~.domain.Book ?path \/book<\/p>\n<p>\uc774 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uba74 \uc774\uc81c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\ud560 \uc900\ube44\uac00 \ub05d\ub09c\ub2e4.<\/p>\n<p>\uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc2e4\ud589<\/p>\n<p>STS\uc5d0\uc11c \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc2e4\ud589\ud558\ub294 \ubc29\ubc95\uc740 \uc5ec\ub7ec\uac00\uc9c0\uac00 \uc788\ub2e4. Servers \ubdf0\ub97c \uc774\uc6a9\ud558\ub294 \ubc29\ubc95\ub3c4 \uc788\uc9c0\ub9cc, \uc5ec\uae30\uae4c\uc9c0 \uc9c4\ud589\ud588\ub2e4\uba74 pom.xml\uc5d0, tomcat\uacfc jetty \ud50c\ub7ec\uadf8\uc778\uc774 \uc124\uc815\ub418\uc5b4 \uc788\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc744 \uac83\uc774\ub2e4. Jetty \uba54\uc774\ube10 \ud50c\ub7ec\uadf8\uc778\uc744 \uc0ac\uc6a9\ud574\uc11c \uc2e4\ud589\ud574\ubcf4\uaca0\ub2e4. \ud504\ub85c\uc81d\ud2b8 \uc6b0\ud074\ub9ad -&gt; Run As -&gt; Maven Build\ub97c \ud074\ub9ad\ud558\uace0 Goal\uc744 \uc785\ub825\ud558\ub294 \uacf3\uc5d0 jetty:run\uc744 \uc785\ub825\ud558\uace0 Run\uc744 \ud074\ub9ad\ud558\uc790.<\/p>\n<p>\uc11c\ubc84\uac00 \uc2dc\uc791\ub418\uba74, \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c http:\/\/localhost:8080\ub9cc \uc785\ub825\ud558\uace0 \ub4e4\uc5b4\uac00\uba74 404 \uc5d0\ub7ec \ud398\uc774\uc9c0\uac00 \ub728\uba74\uc11c, roo_sample \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ub9c1\ud06c\ub97c \uc81c\uacf5\ud574 \uc900\ub2e4. \ubb3c\ub860, \ud0c0\uc774\ud551\uc744 \uc88b\uc544\ud55c\ub2e4\uba74 \uc9c1\uc811 \u201chttp:\/\/localhost:8080\/\ud504\ub85c\uc81d\ud2b8_\uc774\ub984\u201d\uc744 \uc804\ubd80 \uc785\ub825\ud574\ub3c4 \uc0c1\uad00\uc5c6\ub2e4.<\/p>\n<p>\uc774 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uae30\ubcf8\uc801\uc778 CRUD \uae30\ub2a5\uc744 \ud655\uc778\ud574\ubcf4\uc790. \uc798 \ub3d9\uc791\ud558\ub77c \uac83\uc774\ub2e4.<\/p>\n<p>\ubaa8\ub4e0 \ub9c8\uc220\uc740 ITD, Mixin<\/p>\n<p>\uc9c0\uae08\uae4c\uc9c0 \uc0dd\uc131\ud55c \uc790\ubc14 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<p>\uc774 \uba87 \uac1c \uc548 \ub418\ub294 \ud30c\uc77c\uc5d0\ub294 \uc9c0\uae08\uae4c\uc9c0 \uc0b4\ud3b4\ubd24\ub4ef\uc774, \ucf54\ub4dc\uc870\ucc28 \uba87 \uc904 \ub418\uc9c0 \uc54a\ub294\ub2e4. \uc544\ub2c8 \ucf54\ub4dc\uac00 \uac70\uc758 \uc5c6\ub2e4\uace0 \ubd10\ub3c4 \ubb34\ubc29\ud558\ub2e4. \uc560\ub178\ud14c\uc774\uc158\ub9cc \uba87 \uac1c \ubd99\uc5b4\uc788\uc744 \ubfd0\uc778\ub370, \uc5b4\ub5bb\uac8c \uc774\ub7f0 \uae30\ubcf8\uc801\uc778 CRUD \uae30\ub2a5\uc774 \ub3d9\uc791\ud558\ub294 \uac83\uc77c\uae4c? \uc0ac\uc2e4, \uc774\ub7f0 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ub9cc\ub4e4\uc5b4 \ubcf8\uc801\uc774 \uc788\ub2e4\uba74 \uc774\ub7f0 \uae30\ub2a5\uc774 \uadf8\ub807\uac8c \uc5b4\ub824\uc6b4 \uac83\uc740 \uc544\ub2c8\ub77c\ub294 \uac83\uc744 \uc54c \uac83\uc774\ub2e4. \uc5b4\ub835\uc9c0\ub294 \uc54a\uc9c0\ub9cc \uc218\uace0\ub86d\ub2e4. \uc2e4\uc81c\ub85c, \ub098\ub3c4 GenericDao, GenericService, GenericController \ub4f1\uc744 \uc0ac\uc6a9\ud574\uc11c \ud074\ub798\uc2a4\uc640 \uc778\ud130\ud398\uc774\uc2a4\ub9cc \uc120\uc5b8\ud558\uba74 \uae30\ubcf8\uc801\uc778 CRUD \uae30\ub2a5\uc744 \uc81c\uacf5\ud574\uc8fc\ub294 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ub9cc\ub4e4\uc5b4\ubcf8 \uc801\uc774 \uc788\ub2e4. \ud558\uc9c0\ub9cc \ud56d\uc0c1 \uc544\uc26c\uc6c0\uc774 \ub0a8\uc558\ub294\ub370, \ubc14\ub85c \uc9c0\ub098\uce5c \u201c\uc0c1\uc18d\u201d \ub54c\ubb38\uc774\uc5c8\ub2e4. \ubaa8\ub4e0 \ubaa8\ub4c8\uc758 \ucee8\ud2b8\ub864\ub7ec, \uc11c\ube44\uc2a4, DAO \ucf54\ub4dc\uc5d0\uc11c \ud504\ub808\uc784\uc6cc\ud06c\uac00 \uc81c\uacf5\ud558\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc640 \ud074\ub798\uc2a4\ub97c \uc0c1\uc18d\ubc1b\uc544\uc57c \ud574\ub2e4. \uc0c1\uc18d\uc744 \ubc1b\uc544\uc57c\ub9cc \ud558\ub2c8\uae4c \ucee8\ud2b8\ub864\ub7ec, \uc11c\ube44\uc2a4, DAO\uac00 POJO \ud074\ub798\uc2a4\uac00 \uc544\ub2c8\uac8c \ub418 \ubc84\ub9ac\uace0, Generic\uc744 \uc794\ub729 \uc0ac\uc6a9\ud55c \ud074\ub798\uc2a4 \uc120\uc5b8\ubd80\ub97c \ubcf4\uace0 \uc788\uc790\uba74.. \ucc38 \uc501\uc4f8\ud558\ub2e4. \ud558\uc9c0\ub9cc Spring Roo\ub294 \uc774 \ubb38\uc81c\ub97c \uc544\uc8fc \uae54\ub054\ud558\uac8c \ud574\uacb0\ud588\ub2e4.<\/p>\n<p>AspectJ\uc5d0 Inter-Type Declaration(ITD) \ub610\ub294 Mixin\uc774\ub77c \ubd80\ub974\ub294 \uae30\ub2a5\uc774 \uc788\ub2e4. \uc774 \uae30\ub2a5\uc740 AspectJ\uc5d0\ub9cc \uc788\ub294 \uac1c\ub150\uc774 \uc544\ub2c8\ub77c, \ub2e4\uc774\ub098\ubbf9 \uc5b8\uc5b4\uc5d0\uc11c \ud754\ud788 \uc0ac\uc6a9\ud558\ub294 \uac1c\ub150\uc774\ub77c\uace0 \ud55c\ub2e4. \uc790\ubc14\uc5d0\uc11c\ub294 \ubcf4\ud1b5 \ub2e8\uc77c \uc0c1\uc18d\ub9cc \uc9c0\uc6d0\ud558\uae30 \ub54c\ubb38\uc5d0, \uc5b4\ub5a4 \uacf5\ud1b5 \uae30\ub2a5 \uc5ec\ub7ec \uac1c\ub97c \uc0c1\uc18d\ubc1b\uc744 \uc218 \uc5c6\uc9c0\ub9cc, Mixin\uc740 \uadf8\uc640 \ubc18\ub300\ub85c \uc5ec\ub7ec \uac1d\uccb4\uc5d0\uc11c \uacf5\ud1b5\uc801\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uae30\ub2a5\uc744 \ub9cc\ub4e4\uc5b4 \ub450\uace0, \uadf8\uac83\uc744 \uc5ec\ub7ec \uac1d\uccb4\uc5d0 \uc8fc\uc785\ud558\uc5ec \uae30\ub2a5\uc744 \ucd94\uac00\ud558\ub294 \ubc29\ubc95\uc774\ub2e4. Spring Roo\ub294 \ubc14\ub85c \uc774\ub7ec\ud55c ITD\ub97c \uc0ac\uc6a9\ud55c\ub2e4. ITD\ub97c \uc0ac\uc6a9\ud568\uc73c\ub85c\uc368, \uc0c1\uc18d\uc740 \ub354 \uc774\uc0c1 \ud544\uc694\uc5c6\ub514. \uadf8\ub9ac\uace0 \uc0ac\uc6a9\uc790\uac00 \uc791\uc131\ud55c \ucf54\ub4dc\uc640 Spring Roo\uac00 \uc81c\uacf5\ud558\ub294 \ucf54\ub4dc\ub97c \uc644\ubcbd\ud558\uac8c \ubd84\ub9ac\ud568\uc73c\ub85c\uc368, Spring Roo\ub85c \ucf54\ub4dc\ub97c \uc0dd\uc131\ud55c \ub4a4\uc5d0 \uc0ac\uc6a9\uc790\uac00 \ucf54\ub4dc\ub97c \ubcc0\uacbd\ud574\ub3c4 \uacc4\uc18d\ud574\uc11c Spring Roo\ub85c \ucf54\ub4dc \uc0dd\uc131 \uae30\ub2a5\uc744 \ud65c\uc6a9\ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c \uc0dd\uc131\ud574\uc57c \ud558\ub294 \ucf54\ub4dc\ub294 Spring Roo\uc758 ITD\ub85c \uc228\uae30\uace0, \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1 \uad00\ub828 \ucf54\ub4dc\ub9cc \ub0a8\uae38 \uc218 \uc788\ub2e4.<\/p>\n<p>ITD\ub85c \ucd94\uac00\ub418\ub294 \ucf54\ub4dc\uac00 \ubb34\uc5c7\uc778\uc9c0 \uad81\uae08\ud558\ub2e4\uba74, Cross References \ubdf0\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>\uc774\uac83\uc740 \ud3b8\uc9d1\uae30\uc5d0\uc11c BookController \ud074\ub798\uc2a4\ub97c \uc5f4\uc5c8\uc744 \ub54c Cross References \ud654\uba74\uc774\ub2e4.<\/p>\n<p>\uc774 \ucf54\ub4dc\uac00 \uc5b4\ub5a4 AspectJ \ud30c\uc77c\ub85c \ucd94\uac00\ub410\ub294\uc9c0\ub3c4 \uad81\uae08\ud560 \uc218 \uc788\ub2e4. AspectJ \ud30c\uc77c\ub3c4 Spring Roo\uac00 \uc0dd\uc131\ud574 \uc8fc\ub294\ub370, \uadf8 \ucf54\ub4dc\ub294 \uae30\ubcf8\uc801\uc73c\ub85c \uc228\uaca8\uc8fc\uace0 \uc788\ub2e4. \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1 \uad00\ub828 \ucf54\ub4dc\uc5d0\ub9cc \uc9d1\uc911\ud558\ub3c4\ub85d \ubc30\ub824\ud574\uc900 \uac83\uc778\ub370, \ud544\uc694\ud558\ub2e4\uba74 \ud574\ub2f9 \ucf54\ub4dc\ub97c \uc218\uc815\ud574\uc11c \uae30\ubcf8 CRUD \uae30\ub2a5\uc744 \uc218\uc815\ud560 \uc218\ub3c4 \uc788\uaca0\ub2e4. AsepctJ \ud30c\uc77c\uc744 \ucc3e\ub294 \ubc29\ubc95\uc740 \uac04\ub2e8\ud558\ub2e4. Package Explorer \uc6b0\uce21 \uc0c1\ub2e8\uc5d0 \uc5ed \uc0bc\uac01\ud615 \ubaa8\uc591\uc758 \uba54\ub274\ub97c \ud074\ub9ad\ud558\uace0 Filters\ub97c \ud074\ub9ad\ud558\uc790.<\/p>\n<p>\uc5ec\uae30 \ubcf4\uc774\ub294 Hide gerenated Spring Roo ITDs\uc5d0 \uae30\ubcf8\uc801\uc73c\ub85c \uccb4\ud06c\uac00 \ub418\uc5b4\uc788\ub294\ub370, \uc774\uac83\uc744 \ud574\uc81c\ud558\uace0 OK\ub97c \ud074\ub9ad\ud558\uba74 AspectJ \ud30c\uc77c\uc744 Package Explorer\uc5d0\uc11c \ubcf4\uc5ec\uc900\ub2e4.<\/p>\n<p>\uc774\uac83\uc73c\ub85c Spring Roo \uc18c\uac1c\ub97c \ub9c8\uce58\uaca0\ub2e4.<\/p>\n<p>\ucc38\uace0<\/p>\n<p>http:\/\/toby.epril.com\/?p=761<br \/>\nhttp:\/\/toby.epril.com\/?p=762<br \/>\nhttp:\/\/toby.epril.com\/?p=764<br \/>\nhttp:\/\/toby.epril.com\/?p=765<br \/>\nhttp:\/\/www.springsource.org\/spring-roo<br \/>\nhttp:\/\/blog.springsource.com\/2011\/09\/14\/new-application-layering-and-persistence-choices-in-spring-roo\/<br \/>\nThis entry was posted in etc and tagged Spring Roo by \uae30\uc120. Bookmark the permalink.<\/p>\n<p>\ucd9c\ucc98 : http:\/\/whiteship.me\/?p=13330<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc790\ubc14 \uac1c\ubc1c\uc790\ub97c \uc704\ud55c \uc2e0\uc18d\ud55c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c \ud234 Spring Roo Spring Roo\ub294 \ubb34\uc5c7\uc778\uac00? \uc6b0\uc120, \uc27d\uac8c \uc624\ud574 \ud560 \uc218 \uc788\ub294 \ubd80\ubd84\ubd80\ud130 \uc5b8\uae09\ud558\ub294 \uac83\uc774 \uc88b\uaca0\ub2e4. \u201cSpring Roo\u201d\ub294 \ud504\ub808\uc784\uc6cc\ud06c\uac00 \uc544\ub2c8\ub77c \uac1c\ubc1c \ud234\uc774\ub2e4. \uc77c\uc885\uc758 \ucf54\ub4dc&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts\/878"}],"collection":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=878"}],"version-history":[{"count":0,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts\/878\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}