전자정부 표준프레임워크를 통해서 오픈 소스 경험하기

기간은 3/28(월) ~ 7/31(일) 

https://github.com/orgs/eGovFramework/repositories

 

https://bit.ly/egovcontrib

지난 연말 12/30 표준프레임워크 2.7.0이 출시되었습니다.

개발도구 64bit full버전이 추가되었고, 버그들이 수정되었습니다.

실행환경의 스프링버전 3.0.5는 변화가 없습니다. 

개인적인 생각으로는 2.6.1 정도의 업그레이드라고 생각됩니다만, 아마 스프링 버전이 올라간다면 eGovFrame 3.x로 될 것 같습니다.


개발환경 변화는 다음과 같습니다.

2013.12.30 : 개발환경 2.7.0 릴리즈

  • 기존 버전 패치 및 업그레이드 
    - eGovFrame Template -> CRUD Program 오류 수정(등록용 jsp 화면, reset 버튼 오류수정)
    - Batch Template Project 실행환경 2.7 반영
    - android-maven compile 오류 수정
    * pom.xml에 properties(android.sdk.path) 추가
    * android-maven-plugin 버전 변경(3.1.1 -> 3.6.1)
    - 모바일 디바이스 API pom.xml에 mysql 주석해제
    - 모바일 디바이스 API Wizard 설정오류 수정
    - 템플릿 프로젝트 context-idgen.xml수정(blockSize 10으로 일괄수정)
    - 템플릿 프로젝트(portalsite) 오류 수정
    * 관리자 회원 등록폼에서 회원 등록시 폼 name과 컨트롤러의 ModelAttribute가 상이하여 발생하는 오류 수정
      (EgovMberManageController.java)
    * 관리자 회원 등록폼의 집지역번호 validation rule 속성 누락 수정(EgovMberManage.xml)
    - 템플릿 프로젝트(Enterprise,Portalsite) 오류 수정
    * 회원정보 수정시 오류 수정
    - Template-Web-Simple_Homepage hsql DB로 변경
    - 프로젝트 템플릿 프로젝트 2종 변경
    * 공통컴포넌트 / 모바일 공통컴포넌트 all-in-one 추가
    * 모바일 공통컴포넌트 2종 템플릿 삭제(Collaboration, User Support)
    - 템플릿 엔터프라이즈 시스템 로그 정보 jsp 파일 추가
    - 실행환경 2.7.0 업데이트
    * ID Generation 서비스 버그개선(오류 현상 : 일부 DBMS 상에서 ID 중복 발생)
    * Data Access 서비스 버그개선(오류 현상 : EgovAbstractDAO 클래스의 listWithPaging() 메소드 pageSize 처리 오류 발생)
    - 이클립스 최적화 eclipse.ini 반영
    - splash 이미지 변경(2.6 -> 2.7)
    - 개발환경 64bit full 버전 추가

from: http://www.egovframe.go.kr/EgovDevEnvReleaseNote.jsp?menu=3&submenu=2


STS에 설치된 플그인도 업데이트됩니다.



Kepler 버전에서 CodeGen 플러그인은 아직 지원되지 않습니다.






코드 곳곳에 비슷한 패턴으로 들어가 있는 부가작업: 로깅, 트랜잭션, 등

이 코드를 한 클래스에 모아놓음 : Advice

그리고 남겨진 순수한 코드 : Core Concern



이제 Advice와 핵심코드를 엮어주는 일: Weaving

어떤 패턴으로 엮어줄 것인가: PointCut



엮어줄 시점을 정하는 것: JoinPoint

핵심코드 실행시점 전에 Advice를 실행 : before

핵심코드 실행시점 전과 후에 Advice를 실행 : around

핵심코드 실행시 예외 발생 Advice를 실행 : throw

...


XML

<bean id="adviceUsingXML" class="egovframework.rte.fdl.aop.sample.AdviceUsingXML" />

<bean id="concernSample" class="egovframework.rte.fdl.aop.sample.ConcernSample" /> 

<aop:config>
  <
aop:pointcut id="targetMethod" expression="execution(* egovframework.rte.fdl.aop.sample.*Sample.*(..))" /> 

  <aop:aspect ref="adviceUsingXML">

    <aop:before pointcut-ref="targetMethod" method="beforeTargetMethod" /> 

    <aop:after-returning pointcut-ref="targetMethod" method="afterReturningTargetMethod" returning="retVal" /> 

    <aop:after-throwing pointcut-ref="targetMethod" method="afterThrowingTargetMethod" throwing="exception" />

    <aop:after pointcut-ref="targetMethod" method="afterTargetMethod" /> 

    <aop:around pointcut-ref="targetMethod" method="aroundTargetMethod" />

  </aop:aspect>

</aop:config>

code from: egovframe textbook 


추천예제: 최범균님 스프링3.0 서적 chap01 예제

http://www.kame.co.kr/pds1.html?main=main_pds [G220] 링크




http://www.egovframe.go.kr 전자정부 표준프레임워크 사이트 메인페이지와 http://open.egovframe.go.kr 오픈 커뮤니티 메인페이지가 바뀌었습니다.




http://www.egovframe.go.kr/linklist.jsp

관련 오픈소스 링크 페이지 맘에 듭니다.



눈에 잘 띄게 된 것 같습니다.

작업하신 분들 수고 많으셨습니다.



재밌는 경험이었습니다.
작년 행사에 이어서 이번에도 사회를 보았는데, 사회라고 하기보다는 운동경기의 해설자가 더 맞는 역할인 것 같습니다.
2부를 마치고, 행사에서는 순서가 몇 번 바뀌는 바람에 당.황~.하셨어요 멘트만 연발하게 되었습니다. 무전기 이어폰이라도 끼었어야 했는데, 말이죠. 다행인 것은 제 어설픈 마무리에도 불구하고 행사는 재미있게 마쳤습니다.

1등은 4달짜리 프로젝트를 2주 만에 마치게 해준 불나비 팀의 thirdeye 에게로 돌아갔습니다. 숟가락만 얻으신 공동개발자분도 페북에 커밍아웃 하셨네요.

아래는 발표와 연관된 팀의 시연에 사용된 URL들입니다. 임시 주소도 있어서 동작하는 곳과 아닌 곳도 있을 것입니다.

1. 불나비 팀
2. BigLAP 팀
3. 크라켄 팀
4. 그루그루 팀

5. Octopus 팀
6. 푸쉬맨 팀
7. 오픈클라우드엔진 팀

프로젝트 팀의 동의를 얻어서 egov 오픈커뮤니티에 공지된다고 합니다.

행사 진행을 도와주신 여러분과 멋진 장소를 대관해 준 네이버 그린팩토리, 그리고 후원사들, 분당 정자역까지 방문해 주신 칼퇴 개발자들, 심사위원님 그리고 멋진 발표로 참가해 준 모든 팀들에 감사합니다.

전자정부 표준프레임워크에 일반 현업의 개발자들이 참여해서 빛난 행사였습니다. eGovFrame은 플랫폼으로 자리잡고, 그리고 국내 열악한 환경에서 SI/SM으로 고군분투하는 개발자들이 플레이어 역할을 맡아서 발전해 나가기를 바랍니다. 좋은 공공기관 사이트가 만들어지만 온 국민이 원하는 정보를 제 때, 손쉽게 찾고, 정부와 민간의 소통도 밝아지기 때문이 때문입니다.
제 기억에 생활코딩의 이고잉님이 추천하신 영동군청 처럼 말이죠. http://www.yd21.go.kr/html/kr/index.html

기술 자체가 아름다울 수 있는 때는 그 기술을 통해서 행복한 사람들이 많아질 때라고 생각합니다.

eGovFrame이여 영원하라~~~~

의도한 손 모양입니다. K

image from: http://www.unionpress.co.kr/news/articleView.html?idxno=153805





배치처리 (Batch Layer)  


지속적으로 제기된 일괄(배치) 기능에 대한 요구를 지원하기 위해 실행환경, 개발환경, 운영환경 으로 이루어진 일괄(배치) 프레임워크가 추가되었습니다.  





표준프레임워크 배치 실행환경은 3개 레이어(Core, Support, Execution Layer)로 구성되며, 일괄 (배치) 처리를 위한 기반 환경을 제공합니다.  



모바일 화면처리 (Mobile Presentation Layer)  


모바일 화면처리는 모바일 웹 애플리케이션을 위한 자바스크립트 프레임워크인 jQueryMobile을 포함하고 있습니다. 




모바일 디바이스 API (Mobile Device API Layer)  


모바일 디바이스 API는 아이폰, 안드로이드 앱으로 모바일 웹 애플리케이션을 패키징하고, 가속도계, 위치정보, 주소록 같은 디바이스의 기능을 자바스크립트로 제어하도록 지원합니다.





디바이스 API는 가장 많이 사용되는 폰갭(phonegap)을 포함하고 있습니다.



표준프레임워크의 자동생성된 샘플은 hsqldb를 기본적으로 이용하고 있습니다. 2.6부터는 hsqldb서버를 따로 실행하지 않고, 바로 실행합니다.


datasource 설정부터 찾아보겠습니다.

ctrl+shift+R(맥은 cmd+shift+R)로 Open Resource 창을 엽니다. *data라고 검색어를 입력하면 context-datasource.xml 파일이 보입니다. 선택해서 파일을 엽니다.


<jdbc:embedded-database> 설정이 HSQL을 지정하고 있습니다. db파일의 위치는 classpath상에 있고, db/sampledb.sql 입니다. sampledb.sql 파일을 선택하고 ctrl+shift+R 단축키를 입력하면 sampledb.sql 파일을 쉽게 열 수 있습니다.


src/main/resources 폴더 아래 db 폴더가 있고, 그 아래 sampledb.sql 파일이 있습니다. 파일을 열어서 sql 내역을 살펴보겠습니다.


CREATE MEMORY TABLE SAMPLE(...) 과 같은 SQL을 볼 수 있습니다. 


메모리 DB를 사용하면 테스트를 용이하게 할 수 있는 장점이 있습니다. 딱 거기까지입니다. 익숙하게 다루기까지는 연습이 많이 필요할 것 같습니다.




업무처리 (Business Logic Layer)  


업무처리 레이어는 업무 프로그램의 업무 로직을 담당하는 레이어로서, 업무 흐름 제어, 에러 처리 등의 기능을 제공합니다.  

<그림> 업무처리 레이어 구성  



업무처리 레이어는 Spring Web Flow, Spring 이상 2가지 오픈소스를 사용합니다.  

프로세스 제어(Process Control)을 담당하는 웹 플로우는 페이지 흐름(flow)의 정의와 수행을 처리합니다.  

에러 처리(Exception Handling)는 표준프레임워크 기반의 시스템 개발시 Exception에 따라서 특정 로직을 실행하여 Exception에 따라 적절한 대응을 할 수 있습니다.  



데이터처리 (Persistence Layer)  

데이터처리 레이어는 데이터를 다루는 역할을 전담하며, 데이터베이스에 대한 연결 및 영속성 처리, 선언적인 트랜잭션 관리를 제공합니다. 데이터처리 레이어의 구성은 다음과 같습니다.  

<그림> 데이터처리 레이어 구성  



데이터소스(DataSource)와 트랜잭션(Transaction)은 스프링을 사용합니다.  
데이터 접근(Data Access)는 iBatis를 사용하고 있으며, SQL Mapper를 통해서 XML로 정의된 SQL을 활용합니다.  
ORM(Object-Relational Mapping)은 하이버네이트(Hibernate)를 사용하고 있습니다. 하이버네이트는 자바 객체와 관계형 데이터 모델 간의 매핑을 위한 도구이며, 자동 생성된 쿼리 서비스를 지원하는 강력한 고성능의 퍼시스턴스 프레임워크입니다.


연계통합 (Integration Layer)  

연계통합 레이어는 다른 시스템과 데이터 교환을 지원하는 역할을 합니다. 연계통합 레이어의 구성은 다음과 같습니다.  

<그림> 연계통합 레이어 구성  



Naming Service, Integration Service, Web Service 등 총 3개 서비스를 제공합니다.  
네이밍 서비스(Naming Service)는 스프링을 이용합니다.  
인테그레이션 서비스(Integration Service)는 표준프레임워크 기반의 시스템이 다른 시스템과의 연계를 위해 사용하는 Interface의 표준을 정의한 것입이다.  
웹 서비스(Web Service)는 아파치 CXF를 사용합니다. 공개되어 있는 웹 서비스를 호출하고, 처리 결과를 돌려줍니다. 개발한 업무 모듈을 웹 서비스로 공개할 수 있도록 프록시(Proxy) 등을 제공하고, 완성된 웹 서비스로 공개합니다.

화면처리 레이어(Presentation Layer)

화면처리 레이어는 MVC(Model-View-Controller) 패턴에서 View에 해당합니다. 화면처리 레이어의 구성은 다음과 같습니다.  


<그림> 화면처리 레이어 구성  




Spring MVC, Internationalization, Ajax Support, Security, UI Adaptor 이상 5가지 기능을 제공합니다.  


MVC 패턴의 프레임워크는 스프링 MVC, 스트럿츠(Struts), 웹워크(Webwork) 등이 있지만, 표준프레임워크에서는 스프링 MVC를 채택하였습니다.  


국제화(Internationalization) 기능은 다국어를 처리하는 방법입니다. 스프링 MVC의 LocaleResolver를 이용합니다. 브라우저 헤더, 세션, 쿠키 등에 있는 언어 정보를 이용해서 해당 언어로 페이지를 보여주는 기능입니다.  


Ajax 지원은 AjaxTags 라이브러리를 이용합니다. Ajax를 이용해 자주 사용되는 기능을 custom tag형태로 제공합니다.  


인증, 권한 같은 일반적인(통상적인) 개념의 Security 서비스는 Spring Security를 활용한 공통기반 레이어에

서 제공합니다. 화면처리 레이어의 Security 서비스는 입력값 유효성 검증 기능을 제공한다. 스프링과 연결되는 자카르타 커먼스 밸리데이터(Jakarta Commons Validator)를 이용합니다.  


UI 어댑터는 표준프레임워크와 RIA(Rich Internet Application) 솔루션을 연결하기 위한 기능입니다. 마이플랫폼 등의 상용 솔루션과 연결을 지원하는 기능입니다.  


전자정부 표준프레임워크의 실행환경은 애플리케이션 프레임워크와 라이브러리 39가지가 8개의 서비스 그룹으로 구성되어 있습니다.



그림과 같이 공통기반 위에 화면처리, 업무처리, 데이터처리, 연계통합, 배치처리, 모바일 화면처리, 모바일 디바이스 API 레이어(Layer)들이 있습니다. 


공통기반 (Foundation Layer) 

공통기반 레이어는 아래 그림과 같이 구성되어 있습니다. 20가지 기능별 컴포넌트들은 실행환경의 각 레이어에서 공통적으로 사용되는 기능을 제공합니다.    



AOP, Cache, Compress/Decompress, Encryption/Decryption, Excel, File Handling, File Upload/Download, FTP, ID Generation, IoC Container, Logging, Mail, Marshalling/Unmarshalling, Object Pooling, Property, Resource, Scheduling, Server Security, String Uril, XML Manipulation 이상 20가지의 공통기능을 제공합니다.

이 중에서 가장 주의깊게 봐야할 것이 IoC Container입니다. 스프링의 핵심이고, 이것을 기준으로 표준프레임워크의 애플리케이션 패턴이 이루어집니다. 나머지 기능들도 각기 중요한 역할을 하기 때문에 후반에 하나씩 살펴보겠습니다.   



+ Recent posts