본문 바로가기

교육 및 세미나/전자정부 표준 프레임워크

4장 실행환경 소개 및 공통기반 -IoC

1.실행환경 소개

*개발프레임워크 환경

  • 전자정부 개발프레임워크 환경은 응용 SW를 위한 실행 환경, 응용 SW 개발자를 위한 개발 환경, 응용 SW 운영자를 위한 운영 환경, 개발프레임워크 관리자를 위한 관리 환경으로 구성됨

*개발프레임워크 실행환경

  • 전자정부 개발프레임워크 실행환경은 응용 SW의 구성기반이 되며 응용 SW 실행 시 필요한 기본 기능을 제공하는 환경임
  • 전자 정부 개발 프레임워크 실행환경은 8개 서비스 그룹으로 구성되며 39개 서비스를 제공함

전자정부_개발프레임워크_실행환경

*개발 프레임워크 아키텍처 뷰

개발_프레임워크_아키텍처_뷰.PNG

*배경

  • 기존 전자정부 프레임워크의 문제점
    • 전자정부에 적용된 개발프레임워크는 Black Box 형태로 제공됨
    • 사업자의 기술지원 없이는 응용 SW를 유지보수하기 어렵고 사업자에 대한 의존성이 발생함
    • 개발프레임워크에 따라 개발표준 정의, 개발자수급, 교육시행 등 별도의 유지보수 체계를 가짐
    • 개발프레임워크의 체계적인 관리절차의 미비로 동일 개발 프레임워크라 하더라도 버전 관리 어려움
  • 전자정부 개발프레임워크의 표준화
    • 사업자 고유 개발프레임워크에 대한 기술 종속성을 배제
    • 프레임워크 표준화를 통한 응용 SW의 표준화와 품질, 재사용성을 향상
    • 개발 프레임워크의 유지 보수 단일화를 통한 투자 효율성을 높임

*실행환경 특징

  • 8개 서비스 그룹, 39개 서비스로 구성
    • 화면처리, 업무처리, 데이터처리, 연계통합, 공통기반, 배치처리, 모바일 화면처리, 모바일디바이스 API 실행환경
    • MVC, IoC 컨테이너, AOP, Data Access, Integration 등의 핵심 서비스 39개를 제공
  • 전자정부 프로젝트에 최적화된 오픈 소스 소프트웨어 선정
    • 39개 서비스 별 최적의 오픈 소스 소프트웨어 선정
  • 경량화된 개발프레임워크로서 사실상 업계 표준에 가까운 Spring 프레임워크를 적용
    • J2EE 표준을 준수하는 Spring 프레임워크
    • 특정 업체의 WAS나 DBMS에 독립적인 환경을 제공
  • DI(Dependency Injection)방식의 의존 관계 처리
    • Dependency Injection을 통해 개체나 컴포넌트 간의 의존성을 정의함으로써 변경용이성과 재사용성을 향상
  • AOP(Aspect Oriented Programming) 지원
    • 트랜잭션, 예외처리와 같은 공통 관심 대상을 분리하여 정의함
  • MVC Model2 아키텍처 구조 제공 및 다양한 UI 클라이언트 연계 지원
    • Spring MVC 기반으로 하며, 다양한 UI 클라이언트 연계를 위한 인터페이스를 정의함
  • 전자정부 개발 프레임워크 표준 연계 인터페이스 정의
    • 표준 연계 인터페이스를 정의하여 연계 솔루션에 대한 의존성을 배제하고 독립적인 어플리케이션 개발이 가능함

*실행환경 적용효과

  • 개발 생산성 향상
    • 공통적으로 필요한 기능을 제공함으로써 개발 중복을 최소화하고 기반 구조를 정의함으로써 개발자가 비즈니스 업무에 집중할 수 있도록 함
  • 전자정부 시스템의 재사용성 향상
    • 전자정부 개발프레임워크에서 개발된 사업 컴포넌트를 공유함으로써 재사용성을 향상시킴
  • 전자정부 상호운용성 향상
    • 전자정부 개발프레임워크 사용 시스템간 연계 표준 인터페이스를 사용함으로써 상호 운용성이 향상됨
  • 전자정부 응용 소프트웨어 표준화 효과
    • 화면처리/업무처리/데이터처리의 표준화된 개발 기반을 제공함으로써 개발 코드의 표준화를 유도함
  • 오픈 소스 활성화
    • 오픈 소스에 기반한 표준 프레임워크를 정의함으로써 개발자들의 오픈 소스 사용을 활성화 함
  • 중소 소프트웨어 사업자의 산업경쟁력 강화
    • 전자정부 개발프레임워크를 공유하고 프레임워크 기술 인력을 증가시킴으로써 중소 소프트웨어 사업자의 경쟁력을 강화함

*실행환경 구성

  • 화면처리
    • 업무 프로그램과 사용자 간의 인터페이스를 담당하는 레이어, 사용자 화면 구성, 사용자 입력 정부 검증 등의 기능 제공
  • 업무처리
    • 업무 프로그램의 업무 로직을 담당하는 레이어 업무 흐름 제어, 에러 처리 등의 기능 제공
  • 데이터처리
    • DB에 대한 연결 및 영속성 처리, 트랜잭션 관리 제공
  • 연계통합
    • 타 시스템과의 연동 기능을 제공
  • 공통기반
    • 실행 환경 서비스에서 공통적으로 사용하는 기능 제공
  • 배치처리
    • 대용량 데이터처리 지원 작업수행 및 관리기능 제공
  • 모바일 화면처리
    • 모바일 환경의 화면구성을 지원하는 사용자 경험 기반
  • 모바일 디바이스 API 실행환경
    • 모바일 하이브리드 어플리케이션 개발을 위한 디바이스 API 기능 제공

전자정부 개발프레임워크 실행환경은 8개 서비스 그룹으로 구성되며 39개 서비스를 제공함

전자정부_개발프레임워크_실행환경2

  • 화면처리 레이어
    • MVC: MVC 디자인 패턴을 적용하여 사용자 화면을 개발할 수 있도록 MVC 기반 구조를 제공한다.
    • Internationalization: 다양한 지역과 언어 환경을 지원할 수 있는 서비스로, 서버 설정 및 클라이언트 브라우저 환경에 따라 자동화된 다국어 기능을 제공한다.
    • Ajax Support: Ajax는 대화식 웹 애플리케이션의 제작을 위해 HTML과 DOM, 자바스크립트, XML, JSON 등과 같은 조합을 이용하는 웹 개발 기법으로 Ajax 기능 지원을 위한 JQuery를 제공한다.
    • Validation: 화면처리 레이어에서 사용자의 입력값 유효성을 client-side, server-side 환경 별로 검증 기능을 제공한다.
    • UI Adaptor: 화면처리 레이어의 구현 방식에 따라 업무로직 레이어가 변경되는 것을 막기 위해서, 업무처리 Layer에서 사용할 데이터 타입을 정의하고, 화면 레이어에서 사용하는 in/out parameter를 해당 구현 방식에 맞게 변환해주는 기능을 제공한다.\
  • 업무처리 레이어
    • Process Control: 비즈니스 로직과 업무 흐름의 분리를 지원하며, XML 등의 외부 설정으로 업무흐름 구성을 제공하고, 미리 정의된 프로세스를 실행하는 기능을 제공한다.
    • Exception Handling: 응용 프로그램의 실행 과정에서 발생하는 예외사항(Exception)을 처리하기 위해 표준화된 방법을 제공한다.
  • 연계통합 레이어
    • Naming Service: 원격에 있는 모듈 및 자원 등을 찾아주는 기능을 제공한다.
    • Web Service: 연계 등을 위하여 업무 서비스를 웹 서비스의 형태로 어플리케이션 외부에 노출시켜 타 시스템이나 어플리케이션에서 서비스를 이용할 수 있도록 하는 기능을 제공한다.
    • Integration Service: 전자정부 시스템과의 연계를 위한 공통 인터페이스를 제공하여, 다양한 솔루션 연계 방식에 대한 표준화된 처리 방식을 제공한다.
  • 데이터 처리 레이어
    • Data Access: 다양한 데이터베이스 솔루션 및 데이터베이스 접근 기술에 대한 추상화된 접근 방식을 제공하여 업무로직과 데이터베이스 솔루션 및 접근 기술 간의 종속성을 배제하기 위한 기능을 제공한다.
    • Data Source: 다양한 방식의 데이터베이스 연결을 제공하고, 이에 대한 추상화 계층을 제공함으로써, 업무 로직과 데이터베이스 연결 방식 간의 종속성을 배제하기 위한 기능을 제공한다.
    • ORM: 객체 모델과 관계형 데이터베이스 간의 매핑 기능인 ORM(Object-Relational Mapping) 기능을 제공함으로서, SQL이 아닌 객체를 이용한 업무 로직의 작성이 가능하도록 지원한다.
    • Transaction: Database Transaction 을 처리하기 위한 서비스로서, Transaction 처리에 대한 추상화된 방법을 제공하여 일관성 있는 프로그래밍 모델을 제공한다.
  • 공통기반 레이어
    • AOP: 관점지향 프로그래밍(Aspect Oriented Programming: AOP) 사상을 구현하고 지원한다.
    • Cache: 빈번히 사용되는 컨텐츠에 대해서 빠른 접근을 가능하게 하는 기능으로 잦은 접근을 통한 오버헤드나 시간을 단축시키는 역할을 한다.
    • Compress/Decompress: 데이터를 압축 및 복원하는 기능을 제공한다. 데이터를 효율적으로 저장 및 전송하기 위해 원본 데이터를 압축하거나 압축된 데이터를 복원하여 원본 데이터를 구하는 데 사용될 수 있다.
    • Encryption/Decryption: 데이터에 대한 암호화 및 복호화 기능을 제공하며, 네트워크를 통한 송수신 시, 보안을 목적으로 사용될 수 있다.
    • Excel: 엑셀 파일 포맥을 다룰 수 있는 자바 라이브러리를 제공한다.
    • File Handling: File 생성 및 접근, 변경을 위해 File에 Access할 수 있는 기능을 제공한다.
    • File Upload/Download: 화면처리 서비스 그룹에서 사용되며, 파일을 업로드 및 다운로드 하기 위한 기능을 제공한다.
    • FTP: FTP(File Transfer Protocol) 프로토콜을 이용하여 데이터(파일)을 주고받기 위한 FTP 클라이언트 기능을 제공한다.
    • ID Generation: UUID(Universal Unique Identifier) 표준에 따라 시스템에서 사용하는 ID(Identifier)를 생성하는 기능을 제공한다.
    • IoC Container: 프레임워크의 기본 기능인 IoC(Inversion of Control) 컨테이너 기능을 제공한다.
    • Logging: System.out.println 문을 사용한 오버헤드를 줄이고, 간편한 설정을 통해 로그를 저장하고 통제할 수 있는 기능을 제공한다.
    • Mail: SMTP 표준을 준수하며 이메일을 송신할 수 있도록 이메일 클라이언트 기능을 제공한다.
    • Marshalling/Unmarshalling: 객체를 특정 데이터 형식으로 변환하고, 반대로 특정 데이터 형식으로 작성된 데이터를 객체로 변환하는 기능을 제공한다.
    • Object Pooling: Pool에 사용 가능한 객체가 있을 경우 객체를 할당받거나, 없을 경우 Pool 크기에 따라 새로운 객체 생성 및 할당하는 기능을 제공한다.
    • Property: 외부 파일이나 환경 정보를 구성하는 키와 값의 쌍을 내부적으로 저장하고 있으며, 어플리케이션이 특정 키에 대한 값에 접근할 수 있도록 기능을 제공한다.
    • Resource: 국제화(Internationalization) 및 현지화(Localization)를 지원하기 위한 기능으로, 키 값을 이용하여 국가 및 언어에 해당하는 메시지를 읽어오는 기능을 제공한다.
    • Scheduling: 어플리케이션 서버 내에서 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 기능으로서, 유닉스의 크론(Cron) 명령어와 유사한 기능을 제공한다.
    • Server Security: 서버 함수 및 데이터 접근 시 보안 관리를 위해 사용자 인증 및 권한 관리 기능을 제공한다.
    • String Util: 문자열 데이터를 다루기 위한 다양한 기능을 제공한다.
    • XML Manipulation: XML을 생성하고, 읽고, 쓰기 위한 기능을 제공한다.
  • 배치처리 레이어
    • Batch Core: Job, Step 설정 및 실행, Reader/Writer 처리기능 등, 배치 작업을 처리하는 기능을 제공한다.
    • Batch Execution: Job Repository, Job Runner, Job Launcher 실행방법 및 설정 기능을 제공한다.
    • Batch Support: 병렬처리 기능 및 Listener를 사용한 Event Handling 기능 등을 제공한다.
  • 모바일 화면처리
    • UX/UI Component: 모바일 디바이스에 내의 모바일 브라우저 또는 웹 킷을 통한 화면 구성을 지원하는 UX/UI 컴포넌트를 제공한다.
  • 모바일 디바이스 API
    • Device API: 모바일 하이브리드 어플리케이션 구현 시 Javascript 를 이용하여, Device의 Native 기능에 접근이 가능도록 다양한 API를 제공한다.

*Spring Framework

Spring 프레임워크는 JavaEE 기반의 어플리케이션 개발을 쉽게 해주는 오픈소스 어플리케이션 프레임워크로, 간단한 자바 객체(POJO: Plain Old Java Object) 를 Spring의 경량(Lightweight) 컨테이너를 통해 생성 및 관리하는 빈(Bean)으로 처리해준다.

  • 엔터프라이즈 어플리케이션을 쉽게 구성할 수 있도록 각종 빈(Bean)의 생성 및 관리를 처리하는 경량(Lightweight) 컨테이너 제공
  • Rod Johnson에 의해 개발된 J2EE 애플리케이션 개발을 위한 오픈소스 어플리케이션 프레임워크
  • EJB 명세와 현실의 괴리
    • 원격 호출 기반의 EJB는 객체에 대해서 무거운(heavy weight)모델임
    • 대부분의 개발자들은 스테이트리스 세션 빈과 비동기 방식이 필요한 경우에 한해서 메시지 드리븐 빈만을 사용함
  • EJB의 실패부분
    • 너무 복잡함
    • 저장을 위한 엔티티 빈은 실패작임
    • EJB의 이식성은 서블릿과 같은 다른 J2EE 기술보다 떨어짐
    • 확장성을 보장한다는 EJB의 약속과 달리, 성능이 떨어지며 확장이 어려움
  • Spring framework
    • Spring이라는 이름의 기원은 전통적인 J2EE를 “겨울”에 빗대어 “겨울” 후의 “봄”으로 새로운 시작을 의미함
    • Rod Johnson이 창시한 개발프레임워크
    • EJB가 제공했던 대부분의 기능을 일반 POJO(Plain Old Java Object)를 사용하여 개발할 수 있도록 지원함
    • 엔터프라이즈 어플리케이션 개발의 복잡성을 줄이기 위한 목적으로 개발됨
  • Spring Framework는 어플리케이션을 구성하는 Bean 객체의 생명 주기를 관장하는 Core를 기반으로 DAO, ORM, AOP, JEE, Web으로 구성됨

*IoC Container 개요

  • 프레임워크의 기본적인 기능인 IoC(Inversion of Control) Container 기능을 제공하는 서비스이다.
  • 객체의 생성 시, 객체가 참조하고 있는 타 객체에 대한 의존성을 소스 코드 내부에서 하드 코딩하는 것이 아닌, 소스 코드 외부에서 설정하게 함으로써, 유연성 및 확장성을 향상시킨다.
  • 주요기능: Dependency Injection, Bean Lifecycle Management
  • 오픈소스: Spring Framework 4.0.의 IoC Container를 수정없이 사용함.
  • 의존성 관리의 중요성

IoC_Container_개요.PNG

  • IoC(Inversion of Control)이란?
    • IoC는 Inversion of Control의 약자로 한글로 “제어의 역전” 또는 “역제어”라고 부른다. 어떤 모듈이 제이를 가진다는 것은 “어떤 모듈을 사용할 것인지”, “모듈의 함수는 언제 호출할 것인지” 등을 스스로 결정한다는 것을 의미한다. 이러한 제어가 역전되었다는 것은, 어떤 모듈이 사용할 모듈을 스스로 결정하는 것이 아니라 다른 모듈에게 선택권을 넘겨준다는 것을 의미한다.
  • DI(Dependency Injection)이란?
    • Dependency Injection이란 모듈간의 의존성을 모듈의 외부(컨테이너)에서 주입시켜주는 기능으로 IoC의 한 종류이다.
    • 런타임 시 사용하게 될 의존대상과의 관계를 Spring Framework이 총체적으로 결정하고 그 결정된 의존특징을 런타임 시 부여한다.