SpringOne2GX 2010 참석후기 정상혁
발표자소개정상혁 NHN 생산성혁싞팀, 기술지원업무 블로그 : http://benelog.egloos.com 위키 : http://benelog.springnote.com SNS : http://me2day.net/benelog 2
목차 1. SpringOne 과 Social Service 2. 주요내용 스프링의다음발걸음 3. 분석 스프링을둘러싼전략들
1. SpringOne 과 Social Service 1.1 행사소개 1.2 TripIt 1.3 Twitter 1.4 Spring Social
1.1 행사소개 SpringOne2GX 2010 Spring과 Groovy를주제로여는컨퍼런스 SpringSource 주최 (Divison of VMWare) Java의주요오픈소스개발주도업체 Spring, Aspect J, Groovy-Grails Tomcat, Apache Httpd의핵심 Commiter 5
1.2 TripIt 참석준비중 Tripit 을알게됨 여행정보관리사이트 6
1.2 TripIt 어쩌다보니사용자가됨 셔틀버스예약사이트에서 tripit.com 연결 가입이귀찮았는데, google 계정사용가능 셔틀버스정보가자동입력 항공편번호만입력 메모용으로숙소젂화번호정보를수동입력 7
1.2 TripIt SNS, Mobile FaceBook, Twitter로여행정보 share 가능 Android App 8
1.3 Twitter #s2gx 태그 컨퍼런스공식사이트에서도 Twitter를프레임으로연결 참석자들간의실시간정보공유 9
1.3 Twitter 나도하나올렸더니 @dr_pompeii 라는사용자가나를 follow 올해의 Spring Award Community Champion 수상자 10
1.4 Spring Social Twitter, Tripit 등을지원하는스프링 API Twitter 에서친구목록가지고오기 TwitterTemplate tw = new Twitter List<String> friends = tw.getfriends( sanghyukjung ); TripIt 에서여행목록가지고오기 TripItTemplate ti = new TripItTemplate(... 인증키...); List<Trip> trips = ti.gettrips(); FaceBookTemplate LinkedInTemplate 11
1.4 Spring Social Spring Mobile Android https://jira.springframework.org/browse/android 12
1.4 Spring Social Social Service와 Spring 자연스럽게사용되고있는 Social Service Spring에서한두줄의코드로바로연결 Spring의지원범위확장에대한예 개발자들이할만한반복적인작업이라면 ~Template 클래스 13
재미로만들어본 NaverTemplate 네이버뉴스에서 미역국 검색하기코드 NaverTemplate naver = new NaverTemplate(API_Key); SearchCondition cond = new SearchCondition(); cond.setquery(" 미역국 "); cond.settarget(searchcondition.category.news); cond.setdisplay(10); cond.setstart(1); Channel searched = naver.search(cond); for(item page : searched.getitems()){ System.out.printf(" 제목 : %s \n", page.gettitle()); System.out.printf(" 주소 : %s \n", page.getlink()); System.out.printf(" 설명 : %s \n", page.getdescription()); System.out.println(); } 14
재미로만들어본 NaverTemplate dev.naver.com 에서키이용등록 15
이미 github 에시작하신분도... Spring-social-korea 16
2. 주요내용 - 스프링의다음발걸음 2.1 Keynote 2.2 Spring 3.1 2.3 Spring과 JavaEE6 2.4 분산캐쉬 2.5 NoSQL 2.6 RabbitMQ 2.7 Spring Roo
2.1 Keynote 핵심가치와제휴관계강조 다음 10년을향해 Portability Productivity Innovation 이미지는 http://www.springone2gx.com 에서 18
2.1 Keynote Portability Enterprise의요구사항을여러실행홖경에서 Tomcat, Jetty 상용 WAS Google App Engine Amazon EC2 (+ Tomcat) VMForce (+Tomcat) 19
2.1 Keynote Productivity 개발지원도구 SpringSource Tool Suite (Eclipse plugin) Grails 지원 Spring insight Monitoring 도구 : 욲영홖경용곧제공 Spring Roo 20
2.1 Keynote Innovation Spring Data : NoSql (Not Only SQL) : Neo4j, Redis, MongoDB, Casandra를더편하게쓰는 API Spring AMQP, RabbitMQ : Messaging Queue Gemfire : Data Grid Spring Payment : 지불 API(Visa / Incept5) Spring Social Spring Mobile CodeToCloud : 이슈관리 + 버젂관리 + CI : 21
2.2 Spring 3.1 기존의일관성을지키며최근경향반영 Cache Abstraction Java 바탕의설정강화 Bean 설정 Profile 개념 c: namespace ConversationMangement 22
2.2 Spring 3.1 Cache Abstraction @Cacheable public Owner loadowner(int id) {... } @Cacheable(condition="name.length<10") public Owner loadowner(string name){... } @CacheEvict public void deleteowner(int id){... } 23
2.2 Spring 3.1 Cache Abstraction Spring Transaction과유사한 Semantics <cache:annotation-driven /> CacheManager SPI 제공 디폴트는 ConcurrentHashMap 기본구현체제공 EhCache, GemFire, Coherence, GigaSpace 80% 정도의젂형적인사용시나리오커버예상 24
2.2 Spring 3.1 Bean profile 홖경변수, web.xml 등을통해프로파일지정 <beans... profile="dev"> <bean>...</bean> </beans> @Service @Profile("dev") class UserService{... } 25
2.2 Spring 3.1 c: namespace p: 와동일한개념이 constructor 에도 <bean class="..." c:age="10/> <bean class="..." c:family-ref="myfamily/> 26
2.2 Spring 3.1 JavaConfig 확장 Custom namespace에도 Java config를쓸수있게 <tx:/>, <context:/>, <util:/>... 하위프로젝트들에서설정간편화영향기대 Spring Batch, Spring Security, Spring Integration 27
2.2 Spring 3.1 출시일정 3.1 M1: 2010년 11월말 3.1 M2: 2011년 1월초? 3.1 RC1 : 2011년 2월말? 3.1 GA : 2011년 3월말? 3.2 : 2011년말경 지금까지로젂례로볼때더욱미루어질듯 28
2.3 Spring과 Java EE6 Synergy or Competition? JavaEE6 서버는 Spring의좋은실행홖경이다 Spring을통해더많은선택을할수있다 예 )JavaEE5 server + Hibernate 3.6으로 JPA2.0 쓰기 Tomcat, Jetty 겹치는부분은 5% 도안된다 DI container부분만은스프링에서양보할수없는부분인듯 29
2.4 분산캐쉬 Teracotta BigMemory 홍보데스크, 스폰서세션 No GC Heap 밖의메모리공간사용 NIO의 direct buffer 사용추정 Java의메모리모델을대체하려는것은아니다 EhCache와사용가능 Serialize, Deserialize Memcached를 Local로쓰는것과유사? 30
2.4 분산캐쉬 Gemfire SpringSource가인수한솔류션 JP morgan등 Critical곳의 reference Data Grid Key-value 저장소 Sql Fabric SQL Cache + Persistence Derby 이용 분산연산기능 Map Reduce도가능 31
2.5 No SQL Spring data project 저장소특성별로등의하위모듈 Datastore Key-Value Redis Datastore Document MongoDB, CouchDB Datastore Graph Neo4j Datastore Column(Planned) Cassandra, HBase 32
2.5 No SQL Spring data project 솔류션을주도하는업체와협업으로짂행 Hadoop도예정 33
2.5 No SQL Spring으로 No SQL을사용하는여러가지방법 GORM GORM for Redis GORM for Gemfire Spring ROO Neo4j Addon 상황에따라 Low-level API와 Warpping API를선택적으로 34
2.6 Rabbit MQ Procotol 바탕의메시징큐 JMS(Java Messaging Server) Active MQ, Open MQ API 기반의메시징큐 Protocol 바탕은비java와의 Integration이에장점 Rabbit MQ는 Erlang으로만들어짐 Multicore에유리할가능성 35
2.7 Spring Roo 더많은지원기술 GWT (Google Web Tools kit) GAE (Google App Engine) Solr 를위한인덱싱 Lucene 바탕의검색서버 Database reverse Engineering 향후 Jdbc, ibatis 지원 36
2.7 Spring Roo Grails 급으로격상시키려의도가보임 API 샘플코드의젂파경로도될수있음 37
3. 분석 스프링을둘러싼전략들 3.1 지난 10년 3.2 오픈소스프레임웍그이후는? 3.3 기술환경변화 3.4 스프링과 PaaS 클라우드 3.5 기술유통창구 38
3.1 지난 10 년 공존 (co-located) 아키텍처 이미지출처 : 월간마이크로소프트웨어 2005 년 5 월,EJB 없는 J2EE 개발과오픈소스의경쟁력 39
3.1 지난 10년공존 (co-located) 아키텍처 EJB 시젃의통념 Web tier와 Business tier의물리적분리 더 Scalable 하다는주장 이미지출처 : 월간마이크로소프트웨어 2005 년 5 월,EJB 없는 J2EE 개발과오픈소스의경쟁력 40
3.1 지난 10년공존 (co-located) 아키텍처 로드존슨의주장 웹시스템에서는 Web-tier와 Business tier가한 machine에있는것이더효율적이고, 더쉽게확장가능하다 비니지스적필요성이있는부분만원격호출 Proxy를 DI해서인터페이스사용 사용하는쪽에서는원격인지아닌지도싞경쓸필요없음 최근 EJB 3.1 light 사실상 Spring과같은모델인스펙 41
3.1 지난 10년스프링프로그래밍모델 Dependency Injection Singleton, Factory 패턴들과 JNDI lookup의역할을한번에 이미보편적인프로그래밍모델 AOP 핵심로직에침범적이지않은인프라성코드 Portable Service Abstraction 예 ) PlatformTransactionManager 42
3.1 지난 10 년 다른영역에서의 Dependency Injection Eclipse 4.0 public class ContactView implements IContactView { @Inject public ContactView(Composite parent) { RoboGuice (Android) class RoboWay extends GuiceActivity { @InjectView(R.id.name) TextView name; @InjectResource(R.string.app_name) String myname; @Inject LocationManager loc; } public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); name.settext( "Hello, " + myname ); } 43
3.2 오픈소스프레임웍그다음은? 비니지스모델을고민하다 회사설립, 벤처캐피탈투자받음 오프소스프레임웍만으로는돈이안된다. Tomcat 주도업체인 Covalent 등인수 컨설팅, 교육이주수입원 2009년 5천3백억에 VMWare에인수 100만원짜리서버 53만대가격 44
3.3 기술환경변화저장소분산, 서비스 Integration Social, 대용량데이터 보다다양한기술이필요하게되었음 저장소분산 분산캐쉬, NoSQL 저장소 Integration Messaging Queue 모니터링도구 많은수의서버를욲영하는홖경 이런상황에맞추어 SpringSource의인수 & 제휴젂략 45
3.4 스프링과 PaaS 클라우드실행홖경에 Portability를제공하는 Layer Middleware 완충지대 WAS에대한요구사항이적음 OS수준의가상화홖경에서는 이미 JVM의 portability가있는데무슨이득이? Tomcat (Tc server) + 관리도구제공젂략 라이센스, 모니터링, 클러스터링등의관리편의성 제약된 JVM + Servlet container Google App Engine GAE에서 JavaEE6 스펙을지원하기를기대하기? 46
3.4 스프링과 PaaS 클라우드 Cloud Portability PaaS는사용자입장에서 Lock-in의 Risk가더큼 Portability 강조 Lock-in 리스크가작다는홍보 초기의사결정의장벽완화 같은이해관계인 PaaS 사업자와협업 47
3.4 스프링과 PaaS 클라우드그렇다면 PaaS 제공자의경쟁력은? 안정성 욲영편의성 모니터링도구 빌드, 배포등의작업편의성 가격정책 규모의경제 + 인프라기술력이경쟁력좌우 구글이태양광발젂소에투자? 48
3.5 기술유통창구인터넷포털과유사하기도 CP(Contents Provider) 데이터를받아서 단일창구, 일관된 UI로제공 CP 업자에게돈이나트래픽제공 49
3.5 기술유통창구기술통합젂파창구 여러바탕기술들을 일관된프로그래밍모델로 DI, AOP, 설정방식등의 Convention 포함 Java EE 표준과도협업관계 표준보다넓은영역, 빠른피드백싸이클 50