제 7 회한국자바개발자컨퍼런스 Java Way : Communication and Participation 오픈소스기반의엔터프라이즈프레임워크를 활용한시스템개발전략 이일민 DevelopGate 대표컨설턴트 tobyilee@gmail.com 2006 년 2월 25 일 2006 JavaCommunity.Org All Rights Reserved. 1
차례 엔터프라이즈시스템개발의위기 프레임워크기반개발 (FBD) 오픈소스프레임워크도입전략 Spring Framework 애플리케이션프레임워크 (AF/FoF) OSAF(OpenSeed Application Framework) KAIST CAF and 2Participation
엔터프라이즈시스템의위기 J2EE프로젝트의 80% 가실패 엔터프라이즈시스템개발프로젝트의성공은매우어렵다 고객의요구사항을모두구현 지정된기간내에개발 제한된인원과예산을사용 일정수준이상의품질을지닌코드작성 개발팀이떠난후에도원활한유지보수 / 추가개발가능 충분한성능및안정성, 확장성충족 성공적인개발의장애 기술적인요인 기술외적인요인 and 3Participation
성공적인개발의장애가되는기술외적인요인 요구사항분석의실패 프로젝트중후반또는개발완료후의잦은요구사항변경 고객은자신에게필요로하는것이무엇인지잘알지못한다 개발팀의낮은기술수준 + 높은기술요구조건 개발생산성저하 질낮은쓰레기코드양산 팀원간의불화 커뮤니케이션의실패 개발팀 / 리더 /PM/ 고객사이의프로젝트에대한이해의차이 정직하지못함 비실용적인이상주의 / 권위주의 문제해결보다는최신 / 고급기술적용에집착 개인적인야망 / 실력과시 and 4Participation
성공적인개발의장애가되는기술적인요인 검증되지않은기술도입 현장에서검증되지않은최신기술의마구잡이도입 유행, 경쟁, 과시 기술자체의결함과제품의버그로인한개발지연 속수무책 WAS/Database/Framework/Library/OS/Tool 기술전도사 / 마케터 / 신기술매니아 / 언론 / 권위적인아키텍트에주의! 검증하지않은기술도입 평가 (evaluation) 과정을거치지않음 기술검증방법의부재 간단한예제로만족 과도한엔지니어링 이상주의 (EJB) 기술우선주의 성능에대한무관심 and 5Participation
성공적인시스템개발을위한필요조건 유연한개발방법론 기본기술에충실한개발자 실용적인마인드 겸손 / 성실한자세 프레임워크기반개발 (Framework Based Development)! and 6Participation
프레임워크란? ( 주의 ) IT 에서사용하는정확한용어의의미를이해하기는힘들다. 또여러가지의미를가지거나모호한단어들이많다. 특정기술또는도메인애플리케이션의기반을이루는아키텍처 디자인패턴 + 기반코드 (skeleton code) 종류와사용목적이매우다양하다 Application Application User Code Application Framework and 7Participation
프레임워크!= 라이브러리 / 컴포넌트 / 툴킷 누가애플리케이션의틀과구조를결정하는가 라이브러리는애플리케이션의구조를바꾸지않는다 프레임워크는애플리케이션의구조를결정한다. 애플리케이션디자인패턴 누가애플리케이션의흐름을제어하는가 라이브러리를사용하는유저의코드가컨트롤한다. 프레임워크가그위에개발된유저의코드를컨트롤한다. Inversion of Control 프레임워크의작동원리 프레임워크 => 유저코드 하지만명확하게구분할수없는경우도있다 and 8Participation
프레임워크!= 패턴 프레임워크는추상적이지않고구체적인기반코드를가지고있다. 확장가능한기반코드의집합 프레임워크는패턴의집합으로구성되어있다. 하나의패턴에제한되지않는다 프레임워크는특정기술또는도메인에종속적이다. 일반적인패턴은범용적이다 하지만범용적인프레임워크도있다. => 계층적프레임워크모델 and 9Participation
프레임워크도입의장점 개발을쉽고편하게해준다 프레임워크의내부는복잡할수있지만프레임워크를사용하는방법은쉽다 심플한코드 코드의중복을제거 코드내의복잡함을제거 뛰어난생산성 표준화된심플한코드작성을유도 건전한디자인 / 아키텍처 프레임워크가가진디자인구조와의도가자연스럽게적용 애플리케이션의요구사항을구현하는데집중 난이도가높은기술적인세부사항에서자유 성공적인프로젝트의필수조건 and 10 Participation
프레임워크도입의장애물 새로운기술에대한적응시간필요 개발팀교육의부담 기술적시행착오 프레임워크에대한충분한이해부족 애플리케이션레벨의프레임워크사용전략부재 적절하지못한프레임워크도입으로개발의부담가중 프레임워크에종속적인시스템 유연성이떨어지는프레임워크도입 전략적인프레임워크도입방법이필수 and 11 Participation
프레임워크의종류구분 기술 / 도메인에의한구분 웹MVC 프레임워크 Persistent/ORM 프레임워크 Configuration 프레임워크 테스팅프레임워크 로깅프레임워크 보안프레임워크 도메인프레임워크 ( 보험, 회계, 제조, 고객관리, 유통, 컨텐트관리 ) 종합 / 애플리케이션프레임워크 개발방식에따른구분 자체개발프레임워크 상용프레임워크 오픈소스프레임워크 and 12 Participation
자체개발 (In-House) 프레임워크 초기 J2EE 시대에는상당수의업체는자체개발프레임워크를개발해왔다 Persistent 웹MVC 로깅 보안프레임워크 프레임워크개발은힘든작업이다. 프레임워크개발과애플리케이션개발은매우다르다 잘못설계 & 구현된프레임워크로인한비용은엄청나다 프레임워크를직접개발하지말것!!!!!!! 이미수많은뛰어난프레임워크들이개발되어져있다. 불필요한성공가능성낮은작업에시간을쏟지말라 and 13 Participation
오픈소스프레임워크 자바의두기둥 : JxE(JSE,JEE) 와오픈소스프레임워크 엔터프라이즈자바시스템개발의핵심역할 다양한분야의방대한제품군 오픈소스웹 MVC 프레임워크 : 150 개 + 뛰어난품질과지속적인개발능력을가진프레임워크는매우소수 다양한신기술과아이디어의시험장소 Production level에다다르기전에사장되는프레임워크가대부분 현장에서적용되고검증되는제품은적다 다양한품질레벨 적절한프레임워크를선별하는능력이필요하다 and 14 Participation
오픈소스프레임워크도입전략 신중한결정이필요 잘못된프레임워크도입으로인한피해는크다 필요한프레임워크를도입하지않은것도문제 리서치 다양한제품을분석, 검토 광고 / 홍보가아닌개발자커뮤니티를통한정보수집 (TSS/Forum/Blog) 검증 레퍼런스가전부가아니다. 자체적인검증전략이필요 기능적인관점에서만접근하지말것 and 15 Participation
오픈소스프레임워크도입전략 오픈소스프레임워크는공짜가아니다 라이센스비용과상관없이다양한비용이발생 필요한비용을지출할준비가되어있어야한다 전문적인서포트 / 교육 잘못된프레임워크선정은많은불필요한비용을부담할수있다 분명한도입목적과효과를확인 프레임워크도입배경 / 이유 프레임워크사용유무에따른장단점과기대효과 and 16 Participation
프레임워크검증 (1) 기능분석 / 기대효과 / 예상부담평가 애플리케이션개발에어떤영향을줄것인가 도입했을때가질수있는부담은어떤것인가 학습및적응기간 경쟁 / 관련프레임워크와장단점비교 문서의품질검토 프레임워크의기능, 특징, 구조, 도입효과, 용도등이잘설명되어있는기본문서가있는가? 프레임워크개발자의개발동기와배경, 상황에대한설명 충실한레퍼런스문서 API Document 책, 아티클, 예제, 블로그 and 17 Participation
프레임워크검증 (2) 프레임워크프로젝트의현황 꾸준한활동이있는프로젝트인가 얼마나열성적인핵심개발팀이있는가 / 지원기업의존재 프로젝트커뮤니티의규모와활동정도 개발자메일링리스트 릴리즈주기 /CVS Commit 히스토리 사용자의피드백 / 개발팀의지원수준 파생 / 서브프로젝트, 관련사이트, 기술지원업체의존재 디자인품질 프레임워크의디자인원칙에충실한가 Concrete 클래스로만되어있는프레임워크주의 새버전이나올때호환이안될가능성이높다. 확장가능성 Extension Customizing and 18 Participation
프레임워크검증 (3) 코드의품질 오픈소스는소스가오픈되어있다! 클린코드인가? 이해하기쉬운가 코드를분석할수있는가 / 종종필요 테스트스위트 제품의품질의척도 충분한테스트코드가없다면매우위험하다 테스트규모, 코드커버리지의수준, 자동화된테스트결과공개여부 다양한플랫폼과 WAS등과의테스트 and 19 Participation
스프링프레임워크 대표적인오픈소스프레임워크 성공적인프레임워크의교과서 하이버네이트와함께가장빠르게실무도입 빠른현장적용 사용개발자들의만족도높음 전문지원업체 (Interface21, BEA,DevelopGate) 새로운개발패러다임주도 IoC, AOP, Application Framework and 20 Participation
스프링 : 기능분석 / 특징 IoC/Dependency Injection AOP BeanFactory/ApplicationContext SpringAOP, AspectJ Abstraction Resource Transaction DAO/ORM SpringMVC Glue Framework Layered Framework and 21 Participation
스프링 : 문서 / 현황 수준높은다양한 document 보유 뛰어난수준의레퍼런스, API Doc ( 한글문서 : openframework.or.kr) Tutorial, Article, Blog 책 (SpringInAction,ProSpring,J2EE Development with SpringFramework, SpringLive, Spring 프레임워크워크북 ) 프로젝트현황 가장활발한오픈소스프로젝트 짧은릴리즈주기 / 일일빌드 전문개발 / 지원팀 (Interface21) 방대한커뮤니티 / 포럼 / 개발자메일링리스트활동활발 빠른피드백 ( 유저의요구 / 아이디어의반영 ) 개발팀의지원 ( 포럼, 독립컨퍼런스 ) 업계의지원 (BEA 의공식기술지원 ) 다양한서브프로젝트 and 22 Participation
스프링 : 디자인 / 품질 / 테스트 디자인 IoC/DI Template Method/Callback 편리한확장성 Abstraction/Interface 기반 뛰어난확장성 스스로확장하는구조 사용코드의프레임워크에대한의존성최소화 (POJO기반) 코드품질 클린코드 명확한 API구조 테스트 TDD/UnitTest기반개발 모든버그는테스트로 자동빌드 & 테스트 and 23 Participation
스프링 : 확장성 Spring 자체가 IoC/DI/AOP 기반으로확장된모델 모든것은 IoC/DI구조로동작 AOP를이용한기능 독립적인레이어구조가능 특정레이어의기술변화가다른레이어에영향을주지않도록 다양한관련프레임워크를쉽게연동 ORM, View, WebMVC, Remoting Spring 기반의프레임워크개발 Acegi Security Framework OSAF and 24 Participation
프레임워크인테그레이션 (FI) 일반적으로다양한기능과목적을가진한개이상의프레임워크를사용한다. 프레임워크간의호환성, 배타성, 영향력에대한고려 여러개의프레임워크가원활하게조합되도록하는것은쉬운작업이아니다 단순프레임워크의조합은애플리케이션구조를복잡하게만들수있다 애플리케이션이프레임워크를사용하는일관적인틀 (framework) 을만들어줘야한다. 애플리케이션레벨의프레임워크를위한프레임워크의필요 and 25 Participation
애플리케이션프레임워크 (AF/FoF) 애플리케이션을위한프레임워크 = Framework of Frameworks 프레임워크의조합 / 연동을통한통합구조 용도와기술에따른다양한조합방법가능 조합된서브프레임워크를사용하는표준화된패턴제공 프레임워크이용패턴 도메인영역또는개발팀의특성에적합한형태로구성 필요에따라프레임워크확장또는추가개발이요구된다 단순조합만으로충분하지않은경우가대부분이다 and 26 Participation
애플리케이션프레임워크구축 / 개발방법 (1) 최종애플리케이션의특징 / 요구사항 / 제한조건을파악 성능요구조건 도메인과로직의복잡도 사용기술의제약 환경 /OS/ 서버 /JDK Version 통합되어져야할시스템 개발팀의수준 / 특성 / 구성 개발규모 확장성, 유연성 and 27 Participation
애플리케이션프레임워크구축 / 개발방법 (2) 요구조건을충족하기위한후보프레임워크선정및검증 웹MVC 비즈니스티어 트랜잭션 Persistent/ORM/DAO Configuration 리모팅 보안 로깅 테스팅 국제화 / 로컬화 and 28 Participation
애플리케이션프레임워크구축 / 개발방법 (3) 다양한조합구조작성 프레임워크간의종속성 / 호환성검토 유연한구조 개별프레임워크기능확장 /Customization 프레임워크의확장기능 (extension) 을이용한 customizing 확장성이떨어지는프레임워크의코어소스를수정했을경우업그레이드시어려움이있을수도있다 오픈소스라이센스에주의 GPL/LGPL 등은재배포의의무가있을수도있다 상위 (high-level) 추상계층도입 애플리케이션이하위프레임워크를개별적으로사용하는것보다는추상적인계층을통해서접근하는것이유리한경우 애플리케이션의필요에따라두단계이상의계층에독립적으로접근하는것이가능할수도있다 분명한이유와효과가없는추상계층도입은바람직하지않다 and 29 Participation
애플리케이션프레임워크구축 / 개발방법 (4) 검증용샘플애플리케이션구현 평가 애플리케이션프레임워크를위한단위테스트, 통합테스트작성 프레임워크의버그는애플리케이션의버그보다매우큰문제를가져올수있다 하위프레임워크의업그레이드시호환성을체크할수있도록작성한다 단순한예제차원의샘플코드에만족하지말것 개발할시스템의 Vertical Slice 또는대표적인유즈케이스를다루는애플리케이션작성 심플한코드가작성이되는가 필요로하는충분한성능을가졌는가 애플리케이션코드의통일성이있는가 프레임워크나기술에어느정도종속적인가 개발생산성이뛰어난가 학습난이도가높은가 and 30 Participation
프레임워크의수평확장과수직확장 수평확장 (extension) User Code Framework Extension 수직확장 (abstraction layer) User Code Abstract Layer Framework and 31 Participation
다계층애플리케이션프레임워크 넓은영역의도메인또는애플리케이션특성에맞는기반애플리케이션프레임워크작성 기업의표준프레임워크또는개발회사, 팀의표준프레임워크 공통적인구현프레임워크 기반애플리케이션프레임워크위에각구체적인시스템또는기업에맞는특성을가진도메인애플리케이션프레임워크로확장 특정도메인또는시스템마다다른부분을구현 특정애플리케이션의추가적인요구사항을반영 자주발견되는케이스의경우기반애플리케이션프레임워크에반영 User Code Domain Application Framework Base Application Framework and 32 Participation
애플리케이션프레임워크도입의주의사항 프레임워크개발 / 구성은쉽지않다 초기프레임워크분석및애플리케이션프레임워크개발에충분한투자를아끼지말라 질낮은프레임워크작성주의 테스트코드가없는프레임워크를만들지말것 사용프레임워크의변화에대한대응정책을가지고있을것 업그레이드에따른애플리케이션프레임워크의적용계획을가지고있어야한다 어느단계까지업그레이드할지미리결정 개발후마이그레이션필요성을파악 프레임워크의개발계획, 추가기능등을미리예측해야한다 필요하면스스로해당프레임워크를확장하고이를공개한다. 오픈소스마인드 애플리케이션코드의각프레임워크에대한사용전략및가이드를충분히작성 개발자간의프레임워크사용방식과접근계층의차이가발생하지않도록주의 개발팀의특성에맞는프레임워크를이용한교육방법도입 and 33 Participation
OpenSeed Application Framework(1) OpenSeed의오픈소스제품에사용할기반애플리케이션프레임워크 기반프레임워크 : JDK5.0 SpringFramework IoC/DI/AOP/AspectJ Hibernate/Annotation Junit/EasyMock/Spring Mock Log4J Axis DWR SpringMVC JSP/JSTL Sitemesh Acegi Security Framework and 34 Participation
OpenSeed Application Framework(2) 조합프레임워크 SpringIoC 프레임워크확장 Generic DAO, Hibernate Generic DAO Generic Enum, Hibernate Generic UserType Generic Property Editor SpringMVC: SpringContextController JSP/JSTL: SpringBind Custom Tag UI: Grid/Tree/Tab Control Clustered Cache Framework Paging/Order Framework Ajax Framework WebService/Remoting and 35 Participation
OpenSeed Application Framework(3) 인증, 보안, 세션관리프레임워크 다양한 security framework 의적용이가능한보안, 인증, 세션관리프레임워크 Acegi, JAAS, SSO, LDAP, custom security code 와연동 애플리케이션레벨의표준화된인증, 보안, 세션정보관리 애플리케이션 Context/WorkFlow 프레임워크 애플리케이션의 Context/Flow 정보를프레임워크의모든 Layer 에서통일된방법으로사용할수있도록구성 Domain Model 과함께모든레이어 / 티어에서사용 and 36 Participation
KAIST CAPS Application Framework KAIST 학사관리시스템 (CAPS) 을위해서 OSAF 를기반으로작성 Application Code Domain Application Framework(CAF) Base Application Framework(OSAF) and 37 Participation
CAF Application Stack and 38 Participation
OpenSeed.net 오픈소스프로젝트 OSAF: 오픈소스프레임워크기반의애플리케이션기반프로젝트 OSAFTools: OSAF기반의애플리케이션개발을위한 Eclipse Plug-in MockingBoard: OSAF기반의포럼시스템 FireDingo: OSAF기반의 Bliki(Blog+Wiki) 시스템 오픈소스프레임워크활용을위한지식위키 / 기술포럼 실용적인프레임워크활용전략 애플리케이션프레임워크개발기법 오픈소스프레임워크의적용팁 / 가이드 프레임워크확장기술및자료 애플리케이션프레임워크개발방법론 and 39 Participation