Spring Roo 와함께하는 쾌속웹개발 정상혁, KSUG (www.ksug.org)
목차 1. Tool 2. Demo 3. Application
1. Tool 1.1 개요 1.2 Command line shell 1.3 Round-trip 1.4 익숙한도우미들
1.1 개요 Text Based RAD Tool for Java Real Object Oriented의첫글자들 Spring, Maven, JUnit 등바탕의코드자동생성 Round-trip 지원 No Lock in, No runtime dependency Roo를위한인터페이스, 슈퍼클래스없음 Roo의특성을제거하기쉬움 4
1.2 Command Line Shell 똑똑한 Shell 제공 Tab completion Hint, Help Context-aware, Command hiding Script 기록, 실행 명령수행이 Transactional 작업수행중이상하면 undo Backup 5
1.3 Round Trip 양방향코드자동생성 도구와사람이걲드리는파일분리 사람은 *.java, *.xml만싞경쓰면됨 File system monitoring Shell 이떠있는동안에자동감지.java,.xml 파일의변화를.aj에반영 UI 자동생성여부는옵션 6
1.4 익숙한도우미들 Java홖경의지원도구들 Maven Library 관리. Build lifecycle AspectJ 컴파일 JUnit Selenium Eclipse Spring Tools Suite M2Eclipse AJDT (Aspect J 지원 Plug-in) 7
2. Demo 2.1 Demo 진행 2.2 소스분석
2.1 Demo 진행작업내용 프로젝트생성 Entity 추가 Controller 추가 Selenium 테스트추가 테스트코드실행 Tomcat에서실행 Selenium 테스트실행 9
2.1 Demo 진행작업내용 Roundtrip 확인 Getter 추가, field 삭제 Script 저장, Script 실행 Backup Roo 제거 10
2.1 Demo 진행 화면 11
2.2 소스분석 생성결과 모든소스는생략된것이아니고, 기능을다하는클래스 Entity class 소스에는 getter/setter 가없지만 Mixin 으로생성됨 @Entity @RooEntity @RooJavaBean @RooToString public class Guest { @Size(max = 30) private String name; private Integer price; private Boolean speical; } 12
2.2 소스분석생성결과 Controller class REST의 CoC @RooWebScaffold(automaticallyMaintainView = true, formbackingobject = Guest.class) @RequestMapping("/guest/**") @Controller public class GuestController { } 13
2.2 소스분석생성결과 Test class Assert 로직도 Mixin으로삽입됨 @RooIntegrationTest(entity = Guest.class) public class GuestIntegrationTest { @Test public void testmarkermethod() { } } 14
3. Application 3.1 구성기술와구조 3.2 Spring 3.0 3.3 AOP 3.4 ORM 3.5 확장 15
3.1 구성기술과구조 Full Stack, CoC 모든 Layer 기술을다제공 Seam, Ruby on Rails처럼강한주장이있는프레임웍 Convention Over Configuration Best practice를 Convention으로심음 16
3.1 구성기술과구조단순 2단구조 Entity + Controller Java 파일단 2개 Active Record 패턴적용 DAO(Data Access Object) 와의이별 Aspect로관심사의분리 Static 메소드테스트기능제공 17
3.1 구성기술과구조 Active Record Pattern Domain object 에 Data access logic 이들어감 Guest guest = Guest.findByName( 박성철 "); guest.setspecial(true); guest.update(); Guest name special update findbyname. 18
3.2 Spring 3.0 Spring 3.0 기능홗용 REST convention support http://shopping.com/shop/product/ http://shopping.com/shop/product/1 http://shopping.com/shop/product/1/form Beans Valididation (JSR 303) public class Employee{ @NotNull @Size(min=1, max=25) private String name; @NotNull @NumberFormat(style=Style.CURRENCY) private BigDecimal income = new BigDecimal("1000"); 19
3.2 Spring 3.0 Spring 3.0 기능홗용 MVC custom name space <mvc:view-controller path="/login"/> <mvc:interceptors> <bean class= ThemeChangeInterceptor"/> </mvc:interceptors> 20
3.3 AOP Bytecode weaving 적극홗용 Roo의자동생성부분을담당 Aspect J의 Inter-type Declaration을이용한 Mixin Abstract subclassing, static crosscutting Compile time에서코드삽입 성능손해가없음 Maven plugin과 IDE의도움으로별도컴파일필요없음 @Configurable을이용한투명한 DI 기술 new로생성되는객체에도 DI 적용가능 21
3.3 AOP Bytecode weaving 적극홗용 Inter-type Declaration 으로해결한코드들 @Configurable 선언 Getter, Setter 기본 CRUD기능 Finder 검색용메소드 (findbyname 류 ) Entity의복수형 CoC를위해서 (Guest->Guests) tostring 메소드 22
3.4 ORM ORM에대한걱정들 Object Relational Mapping 성능이안좋다? 예측가능한 SQL로대응용이 캐쉬, 분산홖경적용에유리예 ) Tangosol Coherence Cache 복잡한쿼리는불가능하다? 다양한매핑방식지원 (Lazy loading, Join) 필요하면 Native SQL로호출가능 23
3.4 ORM ORM의확산 다른언어에서도.. PHP(Zend, Codeigniter), Phython(Django), Ruby등의 Java 프레임웍도 생산성 이라는말을위해서는.. JBoss Seam Play framework AribaWeb Spring ROO 24
3.4 ORM ORM 의확산 It job trend 출처 : http://www.indeed.com/jobtrends 25
3.4 ORM Roo의 JPA 지원 Provider 선택가능 Hibernate, OpenJpa, EclipseLink Open EntityManager in View" pattern 지원 OpenEntityManagerInViewFilter View에서 lazy loading 지원 출처 : http://www.indeed.com/jobtrends 26
3.5 확장다양한기술의생성도구로홗용가능 기본제공 Add-on Spring Security, Spring webflow, JMS, SMTP등 Add-on 으로확장가능구조 Custom add-on 개발가능 향후지원예정 Spring Batch, Spring Integration Spring Blaze DS & Flex GWT OSGi bundle 생성가능 27
소감또한번봄의시작이되길.. Dynamic typing 언어짂영의발젂에대한 Java 짂영의대답 Open Class vs AspectJ Mixin 더높은추상화수준으로나아가기 객체지향 Domain Specific Language 실세계언어와유사한표현을목표로 과거의유산포용하기 만드는즐거움 28
참고자료 URL http://forum.springsource.org/showthread.php?t=71985 http://www.ksug.org/101 http://jaoo.dk/aarhus-2009/file?path=/jaoo-aarhus- 2009/slides/RodJohnson_ExtremeJavaProductivityWithSpri ngrooandspring30.pdf 29