슬라이드 1

Size: px
Start display at page:

Download "슬라이드 1"

Transcription

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

2 목차 1. 실행환경소개 3. 데이터처리레이어 4. 화면처리레이어 5. 업무처리레이어 6. 연계통합레이어 7. [ 실습 ] 예제어플리케이션개발 - 2 -

3 1. 실행환경소개 1. 개요 2. 배경 3. 실행환경특징 4. 실행환경적용효과 5. 실행환경구성 6. 실행환경오픈소스소프트웨어사용현황 - 3 -

4 1. 개요 (1/3) 개발프레임워크환경 1. 실행환경소개 전자정부개발프레임워크환경은응용 SW 를위한실행환경, 응용 SW 개발자를위한개발환경, 응 용 SW 운영자를위한운영환경, 개발프레임워크관리자를위한관리환경으로구성됨 전자정부개발프레임워크환경 환경 설명 전자정부개발프레임워크실행환경 전자정부개발프레임워크개발환경 실행환경 업무프로그램의실행에필요한공통모듈및업무공통서비스를제공함 응용 SW 응용 SW 개발자 개발환경 업무프로그램에대한요구사항수집, 분석 / 설계, 구현, 테스트, 배포등의개발 Life-Cycle 전반에대한지원도구를제공함 전자정부개발프레임워크관리환경 전자정부개발프레임워크운영환경 운영환경 업무프로그램을운영하기위한운영도구를제공함 개발프레임워크관리자 응용 SW 운영자 관리환경 개발프레임워크의지속적인개선및유지보수를효과적으로수행하기위한관리도구를제공함 - 4 -

5 1. 개요 (2/3) 개발프레임워크실행환경 1. 실행환경소개 전자정부개발프레임워크실행환경은응용 SW 의구성기반이되며응용 SW 실행시필요한기본기 능을제공하는환경임 전자정부개발프레임워크실행환경은 5 개서비스그룹으로구성되며 34 개서비스를제공함 - 5 -

6 1. 개요 (3/3) 개발프레임워크아키텍처뷰 - 6 -

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

8 3. 실행환경특징 (1/2) 1. 실행환경소개 5개서비스그룹, 34개서비스로구성 화면처리, 업무처리, 데이터처리, 연계통합, 공통기반의 5개서비스그룹으로구성 MVC, IoC 컨테이너, AOP, Data Access, Integration 등의핵심서비스를제공 전자정부프로젝트에최적화된오픈소스소프트웨어선정 34개서비스별최적의오픈소스소프트웨어선정과정을통해 32개오픈소스소프트웨어를선정 경량화된개발프레임워크로서사실상업계표준에가까운 Spring 프레임워크를적용 J2EE 표준을준수하는 Spring 프레임워크를채택 특정업체의 WAS나 DBMS에독립적인환경을제공 DI(Dependency Injection) 방식의의존관계처리 Dependency Injection을통해개체나컴포넌트간의의존성을정의함으로써변경용이성과재사용성을향상 AOP(Aspect Oriented Programming) 지원 트랜잭션, 예외처리와같은공통관심대상을분리하여정의함 - 8 -

9 3. 실행환경특징 (2/2) 1. 실행환경소개 MVC Model2 아키텍처구조제공및다양한 UI 클라이언트연계지원 Spring MVC를기반으로하며, 다양한 UI 클라이언트연계를위한인터페이스를정의함 전자정부개발프레임워크표준연계인터페이스정의 표준연계인터페이스를정의하여연계솔루션에대한의존성을배제하고독립적인어플리케이션개발이가능함 - 9 -

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

11 5. 실행환경구성 (1/8) 1. 실행환경소개 화면처리 업무프로그램과사용자간의인터페이스를담당하는레이어 사용자화면구성, 사용자입력정보검증등의기능제공 업무처리 실행환경 업무프로그램의업무로직을담당하는레이어 업무흐름제어, 에러처리등의기능제공 데이터처리 화면처리 업무처리 데이터처리 연계통합 DB 에대한연결및영속성처리, 트랜잭션관리제공 연계통합 공통기반 타시스템과의연동기능을제공 공통기반 실행환경서비스에서공통적으로사용하는기능제공 환경 서비스그룹

12 5. 실행환경구성 (2/8) 1. 실행환경소개 전자정부개발프레임워크실행환경은 5 개서비스그룹으로구성되며 34 개서비스를제공함 실행환경 화면처리레이어 업무처리레이어 데이터처리레이어 연계통합레이어 MVC Internationalization Process Control DataSource Data Access Naming Service Ajax Support Security Exception Handling ORM TBD Transaction Integration Service UI Adaptor Web Service 공통기반레이어 AOP Cache Compress/Decompress Encryption/Decryption Excel File Handling File Upload/Download FTP Server Security ID Generation IoC Container Logging Mail Marshalling/Unmarshalling Object Pooling Property Resource Scheduling String Util XML Manipulation 공통기반레이어살펴보기 실행환경서비스그룹서비스

13 5. 실행환경구성 (3/8) 1. 실행환경소개 화면처리레이어 서비스명 설명 MVC Internationalization Ajax Support MVC 디자인패턴을적용하여사용자화면을개발할수있도록 MVC 기반구조를제공한다. Internationalization 은다양한지역과언어환경을지원할수있는서비스로, 서버설정및클라이언트브라우저환경에따라자동화된다국어기능을제공한다. Ajax 는대화식웹애플리케이션의제작을위해 HTML 과 CSS, DOM, 자바스크립트, XML, XSLT 등과같은조합을이용하는웹개발기법으로 Ajax 기능지원을위한 Custom Tag Library 를제공한다. Security UI Adaptor 웹응용프로그램작성시발생될수있는웹보안상의취약점 (XSS, SQL Injection 등 ) 에대응하기위한기능을제공한다. 화면레이어의구현방식에따라업무로직레이어가변경되는것을막기위해서, 업무처리 Layer 에서사용할데이터타입을정의하고, 화면레이어에서사용하는 in/out parameter 를해당구현방식에맞게변환해주는기능을제공한다

14 5. 실행환경구성 (4/8) 1. 실행환경소개 업무처리레이어 서비스명 Process Control Exception Handling 설명 비지니스로직과업무흐름의분리를지원하며, XML 등의외부설정으로업무흐름구성을제공하고, 미리정의된프로세스를실행하는기능을제공한다. 응용프로그램의실행과정에서발생하는예외사항 (Exception) 을처리하기위해표준화된방법을제공한다. 연계통합레이어 서비스명 설명 Naming Service 원격에있는모듈및자원등을찾아주는기능을제공한다. Web Service Integration Service 연계등을위하여업무서비스를웹서비스의형태로어플리케이션외부에노출시켜타시스템이나어플리케이션에서서비스를이용할수있도록하는기능을제공한다. 전자정부시스템과의연계를위한공통인터페이스를제공하여, 다양한솔루션연계방식에대한표준화된처리방식을제공한다

15 5. 실행환경구성 (5/8) 1. 실행환경소개 데이터처리레이어 서비스명 Data Access Data Source ORM Transaction 설명 다양한데이터베이스솔루션및데이터베이스접근기술에대한추상화된접근방식을제공하여업무로직과데이터베이스솔루션및접근기술간의종속성을배제하기위한기능을제공한다. 다양한방식의데이터베이스연결을제공하고, 이에대한추상화계층을제공함으로써, 업무로직과데이터베이스연결방식간의종속성을배제하기위한기능을제공한다. 객체모델과관계형데이터베이스간의매핑기능인 ORM(Object-Relational Mapping) 기능을제공함으로서, SQL 이아닌객체를이용한업무로직의작성이가능하도록지원한다. Database Transaction 을처리하기위한서비스로서, Transaction 처리에대한추상화된방법을제공하여일관성있는프로그래밍모델을제공한다

16 5. 실행환경구성 (6/8) 1. 실행환경소개 공통기반레이어 (1/3) 서비스명 설명 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 클라이언트기능을제공한다

17 5. 실행환경구성 (7/8) 1. 실행환경소개 공통기반레이어 (2/3) 서비스명 ID Generation 설명 UUID(Universal Unique Identifier) 표준에따라시스템에서사용하는 ID(Identifier) 를생성하는기능을제공한다. IoC Container 프레임워크의기본기능인 IoC(Inversion of Control) 컨테이너기능을제공한다. Logging Mail Marshalling/Unmarshalling Object Pooling Property Resource System.out.println 문을사용한오버헤드를줄이고, 간편한설정을통해로그를저장하고통제할수있는기능을제공한다. SMTP 표준을준수하며이메일을송신할수있도록이메일클라이언트기능을제공한다. 객체를특정데이터형식으로변환하고, 반대로특정데이터형식으로작성된데이터를객체로변환하는기능을제공한다. Pool 에사용가능한객체가있을경우객체를할당받거나, 없을경우 Pool 크기에따라새로운객체생성및할당하는기능을제공한다. 외부파일이나환경정보를구성하는키와값의쌍을내부적으로저장하고있으며, 어플리케이션이특정키에대한값에접근할수있도록기능을제공한다. 국제화 (Internationalization) 및현지화 (Localization) 를지원하기위한기능으로, 키값을이용하여국가및언어에해당하는메시지를읽어오는기능을제공한다

18 5. 실행환경구성 (8/8) 1. 실행환경소개 공통기반레이어 (3/3) Scheduling 서비스명 Server Security 설명 어플리케이션서버내에서주기적으로발생하거나반복적으로발생하는작업을지원하는기능으로서, 유닉스의크론 (Cron) 명령어와유사한기능을제공한다. 서버함수및데이터접근시보안관리를위해사용자인증및권한관리기능을제공한다. String Util 문자열데이터를다루기위한다양한기능을제공한다. XML Manipulation XML 을생성하고, 읽고, 쓰기위한기능을제공한다

19 6. 실행환경오픈소스소프트웨어사용현황 (1/3) 1. 실행환경소개 실행환경오픈소스소프트웨어사용현황 (1/3) 레이어서비스명오픈소스 SW 확장및개발 화면처리 업무처리 데이터처리 연계통합 Ajax Support Ajax Tags 1.5 Internationalization Spring MVC Spring Custom Tag 외기능확장 Security Apache Commons Validator UI Adaptor 선정하지않음 UI Adaptor 연동가이드 Process Control Web Flow 2.0 Exception Handling Spring Exception 기능확장 Data Access ibatis SQL Maps 2.3 Spring-iBatis 기능확장 DataSource Spring ORM Hibernate 3.4 Transaction Spring Naming Service Support Spring Integration Service 선정하지않음표준인터페이스처리기능개발 Web Service Interface Apache CXF 표준인터페이스를준수하도록웹서비스를확장

20 6. 실행환경오픈소스소프트웨어사용현황 (2/3) 1. 실행환경소개 실행환경오픈소스소프트웨어사용현황 (2/3) 레이어 서비스명 오픈소스 SW 확장및개발 AOP Spring Cache EHCache Compress/Decompress Apache Commons Compress 1.1 Encryption/Decryption Java simplified encryption (jasypt) 1.7 암호화기능확장 Excel Apache POI 3.2, jxls Excel 기능확장 File Handling Jakarta Commons VFS 1.0 File Access 기능확장 공통기반 ( 이어짐 ) File Upload/Download Apache Commons FileUpload FTP Apache Commons Net ID Generation 선정하지않음 UUID 생성기능개발 IoC Container Spring Logging Log4j 1.3 Mail Apache Commons 1.1 Marshalling/Unmarshalling Castor 1.2 Apache XML Beans

21 6. 실행환경오픈소스소프트웨어사용현황 (3/3) 1. 실행환경소개 실행환경오픈소스소프트웨어사용현황 (3/3) 레이어서비스명오픈소스 SW 확장및개발 공통기반 ( 계속 ) Object Pooling Apache Commons Pool Property Spring Property 기능확장 Resource Spring Scheduling Quartz Server Security Spring Security 인증, 권한관리기능확장 String Util Jakarta Regexp 1.5 문자열처리기능확장 XML Manipulation Apache Xerces2 2.9 JDOM 1.1 XML 처리기능확장

22 1. 개요 2. IOC Container 3. AOP 4. Cache 5. Compress/Decompress 6. Encryption/Decryption 7. Excel 8. File Handling 9. File Upload/Download 10. FTP 12. Logging 13. Mail 14. Marshalling/Unmarshalling 15. Object Pooling 16. Property 17. Resource 18. Scheduling 19. Server Security 20. String Util 21. Xml Manipulation 11. ID Generation

23 1. 개요 - 실행환경공통기반레이어 (1/4) 공통기반레이어는전자정부개발프레임워크실행환경레이어중의하나로서실행환경의각 Layer 에서공통적으로사용하는공통기능을제공함 전자정부개발프레임워크실행환경 서비스그룹 Presentation Layer 설명 업무프로그램과사용자간의 Interface 를담당하는 Layer 로서, 사용자화면구성, 사용자입력정보검증등의기능을제공함 Layer Presentation Layer Logic Business Layer Persistence Integration Layer Business Logic Layer Persistence Layer ( 데이터처리 ) 업무프로그램의업무로직을담당하는 Layer 로서, 업무흐름제어, 에러처리등의기능을제공함 데이터베이스에대한연결및영속성처리, 선언적인트랜잭션관리를제공하는 Layer 임 Foundation Layer ( 공통기반레이어 ) Integration Layer 타시스템과의연동기능을제공하는 Layer 임 환경 서비스그룹 Foundation Layer ( 공통기반레이어 ) 실행환경의각 Layer 에서공통적으로사용하는공통기능을제공함

24 1. 개요 - 실행환경공통기반레이어 (2/4) 공통기반레이어는 IoC, AOP, Security 등총 20 개의서비스를제공함 실행환경 화면처리레이어 업무처리레이어 데이터처리레이어 연계통합레이어 MVC Internationalization Process Control DataSource Data Access Naming Service Ajax Support Security Exception Handling 2. 공통기반 ORM 레이어 Transaction Integration Service UI Adaptor Web Service 공통기반레이어 AOP Cache Compress/Decompress Encryption/Decryption Excel File Handling File Upload/Download FTP Server Security ID Generation IoC Container Logging Mail Marshalling/Unmarshalling Object Pooling Property Resource Scheduling String Util XML Manipulation 실행환경서비스그룹서비스

25 1. 개요 - 실행환경공통기반레이어 (3/4) 공통기반레이어는 Spring, Quartz, EHCache 등총 18 종의오픈소스 SW 를사용하고있음 서비스 오픈소스 SW 버전 기존버전 (1.0) AOP Spring Cache EHCache Compress/Decompress Apache Commons Compress Encryption/Decryption Java simplified encryption (JASYPT) Excel Apache POI File Handling Jakarta Commons VFS File Upload/Download Apache Commons FileUpload FTP Apache Commons Net IoC Container Spring Logging Log4j

26 1. 개요 - 실행환경공통기반레이어 (4/4) 공통기반레이어는 Spring, Quartz, EHCache 등총 18 종의오픈소스 SW 를사용하고있음 서비스오픈소스 SW 버전기존버전 (1.0) Mail Apache Commons Marshalling/Unmarshalling Castor Apache XMLBeans Object Pooling Apache Commons Pool Property Spring Resource Spring Scheduling Quartz Server Security Spring Security String Util Jakarta Regexp XML Manipulation Apache Xerces 2 JDOM

27 1. 개요 - Spring Framework(1/3) Spring 프레임워크는 JavaEE 기반의어플리케이션개발을쉽게해주는오픈소스어플리케이션프 레임워크로, 간단한자바객체 (POJO : Plain Old Java Object) 를 Spring 의경량 (Lightweight) 컨 테이너를통해생성및관리하는빈 (Bean) 으로처리해준다. 엔터프라이즈어플리케이션을쉽게구성할수있도록각종빈 (Bean) 의생성및관리를처리하는경량 (Lightweight) 컨테이너제공 Rod Johnson 에의해개발된 J2EE 어플리케이션개발을위한오픈소스어플리케이션프레임워크 * Open Source Catalogue 2007, Optaros (Spring 2.0 기준 )

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

29 1. 개요 - Spring Framework(3/3) Spring Framework 는어플리케이션을구성하는 Bean 객체의생명주기를관장하는 Core 를기반 으로 DAO, ORM, AOP, JEE, Web 으로구성됨

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

31 2. IoC Container 개요 (2/4) 개요 1 업무모듈은 IoC Container 서비스에객체생성을요청한다. 2 IoC Container 는표준프레임워크설정정보에객체생성을위한종속성정보등과같은 IoC Container 설정정보를참조한다. 3 IoC Container 는설정정보에따라객체를생성하여업무모듈에게돌려준다

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

33 2. IoC Container 개요 (4/4) Non-IoC/DI vs IoC/DI Non-IoC/DI IoC/DI Bar Bar Foo package x.y; public class Foo { } public void process() { Bar bar = new Bar(); Baz baz = new Baz(); //... } Baz vs Baz Foo package x.y; public class Foo { public Foo(Bar bar, Baz baz) { //... } } <beans> <bean name="foo" class="x.y.foo"> <constructor-arg> <bean class="x.y.bar"/> </constructor-arg> <constructor-arg> <bean class="x.y.baz"/> </constructor-arg> </bean> </beans>

34 2. IoC Container 기본개념 Container Spring IoC Container는객체를생성하고, 객체간의의존성을이어주는역할을한다. 설정정보 (Configuration Metadata) Spring IoC container가 객체를생성하고, 객체간의의존성을이어줄수있도록 필요한정보를제공한다. 설정정보는기본적으로 XML 형태로작성되며, 추가적으로 Java Annotation을이용하여서도설정이가능하다. Bean Spring IoC Container에의해생성되고관리되는객체를의미한다

35 2. IoC Container Container BeanFactory BeanFactory 인터페이스는 Spring IoC Container 의기능을정의하고있는기본인터페이스이다. Bean 생성및의존성주입, 생명주기관리등의기능을제공한다. ApplicationContext BeanFactory 인터페이스를상속받는 ApplicationContext 는 BeanFactory 가제공하는기능외에 Spring AOP, 메시지리소스처리 ( 국제화에사용됨 ), 이벤트처리등의기능을제공한다. 모든 ApplicationContext 구현체는 BeanFactory 의기능을모두제공하므로, 특별한경우를제외하고는 ApplicationContext 를사용하는것이바람직하다. Spring Framework 는다수의 ApplicationContext 구현체를제공한다. 다음은 ClassPathXmlApplicationContext 를생성하는예제이다. ApplicationContext context = new ClassPathXmlApplicationContext( new String[] {"services.xml", "daos.xml"}); Foo foo = (Foo)context.getBean( foo ); // an Application is also a BeanFactory (via inheritance) BeanFactory factory = context; Spring Container = Bean Factory = ApplicationContext = DI Container = IoC Container

36 2. IoC Container XML 설정 (1/2) XML 설정파일 (1/2) XML 설정파일은 <beans/> element 를 root 로갖는다. 아래는기본적인 XML 설정파일의모습이다. <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <bean id="..." class="..."> <!-- collaborators and configuration for this bean go here --> </bean> <!-- more bean definitions go here --> </beans>

37 2. IoC Container XML 설정 (2/2) XML 설정파일 (2/2) XML 설정은여러개의파일로구성될수있으며, <import/> element 를사용하여다른 XML 설정파일을 import 할수있다. <beans> <import resource="services.xml"/> <import resource="resources/messagesource.xml"/> <import resource="/resources/themesource.xml"/> <bean id="bean1" class="..."/> <bean id="bean2" class="..."/> </beans>

38 2. IoC Container Bean(1/42) Bean 정의 Bean 정의는 Bean 을객체화하고의존성을주입하는등의관리를위한정보를담고있다. XML 설정에서는 <bean/> element 가 Bean 정의를나타낸다. Bean 정의는아래와같은속성을가진다. <bean id="" name="" class="" factory-bean="" factory-method="" lazy-init="" dependency-check="" depends-on="" scope="" init-method="" destroy-method="" autowire="" autowire-candidate="" primary="" abstract="" parent=""> <constructor-arg/> <property/> <lookup-method/> <replaced-method/> <qualifier/> </bean> [Bean 이름 ] Bean 의이름을설정한다. [Bean Class] Bean 의 Class 를설정한다. [Bean 객체화 ] Bean 을객체화하기위한정보를설정한다. [ 의존성주입 ] Bean 의의존성주입을위한정보를설정한다. [ 메소드삽입 ] Bean 의메소드삽입을위한정보를설정한다. [ 의존성검사 ] Bean 간의의존성을검사하기위한정보를설정한다. [Bean Scope] Bean 의 Scope 을설정한다. [Bean 성질변화 ] Bean 의생명주기에서호출된메소드를설정한다. [Autowiring] Bean 들을자동을엮어주기위한정보를설정한다. [Bean 정의상속 ] Bean 정의를상속받기위한정보를설정한다. [Annotation 기반설정 ] Annotation 기반의설정에서 Bean 을찾기위한정보를설정한다

39 2. IoC Container Bean(2/42) Bean 이름 모든 Bean은하나의 id를가지며, 하나이상의 name을가질수있다. id는 container 안에서고유해야한다. <bean id="examplebean" class="example.examplebean"/> <bean name="anotherexample" class="examples.examplebeantwo"/> Bean 은 <alias/> element 를이용하여추가적인 name 을가질수있다. <alias name="fromname" alias="toname"/> Bean Class 모든 Bean은객체화를위한 Java class가필요하다. ( 예외적으로상속의경우 class가없어도된다.) <bean id="examplebean" class="example.examplebean"/> <bean name="anotherexample" class="examples.examplebeantwo"/>

40 2. IoC Container Bean(3/42) Bean 객체화 (1/2) 일반적으로 Bean 객체화는 Java 언어의 new 연산자를사용한다. 이경우별도의설정은필요없다. new 연산자가아닌 static factory 메소드를사용하여 Bean 을객체화할수있다. 이경우 Constructor Injection 방식의의존성주입설정을따른다. <bean id="examplebean" class="examples.examplebean" factory-method="createinstance"/> 자신의 static factory 메소드가아닌별도의 Factory 클래스의 static 메소드를사용하여 Bean 을객체화할수있 다. 이경우역시 Constructor Injection 방식의의존성주입설정을따른다. <!-- the factory bean, which contains a method called createinstance() --> <bean id="servicelocator" class="com.foo.defaultservicelocator"> <!-- inject any dependencies required by this locator bean --> </bean> <!-- the bean to be created via the factory bean --> <bean id="examplebean" factory-bean="servicelocator" factory-method="createinstance"/> ExampleBean examplebean = new ExampleBean(); ExampleBean examplebean = ExampleBean.createInstance(); ExampleBean examplebean = DefaultServiceLocator.createInstance();

41 2. IoC Container Bean(4/42) Bean 객체화 (2/2) <bean/> element의 lazy-init attribute를사용하여 Bean 객체화시기를설정할수있다. 일반적으로 Bean 객체화는 BeanFactory가객체화되는시점에수행된다. 만약, lazy-init attribute 값이 true 인경우, 설정된 Bean의객체가실제로필요하다고요청한시점에객체화가수행된다. lazy-init attribute가설정되어있지않으면기본값을사용한다. Spring Framework의기본값은 false 이다. <bean id="lazy" class="com.foo.expensivetocreatebean" lazy-init="true"/> <bean name="not.lazy" class="com.foo.anotherbean"/> <beans/> element 의 default-lazy-init attribute 를사용하여 XML 설정파일내의모든 Bean 정의에대한 lazyinit attribute 의기본값을설정할수있다. <beans default-lazy-init="true"> <!-- no beans will be pre-instantiated... --> </beans>

42 2. IoC Container Bean(5/42) 의존성주입 (1/16) 의존성주입에는 Constructor Injection과 Setter Injection의두가지방식이있다. Constructor Injection(1/3) Constructor Injection은 argument를갖는생성자를사용하여의존성을주입하는방식이다. <constructor-arg/> element를사용한다. 생성자의 argument와 <constructor-arg/> element는 class가같은것끼리매핑한다. package x.y; public class Foo { } public Foo(Bar bar, Baz baz) { //... } <beans> <bean name="foo" class="x.y.foo"> <constructor-arg> <bean class="x.y.bar"/> </constructor-arg> <constructor-arg> <bean class="x.y.baz"/> </constructor-arg> </bean> </beans>

43 2. IoC Container Bean(6/42) 의존성주입 (2/16) Constructor Injection(2/3) 만약생성자가같은 class 의 argument 를가졌거나 primitive type 인경우 argument 와 <constructor-arg/> element 간의매핑이 불가능하다. 이경우, Type 을지정하거나순서를지정할수있다. package examples; public class ExampleBean { // No. of years to the calculate the Ultimate Answer private int years; // The Answer to Life, the Universe, and Everything private String ultimateanswer; } public ExampleBean(int years, String ultimateanswer) { this.years = years; this.ultimateanswer = ultimateanswer; }

44 2. IoC Container Bean(7/42) 의존성주입 (3/16) Constructor Injection(3/3) Type 지정 순서지정 <bean id="examplebean" class="examples.examplebean"> <constructor-arg type="int" value=" "/> <constructor-arg type="java.lang.string" value="42"/> </bean> <bean id="examplebean" class="examples.examplebean"> <constructor-arg index="0" value=" "/> <constructor-arg index="1" value="42"/> </bean>

45 2. IoC Container Bean(8/42) 의존성주입 (4/16) Setter Injection(1/2) Setter Injection 은 argument 가없는기본생성자를사용하여객체를생성한후, setter 메소드를사용하여의존성을주입하는 방식으로, <property/> element 를사용한다. Class 에 attribute( 또는 setter 메소드명 ) 과 <property/> element 의 name attribute 를사용하여매핑한다. public class ExampleBean { private AnotherBean beanone; private YetAnotherBean beantwo; private int i; public void setbeanone(anotherbean beanone) { this.beanone = beanone; } public void setbeantwo(yetanotherbean beantwo) { this.beantwo = beantwo; } } public void setintegerproperty(int i) { this.i = i; }

46 2. IoC Container Bean(9/42) 의존성주입 (5/16) Setter Injection(2/2) <bean id="examplebean" class="examples.examplebean"> <!-- setter injection using the nested <ref/> element --> <property name="beanone"><ref bean="anotherexamplebean"/></property> <!-- setter injection using the neater 'ref' attribute --> <property name="beantwo" ref="yetanotherbean"/> <property name="integerproperty" value="1"/> </bean> <bean id="anotherexamplebean" class="examples.anotherbean"/> <bean id="yetanotherbean" class="examples.yetanotherbean"/> 매핑규칙은 <property/> element 의 name attribute 의첫문자를알파벳대문자로변경하고그앞에 set 을붙인 setter 메소드 를호출한다. <bean id="examplebean class="examples.examplebean"> <property name="beanone"> <ref bean="anotherexamplebean"/> </property> </bean> public class ExampleBean { public void setbeanone( AnotherBean beanone) { this.beanone = beanone; } }

47 2. IoC Container Bean(10/42) 의존성주입 (6/16) 의존성상세설정 (1/11) <constructor-arg/> element 과 <property/> element 는 명확한값, 다른 Bean 에대한참조, Inner Bean, Collection, Null 등 의값을가질수있다. 명확한값 Java Primitive Type, String 등의명확한값을나타낸다. 사람이인식가능한문자열형태를값으로갖는 <value/> element 를 사용한다. Spring IoC container 가 String 값을해당하는 type 으로변환하여주입해준다. <bean id="mydatasource" class="org.apache.commons.dbcp.basicdatasource destroy-method="close"> <!-- results in a setdriverclassname(string) call --> <property name="driverclassname"> <value>com.mysql.jdbc.driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/mydb</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>masterkaoli</value> </property> </bean>

48 2. IoC Container Bean(11/42) 의존성주입 (7/16) 의존성상세설정 (2/11) 다른 Bean 에대한참조 <ref/> element 를사용하여다른 Bean 객체를참조할수있다. 참조할객체를지정하는방식은 container, local, parent 등 이있다. 1. container : 가장일반적인방식으로같은 container 또는부모 container 에서객체를찾는다. <ref bean="somebean"/> 2. local : 같은 XML 설정파일내에정의된 Bean 객체를찾는다. <ref local="somebean"/> 3. parent : 부모 XML 설정파일내에정의된 Bean 객체를찾는다. <!-- in the parent context --> <bean id="accountservice" class="com.foo.simpleaccountservice"> <!-- insert dependencies as required as here --> </bean> <!-- in the child (descendant) context --> <bean id="accountservice" class="org.springframework.aop.framework.proxyfactorybean"> <property name="target"> </property> </bean> X O <ref parent="accountservice"/>

49 2. IoC Container Bean(12/42) 의존성주입 (8/16) 의존성상세설정 (3/11) Inner Bean <property/> 또는 <constructor-arg/> element 안에있는 <bean/> element 를 inner bean 이라고한다. Inner bean 의 'scope' flag 와 'id', 'name' 은무시된다. Inner bean 의 scope 은항상 prototype 이다. 따라서 inner bean 을다른 bean 에주입하는것은불가 능하다. <bean id="outer" class="..."> <!-- instead of using a reference to a target bean, simply define the target bean inline --> <property name="target"> <bean class="com.example.person"> <!-- this is the inner bean --> <property name="name" value="fiona Apple"/> <property name="age" value="25"/> </bean> </property> </bean>

50 2. IoC Container Bean(13/42) 의존성주입 (9/16) 의존성상세설정 (4/11) Collection(1/2) Java Collection 타입인 List, Set, Map, Properties 를표현하기위해 <list/>, <set/>, <map/>, <props/> element 가사용된다. map 의 key 와 value, set 의 value 의값은아래 element 중하나가될수있다. bean ref idref list set map props value null <bean id="morecomplexobject" class="example.complexobject"> <!-- results in a setadmin s(java.util.properties) call --> <property name="admin s"> <props> <prop key="administrator">administrator@example.org</prop> <prop key="support">support@example.org</prop> <prop key="development">development@example.org</prop> </props> </property> <!-- results in a setsomelist(java.util.list) call --> <property name="somelist"> <list> <value>a list element followed by a reference</value> <ref bean="mydatasource" /> </list> </property>

51 2. IoC Container Bean(14/42) 의존성주입 (10/16) 의존성상세설정 (5/11) Collection(2/2)... <!-- results in a setsomemap(java.util.map) call --> <property name="somemap"> <map> <entry> <key><value>an entry</value></key> <value>just some string</value> </entry> <entry> <key><value>a ref</value></key> <ref bean="mydatasource" /> </entry> </map> </property> <!-- results in a setsomeset(java.util.set) call --> <property name="someset"> <set> <value>just some string</value> <ref bean="mydatasource" /> </set> </property> </bean>

52 2. IoC Container Bean(15/42) 의존성주입 (11/16) 의존성상세설정 (6/11) Null Java 의 null 값을사용하기위해서 <null/> element 를사용한다. Spring IoC container 는 value 값이설정되어있지않은경우 빈문자열 ( ) 로인식한다. <bean class="examplebean"> <property name=" "><value/></property> </bean> 위 ExampleBean 의 값은 이다. 아래는 의값이 null 인예제이다. <bean class="examplebean"> <property name=" "><null/></property> </bean>

53 2. IoC Container Bean(16/42) 의존성주입 (12/16) 의존성상세설정 (7/11) 간편한표기 1 <property/>, <constructor-arg/>, <entry/> element의 <value/> element는 value attribute로대체될수있다. <property name="myproperty"> <value>hello</value> </property> <constructor-arg> <value>hello</value> </constructor-arg> <entry key="mykey"> <value>hello</value> </entry> = = = <property name="myproperty" value="hello"/> <constructor-arg value="hello"/> <entry key="mykey" value="hello"/>

54 2. IoC Container Bean(17/42) 의존성주입 (13/16) 의존성상세설정 (8/11) 간편한표기 2 <property/>, <constructor-arg/> element의 <ref/> element는 ref attribute로대체될수있다. <property name="myproperty"> <ref bean="mybean"> </property> <constructor-arg> <ref bean="mybean"> </constructor-arg> = = <property name="myproperty" ref="mybean"/> <constructor-arg ref="mybean"/> 간편한표기 3 <entry/> element 의 'key, ref element 는 'key-ref, 'value-ref' attribute 로대체될수있다. <entry> <key> <ref bean="mykeybean" /> </key> <ref bean="myvaluebean" /> </entry> = <entry key-ref="mykeybean value-ref="myvaluebean"/>

55 2. IoC Container Bean(18/42) 의존성주입 (14/16) 의존성상세설정 (9/11) p-namespace(1/2) <property/> element 대신 p-namespace 를사용하여 XML 설정을작성할수있다. 아래 classic bean 과 p-namespace bean 은 동일한 Bean 설정이다. <beans xmlns=" xmlns:xsi=" xmlns:p=" xsi:schemalocation=" <bean name="classic" class="com.example.examplebean"> <property name=" " </bean> <bean name="p-namespace" class="com.example.examplebean" </beans>

56 2. IoC Container Bean(19/42) 의존성주입 (15/16) 의존성상세설정 (10/11) p-namespace(2/2) Attribute 이름끝에 -ref 를붙이면참조로인식한다. <beans xmlns=" xmlns:xsi=" xmlns:p=" xsi:schemalocation=" <bean name="john-classic" class="com.example.person"> <property name="name" value="john Doe"/> <property name="spouse" ref="jane"/> </bean> <bean name="john-modern" class="com.example.person" p:name="john Doe" p:spouse-ref="jane"/> <bean name="jane" class="com.example.person"> <property name="name" value="jane Doe"/> </bean> </beans>

57 2. IoC Container Bean(20/42) 의존성주입 (16/16) 의존성상세설정 (11/11) Compound property name 복합형식의 property 이름도사용할수있다. <bean id="foo" class="foo.bar"> <property name="fred.bob.sammy" value="123" /> </bean>

58 2. IoC Container Bean(21/42) Bean Scope(1/4) Bean Scope 은객체가유효한범위로아래 5 가지의 scope 이있다. Spring Bean 의기본 Scope 는 singleton 이다. Scope 설명 singleton 하나의 Bean 정의에대해서 Spring IoC Container 내에단하나의객체만존재한다. prototype 하나의 Bean 정의에대해서다수의객체가존재할수있다. request session global session 하나의 Bean 정의에대해서하나의 HTTP request 의생명주기안에단하나의객체만존재한다 ; 즉, 각각의 HTTP request 는자신만의객체를가진다. Web-aware Spring ApplicationContext 안에서만유효하다. 하나의 Bean 정의에대해서하나의 HTTP Session 의생명주기안에단하나의객체만존재한다. Web-aware Spring ApplicationContext 안에서만유효하다. 하나의 Bean 정의에대해서하나의 global HTTP Session 의생명주기안에단하나의객체만존재한다. 일반적으로 portlet context 안에서유효하다. Web-aware Spring ApplicationContext 안에서만유효하다

59 2. IoC Container Bean(22/42) Bean Scope(2/4) Singleton Scope Bean 이 singleton 인경우, 단하나의객체만공유된다. Spring의기본 scope은 singleton 이다. 설정하는방법은아래와같다. <bean id="accountservice" class="com.foo.defaultaccountservice"/> <bean id="accountservice" class="com.foo.defaultaccountservice" scope="singleton"/> <bean id="accountservice" class="com.foo.defaultaccountservice" singleton="true"/>

60 2. IoC Container Bean(23/42) Bean Scope(3/4) Prototype Scope Singleton 이아닌 prototype scope 의형태로정의된 bean 은필요한매순간새로운 bean 객체가생성된다. 설정하는방법은아래와같다. <bean id="accountservice" class="com.foo.defaultaccountservice" scope="prototype"/> <bean id="accountservice" class="com.foo.defaultaccountservice" singleton="false"/>

61 2. IoC Container Bean(24/42) Bean Scope(4/4) 기타 Scope request, session, global session은 Web 기반어플리케이션에서만유효한 scope이다. Request Scope <bean id="loginaction" class="com.foo.loginaction" scope="request"/> 위정의에따라, Spring container는모든 HTTP request에대해서 'loginaction' bean 정의에대한 LoginAction 객체를생성할것이다. 즉, 'loginaction' bean은 HTTP request 수준에한정된다 (scoped). 요청에대한처리가완료되었을때, 한정된 (scoped) bean도폐기된다. Session Scope <bean id="userpreferences" class="com.foo.userpreferences" scope="session"/> 위정의에따라, Spring container는하나의 HTTP Session 일생동안 'userpreferences' bean 정의에대한 UserPreferences 객체를생성할것이다. 즉, 'userpreferences' bean은 HTTP Session 수준에한정된다 (scoped). HTTP Session이폐기될때, 한정된 (scoped) bean도폐기된다. Global Session Scope <bean id= userpreferences" class="com.foo.userpreferences" scope="globalsession"/> global session scope은 HTTP Session scope과비슷하지만단지 portlet-based web 어플리케이션에서만사용할수있다. Portlet 명세 (specifications) 는 global Session을하나의 portlet web 어플리케이션을구성하는여러 portlet들모두가공유하는것으로정의하고있다. global session scope으로설정된 bean은 global portlet Session의일생에한정된다

62 2. IoC Container Bean(25/42) Bean 성질변화 (1/4) Lifecycle Callback Spring IoC Container는 Bean의각생명주기에호출되도록설정된메소드를호출해준다. Initialization callback org.springframework.beans.factory.initializingbean interface를구현하면 bean에필요한모든 property를설정한후, 초기화작업을수행한다. InitializingBean interface는다음메소드를명시하고있다. void afterpropertiesset() throws Exception; 일반적으로, InitializingBean interface 의사용을권장하지않는다. 왜냐하면 code 가불필요하게 Spring 과결합되기 (couple) 때 문이다. 대안으로, bean 정의는초기화메소드를지정할수있다. XML 기반설정의경우, 'init-method' attribute 를사용한다. public class ExampleBean { } public void init() { // do some initialization work } <bean id="exampleinitbean" class="examples.examplebean" init-method="init"/>

63 2. IoC Container Bean(26/42) Bean 성질변화 (2/4) Lifecycle Callback Destruction callback org.springframework.beans.factory.disposablebean interface를구현하면, container가파괴될때 bean이 callback를받을수있다. DisposableBean interfce는다음메소드를명시하고있다. void destroy() throws Exception; 일반적으로, DisposableBean interface의사용을권장하지않는다. 왜냐하면 code가불필요하게 Spring과결합되기 (couple) 때문이다. 대안으로, bean 정의는초기화메소드를지정할수있다. XML 기반설정의경우, 'destroy-method' attribute를사용한다. public class ExampleBean { } public void cleanup() { // do some destruction work (like releasing pooled connections) } <bean id="exampleinitbean" class="examples.examplebean" destroy-method="cleanup"/>

64 2. IoC Container Bean(27/42) Bean 성질변화 (3/4) Lifecycle Callback 기본 Instantiation & Destruction callback Spring IoC container 레벨에서기본 Instantiation & Destruction callback 메소드를지정할수있다. <beans/> element 의 default-init-method, default-destroy-method attribute 를사용한다. <beans default-init-method="init" default-destroy-method="destroy"> <bean id="blogservice" class="com.foo.defaultblogservice"> <property name="blogdao" ref="blogdao" /> </bean> </beans>

65 2. IoC Container Bean(28/42) Bean 성질변화 (4/4) Knowing who you are BeanFactoryAware org.springframework.beans.factory.beanfactoryaware interface를구현한 class는자신을생성한 BeanFactory를참조할수있다. public interface BeanFactoryAware { } void setbeanfactory(beanfactory beanfactory) throws BeansException; BeanFactoryAware interface 를사용하면, 자신을생성한 BeanFactory 를알수있고, 프로그램적으로다른 bean 을검색할수 있다. 하지만이방법은 Spring 과의결합을발생시키고, Inversion of Control 스타일에도맞지않으므로피하는것이좋다. 대 안으로는 org.springframework.beans.factory.config.objectfactorycreatingfactorybean 을사용할수있다

66 2. IoC Container Annotaion XML 설정파일을사용하는대신자바어노테이션을사용할수있음 ( 자바 5 이상 ) annotation의사용으로설정파일을간결화하고, View 페이지와객체또는메소드의맵핑을명확하게할수있다

67 2. IoC Container Bean(29/42) Autowiring Spring IoC container는서로관련된 Bean 객체를자동으로엮어줄수있다. 자동엮기 (autowiring) 는각각의 bean 단위로설정되며, 자동엮기기능을사용하면 <property/> 나 <constructor-arg/> 를지정할필요가없어지므로, 타이핑일줄일수있다. 자동엮기에는 5가지모드가있으며, XML 기반설정에서는 <bean/> element의 'autowire' attribute를사용하여설정할수있다. Scope no 설명 자동엮기를사용하지않는다. Bean 에대한참조는 <ref/> element 를사용하여지정해야만한다. 이모드가기본 (default) 이다. byname Property 의이름으로자동엮기를수행한다. Property 의이름과같은이름을가진 bean 을찾아서엮어준다. bytype Property 의타입으로자동엮기를수행한다. Property 의타입과같은타입을가진 bean 을찾아서엮어준다. 만약같은타입을가진 bean 이 container 에둘이상존재할경우 exception 이발생한다. 만약같은타입을가진 bean 이존재하지않는경우, 아무일도발생하지않는다. 즉, property 에는설정되지않는다. constructor autodetect <bean/> element 의 'autowire-candidate' attribute 값을 'false' 로설정함으로써, 대상 bean 이다른 bean 과자동 으로엮이는것을방지한다. bytype 과유사하지만, 생성자 argument 에만적용된다. 만약같은타입의 bean 이존재하지않거나둘이상존재할경우, exception 이발생한다. Bean class 의성질에따라 constructor 와 bytype 모드중하나를선택한다. 만약 default 생성자가존재하면, bytype 모드가적용된다

68 2. IoC Container Bean(30/42) Annotation 기반설정 (1/12) Spring 은 Java Annotation 을사용하여 Bean 정의를설정할수있다. 이기능을사용하기위해서는다음 namespace 와 element 를추가해야한다. <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:context=" xsi:schemalocation=" </beans> <context:annotation-config/>

69 2. IoC Container Bean(31/42) Annotation annotation 은 setter annotation 이설정된 property 는 <property/>, <constructorarg/> element 를통해서명시적으로값이설정되거나, autowiring 에의해서값이설정되어야한다. public class SimpleMovieLister { private MovieFinder public void setmoviefinder(moviefinder moviefinder) { this.moviefinder = moviefinder; } } //

70 2. IoC Container Bean(32/42) Annotation annotation 은자동으로엮을 property 를지정하기위해사용한다. setter 메소드, 일반적인메소드, 생성자, field 등에적용된다. Setter 메소드 public class SimpleMovieLister { private MovieFinder public void setmoviefinder(moviefinder moviefinder) { this.moviefinder = moviefinder; } } //

71 2. IoC Container Bean(33/42) Annotation 기반설정 일반적인메소드 public class MovieRecommender { private MovieCatalog moviecatalog; private CustomerPreferenceDao public void prepare(moviecatalog moviecatalog, CustomerPreferenceDao customerpreferencedao) { this.moviecatalog = moviecatalog; this.customerpreferencedao = customerpreferencedao; } } //

72 2. IoC Container Bean(34/42) Annotation 기반설정 생성자및 field public class MovieRecommender private MovieCatalog moviecatalog; private CustomerPreferenceDao public MovieRecommender(CustomerPreferenceDao customerpreferencedao) { this.customerpreferencedao = customerpreferencedao; } } //

73 2. IoC Container Bean(35/42) Annotation annotation 만을사용하는경우, 같은 Type 의 Bean 이둘이상존재할때문제가발생한다. annotation 을사용하여찾을 Bean annotation 은 field 뿐아니라생성자또 는메소드의 parameter 에도사용할수있다. Field public class private MovieCatalog moviecatalog; } //

74 2. IoC Container Bean(36/42) Annotation 기반설정 메소드 Parameter public class MovieRecommender { private MovieCatalog moviecatalog; private CustomerPreferenceDao public void prepare(@qualifier("main") MovieCatalog moviecatalog, CustomerPreferenceDao customerpreferencedao) { this.moviecatalog = moviecatalog; this.customerpreferencedao = customerpreferencedao; } } //

75 2. IoC Container Bean(37/42) Annotation annotation 의값으로사용되는 qualifier 는 <bean/> element 의 <qualifier/> element 로설정한다. <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:context=" xsi:schemalocation=" <context:annotation-config/> <bean class="example.simplemoviecatalog"> <qualifier value="main"/> <!-- inject any dependencies required by this bean --> </bean> <bean class="example.simplemoviecatalog"> <qualifier value="action"/> <!-- inject any dependencies required by this bean --> </bean> <bean id="movierecommender" class="example.movierecommender"/> </beans>

76 2. IoC Container Bean(38/42) Annotation annotation의 name 값으로대상 annotation은 field 또는메소드에사용할수있다. public class SimpleMovieLister { private MovieFinder moviefinder; public void setmoviefinder(moviefinder moviefinder) { this.moviefinder = moviefinder; annotation 에 name 값이없을경우, field 명또는메소드명을이용하여대상 bean 을찾는다. public class SimpleMovieLister { private MovieFinder moviefinder; public void setmoviefinder(moviefinder moviefinder) { this.moviefinder = moviefinder; }

77 2. IoC Container Bean(39/42) Annotation 기반설정 & 는각각 Instantiation callback, Destruction callback 메소드를지정하기위해사용한다. public class CachingMovieLister public void populatemoviecache() { // populates the movie cache upon initialization... } public void clearmoviecache() { // clears the movie cache upon destruction... }

78 2. IoC Container Bean(40/42) Annotation 기반설정 (10/12) Auto-detecting components(1/3) @Controller annotation 을사용하여, 각각 Persistence, Service, Presentation @Controller annotation 을 상속받고있다. Spring IoC Container annotation( 또는자손 ) 으로지정된 class 를 XML Bean 정의없이자동 으로찾을수있다. <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:context=" xsi:schemalocation=" </beans> <context:component-scan base-package="org.example"/> <context:component-scan/> element 의 base-package attribute 는컴포넌트를찾을기본 package 이다., 를사용하여다수의 기본 package 를지정할수있다

79 2. IoC Container Bean(41/42) Annotation 기반설정 (11/12) Auto-detecting annotation 의 name 값으로 bean 의이름을지정할수있다. 아래예제의 Bean 이름은 mymovielister public class SimpleMovieLister { //... } 만약 name 값을지정하지않으면, class 이름의첫문자를소문자로변환하여 Bean 이름을자동으로생성한다. 아래예제의 Bean 이름은 moviefinderimpl public class MovieFinderImpl implements MovieFinder { //... }

80 2. IoC Container Bean(42/42) Annotation 기반설정 (12/12) Auto-detecting components(3/3) Scope annotation 을사용하여, 자동으로찾은 Bean 의 public class MovieFinderImpl implements MovieFinder { //... } Qualifier annotation 을사용하여, 자동으로찾은 Bean 의 public class ActionMovieCatalog implements MovieCatalog { //... }

81 2. IoC Container ApplicationContext(1/2) ApplicationContext for web application(1/2) Spring 은 Web Application 에서 ApplicationContext 를쉽게사용할수있도록각종 class 들을제공하고있다. Servlet 2.4 이상 Servlet 2.4 specification 부터 Listener 를사용할수있다. Listener 를사용하여 ApplicationContext 를설정하기위해서 web.xml 파일에다음설정을추가한다. <context-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/daocontext.xml /WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener> contextparam 의 contextconfiglocation 값은 Spring XML 설정파일의위치를나타낸다

82 2. IoC Container ApplicationContext(2/2) ApplicationContext for web application(2/2) Servlet 2.3 이하 Servlet 2.3 이하에서는 Listener 를사용할수없으므로, Servlet 를사용한다. web.xml 파일에다음설정을추가한다. <context-param> <param-name>contextconfiglocation</param-name> <param-value>/web-inf/daocontext.xml /WEB-INF/applicationContext.xml</param-value> </context-param> <servlet> <servlet-name>context</servlet-name> <servlet-class>org.springframework.web.context.contextloaderservlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>

83 LAB 201-ioc LAB 201-ioc 실습

84 2. 기타 property (1/2) Bean 설정파일사용 Bean 설정파일 <bean name="propertyservice" class="egovframework.rte.fdl.property.impl.egovpropertyserviceimpl" destroy-method="destroy"> <property name="properties"> <map> <entry key="aaaa" value="1234"/> </map> </property> </bean> protected EgovPropertyService propertyservice public void testpropertiesservice() throws Exception { assertequals("1234",propertyservice.getstring("aaaa")); }

85 2. 기타 property (2/2) 외부설정파일사용 (properties 파일 ) 스프링 Bean 설정파일에그파일위치를설정하여사용할수있다. <bean name="propertyservice" class="egovframework.rte.fdl.property.impl.egovpropertyserviceimpl" destroy-method="destroy"> <property name="extfilename"> <set> <map> <entry key="encoding" value="utf-8"/> <entry key="filename" value="file:./src/**/refresh-resource.properties"/> </map> <value>classpath*:properties/resource.properties</value> </set> </property> </bean> AAAA = protected EgovPropertyService propertyservice public void testpropertiesservice() throws Exception { assertequals("1234",propertyservice.getstring("aaaa")); } properties 파일의내용을수정하고, propertyservice.refreshpropertyfiles() 를호출하여실시간으로갱신할수있다

86 2. 기타 Resource (1/2) Bean 설정 메시지 properties 파일은 classpath 상에서 egovframework-message.properties 파일이다. <bean name="messagesource" class="org.springframework.context.support.resourcebundlemessagesource"> <property name="usecodeasdefaultmessage"> <value>true</value> </property> <property name="basenames"> <list> <value>egovframework-message</value> </list> </property> </bean> properties 파일 # egovframework-message.properties 파일 Globals.DbType = mysql MessageSource messagesource ; String getmsg = messagesource.getmessage("resource.basic.msg1", null, Locale.getDefault() ); assertequals("get Message Success!", getmsg, "message1");

87 2. 기타 Resource (2/2) Message Locale 사용 properties 파일 # egovframework-message_ko.properties 파일 resource.locale = 메시지 1 # govframework-message_en.properties 파일 resource.locale = en_message1 자바소스 String getmsg = messagesource.getmessage("resource.locale.msg1", null, Locale.KOREAN ); assertequals("get Message Success!", getmsg, " 메시지 1"); String getmsg = messagesource.getmessage("resource.locale.msg1", null, Locale.ENGLISH ); assertequals("get Message Success!", getmsg, "en_message1"); Message Parameter resource.basic.msg3=message {0} {1} Object[] parameter = { new String("1"), new Integer(2) }; String getmsg = messagesource.getmessage("resource.basic.msg3", parameter, Locale.getDefault() ); assertequals("get Message Success!", getmsg, "message 1 2");

88 2. IoC Container 참고자료 The Spring Framework - Reference Documentation / Chapter 3. The IoC container Inversion of Control Inversion of Control Containers and the Dependency Injection pattern

89 3. AOP - 개요 (1/7) 서비스개요 객체지향프로그래밍 (Object Oriented Programming) 을보완하는개념으로어플리케이션을객체지향적으로모듈화하여작성하더라도다수의객체들에분산되어중복적으로존재하는공통관심사가여전히존재한다. AOP는이를횡단관심으로분리하여핵심관심과엮어서처리할수있는방법을제공한다. AOP 적용 객체지향개발 객체지향 + AOP 개발

90 3. AOP - 개요 (1/7) 서비스개요 객체지향프로그래밍 (Object Oriented Programming) 을보완하는개념으로어플리케이션을객체지향적으로모듈화하여작성하더라도다수의객체들에분산되어중복적으로존재하는공통관심사가여전히존재한다. AOP는이를횡단관심으로분리하여핵심관심과엮어서처리할수있는방법을제공한다. 로깅, 보안, 트랜잭션등의공통적인기능의활용을기존의비즈니스로직에영향을주지않고모듈화처리를지원하는프로그래밍기법

91 3. AOP - 개요 (2/7) 주요개념 Join Point 횡단관심 (Crosscutting Concerns) 모듈이삽입되어동작할수있는실행가능한특정위치를말함 메소드호출, 메소드실행자체, 클래스초기화, 객체생성시점등 Pointcut Pointcut은어떤클래스의어느 JoinPoint를사용할것인지를결정하는선택기능을말함 가장일반적인 Pointcut은 특정클래스에있는모든메소드호출 로구성된다. 애스펙트 (Aspect) Advice와 Pointcut의조합 어플리케이션이가지고있어야할로직과그것을실행해야하는지점을정의한것 Advice Advice는관점 (Aspect) 의실제구현체로결합점에삽입되어동작할수있는코드이다 Advice 는결합점 (JoinPoint) 과결합하여동작하는시점에따라 before advice, after advice, around advice 타입으로구분된다 특정 Join point에실행하는코드 Weaving Pointcut에의해서결정된 JoinPoint에지정된 Advice를삽입하는과정 Weaving은 AOP가기존의 Core Concerns 모듈의코드에전혀영향을주지않으면서필요한 Crosscutting Concerns 기능을추가할수있게해주는핵심적인처리과정임

92 3. AOP - 개요 (3/7) 주요개념 Advice, JoinPoint, Pointcut Pointcut JoinPoint Advice

93 3. AOP - 개요 (4/7) 주요개념 Pointcut 예제 - bean() Pointcut 을이용하여종적및횡적으로빈을선택

94 3. AOP - 개요 (5/7) 주요개념 Weaving 방식 컴파일시엮기 : 별도컴파일러를통해핵심관심사모듈의사이사이에관점 (Aspect) 형태로만들어진횡단관심사코드들이삽입되어관점 (Aspect) 이적용된최종바이너리가만들어지는방식이다. (ex. AspectJ, ) 클래스로딩시엮기 : 별도의 Agent를이용하여 JVM이클래스를로딩할때해당클래스의바이너리정보를변경한다. 즉, Agent가횡단관심사코드가삽입된바이너리코드를제공함으로써 AOP를지원하게된다. (ex. AspectWerkz, ) 런타임엮기 : 소스코드나바이너리파일의변경없이프록시를이용하여 AOP를지원하는방식이다. 프록시를통해핵심관심사를구현한객체에접근하게되는데, 프록시는핵심관심사실행전후에횡단관심사를실행한다. 따라서프록시기반의런타임엮기의경우메소드호출시에만 AOP를적용할수있다는제한점이있다. (ex. Spring AOP, ) Advice 결합점결합타입 Before advice: joinpoint 전에수행되는 advice After returning advice: joinpoint가성공적으로리턴된후에동작하는 advice After throwing advice: 예외가발생하여 joinpoint가빠져나갈때수행되는 advice After (finally) advice: join point를빠져나가는 ( 정상적이거나예외적인반환 ) 방법에상관없이수행되는 advice Around advice: joinpoint 전, 후에수행되는 advice

95 3. AOP - 개요 (6/7) 주요기능 횡단관심 (CrossCutting Concern) 모듈이삽입되어동작할수있도록지정하는 JointPoint 기능 횡단관심모듈을특정 JointPoint에사용할수있도록지정하는 Pointcut 기능 Pointcut 지정을위한패턴매칭표현식 Pointcut에서수행해야하는동작을지정하는 Advice 기능 Pointcut에의해서결정된 JoinPoint에지정된 Advice를삽입하여실제 AOP 방식대로동작

96 3. AOP - 개요 (7/7) 장점 중복코드의제거 횡단관심 (CrossCutting Concerns) 을여러모듈에반복적으로기술되는현상을방지 비즈니스로직의가독성향상 핵심기능코드로부터횡단관심코드를분리함으로써비즈니스로직의가독성향상 생산성향상 비즈니스로직의독립으로인한개발의집중력을높임 재사용성향상 횡단관심코드는여러모듈에서재사용될수있음 변경용이성증대 횡단관심코드가하나의모듈로관리되기때문에이에대한변경발생시용이하게수행할수있음

97 3. AOP - 설명 (1/17) Spring의 AOP 지원 스프링은프록시기반의런타임 Weaving 방식을지원한다. 스프링은 AOP 어노테이션을이용한 AOP 구현 XML Schema를이용한 AOP 구현 스프링 API를이용한 AOP 구현 실행환경은 XML Schema 를이용한 AOP 구현방법을사용한다

98 3. AOP - 설명 (2/17) XML 스키마를이용한 AOP 지원 (1/11) 개요 Java 5 버전을사용할수없거나, XML 기반설정을선호하는경우사용한다. AOP 선언을한눈에파악할수있다. 실행환경은 XML 스키마를이용한 AOP를사용한다

99 3. AOP - 설명 (3/17) XML 스키마를이용한 AOP 지원 (2/11) Aspect 정의하기 Advice 정의 JoinPoint 정의 <bean id="adviceusingxml" class="egovframework.rte.fdl.aop.sample.adviceusingxml" /> Pointcut 정의 <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> Aspect 정의 <bean id="advicesample" class="egovframework.rte.fdl.aop.sample.advicesample" />

100 3. AOP - 설명 (4/17) XML 스키마를이용한 AOP 지원 (3/11) Advice 정의하기 before advice public class AdviceUsingXML { public void beforetargetmethod(joinpoint thisjoinpoint) { Class clazz = thisjoinpoint.gettarget().getclass(); String classname = thisjoinpoint.gettarget().getclass().getsimplename(); String methodname = thisjoinpoint.getsignature().getname(); // 대상메서드에대한로거를얻어해당로거로현재 class, method 정보로깅 Log logger = LogFactory.getLog(clazz); logger.debug(classname + "." + methodname + " executed."); } }

101 3. AOP - 설명 (5/17) XML 스키마를이용한 AOP 지원 (4/11) Advice 정의하기 After returning advice After returing advice 는정상적으로메소드가실행될때수행된다. public class AdviceUsingXML { } public void afterreturningtargetmethod(joinpoint thisjoinpoint, Object retval) { System.out.println("AspectUsingAnnotation.afterReturningTargetMethod executed. + return value is [ + retval + "]"); }

102 3. AOP - 설명 (6/17) XML 스키마를이용한 AOP 지원 (5/11) Advice 정의하기 After throwing advice After throwing advice 는메소드가수행중예외사항을반환하고종료하는경우수행된다. public class AdviceUsingXML {... public void afterthrowingtargetmethod(joinpoint thisjoinpoint, Exception exception) throws Exception{ System.out.println("AdviceUsingXML.afterThrowingTargetMethod executed."); System.err.println(" 에러가발생했습니다.", exception); throw new BizException(" 에러가발생했습니다.", exception); }... }

103 3. AOP - 설명 (7/17) XML 스키마를이용한 AOP 지원 (6/11) Advice 정의하기 After (finally) advice After (finally) advice 는메소드수행후무조건수행된다. After advice 는정상종료와예외발생경우를모두처리해야하는경우에사용된다 ( 예 : 리소스해제작업 ) public class AdviceUsingXML { } public void aftertargetmethod(joinpoint thisjoinpoint) { System.out.println("AspectUsingAnnotation.afterTargetMethod executed."); }

104 3. AOP - 설명 (8/17) XML 스키마를이용한 AOP 지원 (7/11) Advice 정의하기 Around advice Around advice 는메소드수행전후에수행된다. Return값을가공하기위해서는 Around를사용해야한다. public class AdviceUsingXML { public Object aroundtargetmethod(proceedingjoinpoint thisjoinpoint) throws Throwable { System.out.println("AspectUsingAnnotation.aroundTargetMethod start."); long time1 = System.currentTimeMillis(); Object retval = thisjoinpoint.proceed(); System.out.println("ProceedingJoinPoint executed. return value is [ + retval + "]"); retval = retval + "(modified)"; System.out.println("return value modified to [" + retval + "]"); } } long time2 = System.currentTimeMillis(); System.out.println("AspectUsingAnnotation.aroundTargetMethod end. Time(" + (time2 - time1) + ")"); return retval;

105 3. AOP - 설명 (9/17) XML 스키마를이용한 AOP 지원 (8/11) Aspect 실행하기 정상실행의경우 public class AnnotationAspectTest = advicesample") AdviceSample public void testadvice () throws Exception { SampleVO vo = new SampleVO();.. String resultstr = annotationadvicesample.somemethod(vo); assertequals("somemethod executed.(modified)", resultstr); } }

106 3. AOP - 설명 (10/17) XML 스키마를이용한 AOP 지원 (9/11) Aspect 실행하기 정상실행인경우 콘솔로그출력 Advice 적용순서 1.before 2.around ( 대상메소드수행전 ) 3. 대상메소드 4.after-returning 5.after(finally) 6.around ( 대상메소드수행후 )

107 3. AOP - 설명 (11/17) XML 스키마를이용한 AOP 지원 (10/11) Aspect 실행하기 예외발생의경우 public class AnnotationAspectTest = advicesample") AdviceSample public void testadvicewithexception() throws Exception { SampleVO vo = new SampleVO(); // exception 을발생하도록플래그설정 vo.setforceexception(true);.. try { String resultstr = annotationadvicesample.somemethod(vo); } } fail( exception 을강제로발생시켜이라인이수행될수없습니다."); } catch(exception e) {... }

108 3. AOP - 설명 (12/17) XML 스키마를이용한 AOP 지원 (11/11) Aspect 실행하기 예외발생의경우 콘솔로그출력 Advice 적용순서 1.before 2.around ( 대상메소드수행전 ) 3. 대상메소드 (ArithmeticException 예외가발생한다 ) 4.afterThrowing 5.after(finally)

109 3. AOP - 설명 (13/17) Pointcut 지정자 execution: 메소드실행결합점 (join points) 과일치시키는데사용된다. within: 특정타입에속하는결합점을정의한다. this: 빈참조가주어진타입의인스턴스를갖는결합점을정의한다. target: 대상객체가주어진타입을갖는결합점을정의한다. args: 결합점의대상객체가주어진어노테이션을갖는결합점을정의한다. Pointcut 표현식조합 '&& : anypublicoperation() && intrading() ' ' : bean(*datasource) bean(*datasource) '!' :!bean(accountrepository)

110 3. AOP - 설명 (14/17) Pointcut 정의예제 execution(public * *(..)) execution(* set*(..)) Pointcut execution(* com.xyz.service.accountservice.*(..)) execution(* com.xyz.service.*.*(..)) execution(* com.xyz.service..*.*(..)) within(com.xyz.service.*) within(com.xyz.service..*) this(com.xyz.service.accountservice) @annotation(org.springframework.transaction.annotation.transaction bean(accountrepository)!bean(accountrepository) bean(*) bean(account*) bean(*repository) bean(accounting/*) bean(*datasource) bean(*datasource) public 메소드실행 선택된 Joinpoints 이름이 set 으로시작하는모든메소드명실행 AccountService 인터페이스의모든메소드실행 service 패키지의모든메소드실행 service 패키지와하위패키지의모든메소드실행 service 패키지내의모든결합점 service 패키지및하위패키지의모든결합점 AccountService 인터페이스를구현하는프록시개체의모든결합점 AccountService 인터페이스를구현하는대상객체의모든결합점 하나의파라미터를갖고전달된인자가 Serializable 인모든결합점 어노테이션을갖는모든결합점 어노테이션을갖는모든결합점 어노테이션을갖는모든결합점 단일파라미터를받고, 어노테이션을갖는모든결합점 accountrepository 빈 accountrepository 빈을제외한모든빈 모든빈 이름이 'account' 로시작되는모든빈 이름이 Repository 로끝나는모든빈 이름이 accounting/ 로시작하는모든빈 이름이 datasource 나 DataSource 으로끝나는모든빈

111 3. AOP - 설명 (15/17) 실행환경 AOP 가이드라인 실행환경은예외처리와트랜잭션처리에 AOP 를적용함 실행환경 AOP 가이드라인 예외처리 (1/2) 관점 (Aspect) 정의 : resources/egovframework.spring/context-aspect.xml Advice 정의 <bean id="exceptiontransfer" class="egovframework.rte.fdl.cmmn.aspect.exceptiontransfer">... </bean> <aop:config> <aop:pointcut id="servicemethod" expression="execution(* egovframework.rte.sample..impl.*impl.*(..))" /> Pointcut 정의 <aop:aspect ref="exceptiontransfer"> <aop:after-throwing throwing="exception pointcut-ref="servicemethod" method="transfer" /> </aop:aspect> </aop:config> JoinPoint 정의 Aspect 정의

112 3. AOP - 설명 (16/17) 실행환경 AOP 가이드라인 예외처리 (2/2) Advice 클래스 : egovframework.rte.fdl.cmmn.aspect.exceptiontransfer public class ExceptionTransfer { } public void transfer(joinpoint thisjoinpoint, Exception exception) throws Exception {... if (exception instanceof EgovBizException) { log.debug("exception case :: EgovBizException "); EgovBizException be = (EgovBizException) exception; getlog(clazz).error(be.getmessage(), be.getcause()); processhandling(clazz, exception, pm, exceptionhandlerservices, false); throw be; } else if (exception instanceof RuntimeException) { log.debug("runtimeexception case :: RuntimeException "); RuntimeException be = (RuntimeException) exception; getlog(clazz).error(be.getmessage(), be.getcause()); processhandling(clazz, exception, pm, exceptionhandlerservices, true);... throw be; } else if (exception instanceof FdlException) {... throw fe; } else {... throw processexception(clazz, "fail.common.msg", new String[] {}, exception, locale); } }

113 3. AOP - 설명 (17/17) 실행환경 AOP 가이드라인 트랜잭션처리 관점 (Aspect) 정의 : resources/egovframework.spring/context-transaction.xml <!-- 트랜잭션관리자를설정한다. --> <bean id="txmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource"/> </bean> <!-- 트랜잭션 Advice 를설정한다. --> <tx:advice id="txadvice" transaction-manager="txmanager"> <tx:attributes> <tx:method name="*" rollback-for="exception"/> </tx:attributes> </tx:advice> <!-- 트랜잭션 Pointcut 를설정한다.---> <aop:config> <aop:pointcut id="requiredtx expression="execution(* egovframework.rte.sample..impl.*impl.*(..))"/> <aop:advisor advice-ref="txadvice pointcut-ref="requiredtx" /> </aop:config>

114 3. AOP - 참고자료 Spring 2.5/3.0 Reference Documentation The new() Pointcut

115 3. AOP 부록 어노테이션을이용한 AOP 지원 (1/11) Java 5 어노테이션을사용하여일반 Java 클래스로관점 (Aspect) 방식은 AspectJ 5 버전에서소개되었으며, Spring은 2.0 버전부터 AspectJ 5 어노테이션을지원한다. Spring AOP 실행환경은 AspectJ 컴파일러나 어노테이션을지원한다

116 3. AOP 부록 어노테이션을이용한 AOP 지원 설정하기 <aop:aspectj-autoproxy/> Aspect 정의하기 import public class AspectUsingAnnotation {.. } Pointcut public class AspectUsingAnnotation * egovframework.rte.fdl.aop.sample.*sample.*(..))") public void targetmethod() { // pointcut annotation 값을참조하기위한 dummy method }... }

117 3. AOP 부록 어노테이션을이용한 AOP 지원 (3/11) Advice 정의하기 before advice Before advice public class AspectUsingAnnotation public void beforetargetmethod(joinpoint thisjoinpoint) { Class clazz = thisjoinpoint.gettarget().getclass(); String classname = thisjoinpoint.gettarget().getclass().getsimplename(); String methodname = thisjoinpoint.getsignature().getname(); // 대상메서드에대한로거를얻어해당로거로현재 class, method 정보로깅 Log logger = LogFactory.getLog(clazz); logger.debug(classname + "." + methodname + " executed."); } }

118 3. AOP 부록 어노테이션을이용한 AOP 지원 (4/11) Advice 정의하기 After returning advice After returing advice 는정상적으로메소드가실행될때수행된다. After returning advice public class AspectUsingAnnotation { = "targetmethod()", returning = "retval") public void afterreturningtargetmethod(joinpoint thisjoinpoint, Object retval) { System.out.println("AspectUsingAnnotation.afterReturningTargetMethod executed. + return value is [ + retval + "]"); }

119 3. AOP 부록 어노테이션을이용한 AOP 지원 (5/11) Advice 정의하기 After throwingadvice After throwing advice 는메소드가수행중예외사항을반환하고종료하는경우수행된다. After throwing advice public class AspectUsingAnnotation = "targetmethod()", throwing = "exception") public void afterthrowingtargetmethod(joinpoint thisjoinpoint, Exception exception) throws Exception { System.out.println("AspectUsingAnnotation.afterThrowingTargetMethod executed."); System.out.println(" 에러가발생했습니다.", exception); } } throw new BizException(" 에러가발생했습니다.", exception);

120 3. AOP 부록 어노테이션을이용한 AOP 지원 (6/11) Advice 정의하기 After (finally) advice After (finally) advice 는메소드수행후무조건수행된다. After advice 는정상종료와예외발생경우를모두처리해야하는경우에사용된다 ( 예 : 리소스해제작업 ) After (finally) advice public class AspectUsingAnnotation { public void aftertargetmethod(joinpoint thisjoinpoint) { System.out.println("AspectUsingAnnotation.afterTargetMethod executed."); }

121 3. AOP 부록 어노테이션을이용한 AOP 지원 (7/11) Advice 정의하기 Around advice Around advice 는메소드수행전후에수행된다. Around advice public class AspectUsingAnnotation public Object aroundtargetmethod(proceedingjoinpoint thisjoinpoint) throws Throwable { System.out.println("AspectUsingAnnotation.aroundTargetMethod start."); long time1 = System.currentTimeMillis(); Object retval = thisjoinpoint.proceed(); System.out.println("ProceedingJoinPoint executed. return value is [ + retval + "]"); retval = retval + "(modified)"; System.out.println("return value modified to [" + retval + "]"); } } long time2 = System.currentTimeMillis(); System.out.println("AspectUsingAnnotation.aroundTargetMethod end. Time(" + (time2 - time1) + ")"); return retval;

122 3. AOP 부록 어노테이션을이용한 AOP 지원 (8/11) Aspect 실행하기 정상실행인경우 public class AnnotationAspectTest = "annotationadvicesample") AnnotationAdviceSample public void testannotationaspect() throws Exception { SampleVO vo = new SampleVO();.. String resultstr = annotationadvicesample.somemethod(vo); } } assertequals("somemethod executed.(modified)", resultstr);

123 3. AOP 부록 어노테이션을이용한 AOP 지원 (9/11) Aspect 실행하기 정상실행인경우 콘솔로그출력 Advice 적용순서 ( 대상메소드수행전 ) 3. 대상메소드 4.@Around ( 대상메소드수행후 ) 5.@After(finally) 6.@AfterReturning

124 3. AOP 부록 어노테이션을이용한 AOP 지원 (10/11) Aspect 실행하기 예외발생의경우 public class AnnotationAspectTest = "annotationadvicesample") AnnotationAdviceSample public void testannotationaspect() throws Exception { SampleVO vo = new SampleVO(); // exception 을발생하도록플래그설정 vo.setforceexception(true);.. try { String resultstr = annotationadvicesample.somemethod(vo); } } fail( exception 을강제로발생시켜이라인이수행될수없습니다."); } catch(exception e) {... }

125 3. AOP 부록 어노테이션을이용한 AOP 지원 (11/11) Aspect 실행하기 예외발생의경우 콘솔로그출력 Advice 적용순서 ( 대상메소드수행전 ) 3. 대상메소드 (ArithmeticException 예외가발생한다 ) 4.@After(finally) 5.@AfterThrowing

126 LAB 202-aop LAB 202-aop 실습

127 4. Cache - 개요 서비스개요 빈번히사용되는컨텐츠에대해서빠른접근을가능하게하여잦은접근을통한오버헤드나시간을절약하기 위한서비스 주요기능 Cache를위한속성설정 Cache 매체 ( 메모리, 디스크등 ) 를지정 Cache 사이즈 (Disk 용량, Object 수등 ) 를지정 Cache 알고리즘 (LRU, FIFO 등 ) 을지정 Cache에대상을입력 Cache로부터대상을얻는기능 클러스터링을지원하는기능

128 4. Cache - 설명 (1/3) Cache 서비스 Cache Service는 EhCache를선정. 변경이자주일어나지않지만사용빈도가높고생성하는데비용이많이드는객체일경우, Cache를이용하면다음과같은장점을얻을수있음. 자주접근하는데이터를매번데이터베이스로부터 fetch할필요가없으므로오버헤드가줄어듬. 객체를매번생성하지않기때문에메모리를효율적으로사용할수있음. 기본사용법 Cache를사용하기위한 Cache Manager 생성샘플 // 클래스패스를이용하여설정파일읽어서 Cache Manager 생성하기. URL url = getclass().getresource("/ehcache-default.xml"); manager = new CacheManager(url);

129 4. Cache - 설명 (2/3) 기본사용법 Configuration <ehcache> <diskstore path="user.dir/second"/> <cache name="samplemem" maxelementsinmemory="3" eternal="false" timetoidleseconds="360" timetoliveseconds="1000" overflowtodisk="false" diskpersistent="false" memorystoreevictionpolicy="lru"> </cache> </ehcache> Basic Usage Source 위에서정의한 Cache Manager 를사용하여 Cache 에데이터를입력 / 조회 / 삭제하는기본샘플코드 // cache Name 을가지고 cache 얻기 Cache cache = manager.getcache("samplemem"); // 1.Cache 에데이터입력 cache.put(new Element("key1", "value1")); // 2.Cache 로부터입력한데이터읽기 Element value = cache.get("key1"); // 3. Cache 에서데이터삭제 cache.remove("key1");

130 4. Cache - 설명 (3/3) Cache Algorithm LRU Algorithm FIFO Algorithm LFU Algorithm Cache Size & Device Cache에서관리해야하는정보의사이즈설정및저장디바이스관련설정 Cache Device : 디바이스관련세팅은메모리관리캐쉬의디스크관리로의이동관련설정으로메모리관리오브젝트수가넘었을때 Disk 로이동여부, flush 호출시파일로저장여부에대한세팅이있음 Cache Size : 사이즈관련세팅은메모리에서관리해야할최대오브젝트수, 디스크에서관리하는최대오브젝트수에대한세팅 Distributed Cache Ehcache는 Distributed Cache를지원하는방법으로 RMI,JGROUP,JMS등을지원함 Using Jgroups : JGroups는 multicast 기반의커뮤니케이션툴킷으로그룹을생성하고그룹멤버간에메시지를주고받을수있도록지원함 Using ActiveMQ : ActiveMQ는 JMS 메시징서비스를제공하는오픈소스

131 4. Cache - 참고자료 EhCache

132 5. Compress/Decompress - 개요 서비스개요 데이터를압축하고복원하는기능을제공하는서비스로서, 데이터를효율적으로저장하고전송하기위해서원 본데이터를압축하거나, 압축된데이터를복원하여원본데이터를얻기위한서비스 주요기능 데이터압축 (Compress) 데이터의복원을위하여비손실압축방식을이용하여압축 데이터복원 (Decompress) 압축된데이터복원

133 5. Compress/Decompress - 설명 (1/3) Compress/Decompress 서비스 다양한압축방식과개발자들에게편리한 API를제공하는 Jakarta Commons의 Compress 를사용 Jakarta Commons의 Compress에서지원하는 tar, zip and bzip2 파일등을지원함 Commons Compress에서제공하고있는 API ( org.apache.commons.compress.archivers org.apache.commons.compress.archivers.ar org.apache.commons.compress.archivers.cpio org.apache.commons.compress.archivers.jar org.apache.commons.compress.archivers.tar org.apache.commons.compress.archivers.zip org.apache.commons.compress.changes org.apache.commons.compress.compressors org.apache.commons.compress.compressors.bzip2 org.apache.commons.compress.compressors.gzip org.apache.commons.compress.utils

134 5. Compress/Decompress - 설명 (2/3) Commons Compress 를사용한간단한예제 (Archive) org.apache.commons.compress.archivers 패키지에속한 ArchiveInputStream 클래스를사용하여 compress/decompress 로구성됨.. // Archive final File output = new File(dir, "bla.zip"); final File file1 = getfile("test1.xml"); final File file2 = getfile("test2.xml"); { final OutputStream out = new FileOutputStream(output); final ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream("zip", out);... } os.putarchiveentry(new ZipArchiveEntry("testdata/test1.xml")); IOUtils.copy(new FileInputStream(file1), os); os.closearchiveentry(); os.putarchiveentry(new ZipArchiveEntry("testdata/test2.xml")); IOUtils.copy(new FileInputStream(file2), os); os.closearchiveentry(); os.close();

135 5. Compress/Decompress - 설명 (3/3) Commons Compress 를사용한간단한예제 (Unarchive ) org.apache.commons.compress.archivers 패키지에속한 ArchiveInputStream 클래스를사용하여 compress/decompress 로구성됨. //Unarchive List results = new ArrayList(); { final InputStream is = new FileInputStream(output); final ArchiveInputStream in = new ArchiveStreamFactory(). createarchiveinputstream("zip", is);. } File result = File.createTempFile("dir-result", ""); result.delete(); result.mkdir(); ZipArchiveEntry entry = null; while((entry = (ZipArchiveEntry)in.getNextEntry())!= null) { File outfile = new File(result.getCanonicalPath() + "/result/" + entry.getname()); outfile.getparentfile().mkdirs(); OutputStream out = new FileOutputStream(outfile); IOUtils.copy(in, out); out.close(); results.add(outfile); } in.close();

136 5. Compress/Decompress - 참고자료 압축알고리즘 Apache Commons Compress Commons Compress 1.1 API

137 6. Encryption/Decryption - 개요 (1/2) 서비스개요 암호화 (Encryption,Ciphering) 는메시지의내용이불명확하도록평문을재구성하여암호문을만드는것인데, 이때사용되는메시지의재구성방법을암호화알고리즘 (Encryption Algorithm) 이라고부른다. 암호화알고리즘에서는암호화의비밀성을높이기위해키 (Key) 를사용하기도한다. 복호화 (Decryption,deciphering) 란암호화의역과정으로, 불명확한메시지로부터본래의메시지를환원하는과정이다. Jasypt는오픈소스 Java library로개발자는암호화관련깊은지식이없어도암복호화프로그램을개발할수있도록지원한다. 여기서설명하는부분은암복호화모듈로사용한 API 중심으로설명하겠다. 주요기능 Password Encoder Jasypt 의 ConfigurablePasswordEncryptor 를통해패스워드인코딩을지원한다. ( 기본알고리즘 : SHA-256) General Cryptography Service setalgorithm( ), setblocksize( ), setpasswordencoder( ) 메소드를통해암복호화에대한알고리즘등을설정한다. 기본알고리즘은 PBEWithSHA1AndDESede, 기본블럭사이즈는 1024로처리된다. byte[], BigDecimal, File에대하여암호화및복화화서비스를제공한다

138 6. Encryption/Decryption 개요 (2/2) ARIA Algorithm Cryptography Service 국정원의 ARIA 알고리즘을통한암복화서비스를제공한다. setblocksize( ), setpasswordencoder( ) 메소드를통해암복호화에대한정보를설정한다. 기본블럭사이즈는 1024로처리된다. byte[], File에대하여암호화및복화화서비스를제공한다 Digest Service Hash Function을통한 Message Digest 서비스를제공한다. setalgorithm( ), setplaindigest( ) 메소드를통해 Digest 방식에대한정보를설정한다. 기본알고리즘은 SHA-256이며, 기본 PlainDigest 설정은 false로처리된다. (PainDigest가 true이면 1000 iterations, 8 salt byte size가적용된다.) byte[] 에대한 digest 및 matches 서비스가제공된다

139 6. Encryption/Decryption - 설명 (1/5) Property 설정 # Message digest algorithm using EgovPasswordEncoder.. crypto.password.algorithm=sha-256 # hashed password (ex: egovframe (SHA-256) => gdyys/izqy86vcwht8emcyfqy1ahw2vtlg+/fznqtrq=) crypto.hashed.password=gdyys/izqy86vcwht8emcyfqy1ahw2vtlg+/fznqtrq= crypto.password.algorithm : 패스워드인코더에사용될 hash function 알고리즘 crypto.hashed.password : 패스워드에대한 hash value (egovframework.rte.fdl.cryptography.egovpasswordencoder의 main 메소드에의해해당값을얻어기록한다.) Properties 파일지정 <context:property-placeholder location="classpath*:/meta-inf/spring/crypto_config.properties,classpath*:/meta- INF/spring/password.properties" /> <!-- recommended location method is using file prefix.. ex) "file:/home/properties/crypto_config.properties" -->

140 6. Encryption/Decryption - 설명 (2/5) XML 설정 <bean id="passwordencoder" class="egovframework.rte.fdl.cryptography.egovpasswordencoder"> <property name="algorithm" value="${crypto.password.algorithm}" /><!-- default : SHA > <property name="hashedpassword" value="${crypto.hashed.password}" /> </bean> <bean id="ariacryptoservice" class="egovframework.rte.fdl.cryptography.impl.egovariacryptoserviceimpl"> <property name="passwordencoder" ref="passwordencoder" /> <property name="blocksize" value="1025" /><!-- default : > </bean> <bean id="digestservice" class="egovframework.rte.fdl.cryptography.impl.egovdigestserviceimpl"> <property name="algorithm" value="sha-256" /><!-- default : SHA > <property name="plaindigest" value="false" /><!-- default : false --> </bean> <bean id="generalcryptoservice" class="egovframework.rte.fdl.cryptography.impl.egovgeneralcryptoserviceimpl"> <property name="passwordencoder" ref="passwordencoder" /> <property name="algorithm" value="pbewithsha1anddesede" /><!-- default : PBEWithSHA1AndDESede --> <property name="blocksize" value="1024" /><!-- default : > </bean>

141 6. Encryption/Decryption - 설명 (3/5) Encryption texts Guide public void teststring() { String[] teststring = { "This is a testing...\nhello!", " 한글테스트입니다...", "!@#$%^&*()_+ ~{}:\"<>?-=\\`[];',./" }; try { For (String str : teststring) { byte[] encrypted = cryptoservice.encrypt(str.getbytes("utf-8"), password); byte[] decrypted = cryptoservice.decrypt(encrypted, password); } assertequals(str, new String(decrypted, "UTF-8")); } } catch (UnsupportedEncodingException uee) { uee.printstacktrace(); fail(); }

142 6. Encryption/Decryption - 설명 (4/5) Encryption file Guide public void testfile() { String filepath = "/META-INF/spring/file/test.hwp"; File srcfile = new File(this.getClass().getResource(filePath).getFile()); File trgtfile; File decryptedfile; try { trgtfile = File.createTempFile("tmp", "encrypted"); trgtfile.deleteonexit(); cryptoservice.encrypt(srcfile, password, trgtfile); decryptedfile = File.createTempFile("tmp", "decrypted"); decryptedfile.deleteonexit(); cryptoservice.decrypt(trgtfile, password, decryptedfile); } asserttrue("decrypted file not same!!", checkfilewithhashfunction(srcfile, decryptedfile)); } catch (Exception ex) { ex.printstacktrace(); fail(ex.getmessage()); }

143 6. Encryption/Decryption - 설명 (5/5) Message Digest = { "classpath:/meta-inf/spring/*.xml" }) public class EgovDigestServiceTest EgovDigestService public void testdigest() { String data = "egovframe"; byte[] digested = digestservice.digest(data.getbytes()); } } asserttrue(digestservice.matches(data.getbytes(), digested));

144 6. Encryption/Decryption - 참고자료 JASYPT class API

145 7. Excel - 개요 서비스개요 Excel 파일포맷을다룰수있는자바라이브러리를제공하여 Java 어플리케이션에서도 Excel 파일을다룰수있는서비스 Apache POI 오픈소스를사용하여 Excel파일접근및 Excel업 / 다운로드기능을서비스함 주요기능 엑셀파일을읽어특정셀의값조회 엑셀파일내특정셀의내용을변경 엑셀파일내특정셀의속성 ( 폰트, 사이즈등 ) 변경 엑셀파일생성 엑셀파일다운로드 엑셀파일의속성 ( 셀의크기, Border의속성, 셀의색상, 정렬등 ) 변경 엑셀파일문서의속성 (Header, Footer) 을변경 공통템플릿사용을통한일관성제공

146 7. Excel - 설명 (1/13) 주요기능 Excel 파일생성 HSSFWorkbook 인스턴스를생성하여 Excel sheet 를추가생성 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet1 = wb.createsheet(sheetname1); HSSFSheet sheet2 = wb.createsheet(sheetname2); HSSFSheet sheet = wb.createsheet(); // 엑셀파일생성 HSSFWorkbook tmp = excelservice.createworkbook(wb, filename); // 파일존재확인 asserttrue(egovfileutil.isexistsfile(sb.tostring())); // 저장된 Sheet 명일치점검 assertequals(sheetname1, tmp.getsheetname(0)); assertequals(sheetname2, tmp.getsheetname(1));

147 7. Excel - 설명 (2/13) 주요기능 Excel 파일수정 저장된엑셀파일을로드할수있음 지정한 sheet 에 row 와 cell 객체를생성하여텍스트를저장하고수정할수있음 // 엑셀파일로드 HSSFWorkbook wb = excelservice.loadworkbook(filename); HSSFSheet sheet = wb.getsheetat(0); HSSFRow row = sheet.createrow( rownum ); row.setheight( (short) 0x349 ); HSSFCell cell = row.createcell( cellnum ); cell.setcelltype( HSSFCell.CELL_TYPE_STRING ); cell.setcellvalue( new HSSFRichTextString(content) ); cell.setcellstyle( cs ); sheet.setcolumnwidth( (short) 20, (short) ( ( 50 * 8 ) / ( (double) 1 / 20 ) ) ); FileOutputStream out = new FileOutputStream(filename); wb.write(out); out.close();

148 7. Excel - 설명 (3/13) 주요기능 Excel 파일속성수정 엑셀파일의속성 ( 셀의크기, Border 의속성, 셀의색상, 정렬등 ) 을수정 HSSFFont, HSSFCellStyle 클래스를이용하여셀에적용된폰트, 색상및정렬등을설정할수있음 HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet1 = wb.createsheet("new sheet"); HSSFSheet sheet2 = wb.createsheet("second sheet"); // 셀의크기 sheet1.setdefaultrowheight(rowheight); sheet1.setdefaultcolumnwidth(columnwidth); HSSFFont f2 = wb.createfont(); HSSFCellStyle cs = wb.createcellstyle(); cs = wb.createcellstyle(); cs.setfont( f2 ); cs.setwraptext( true ); // 정렬 cs.setalignment(hssfcellstyle.align_right); cs.setfillpattern(hssfcellstyle.diamonds); // 무늬스타일 // 셀의색상 cs.setfillforegroundcolor( new HSSFColor.BLUE().getIndex()); // 무늬색 cs.setfillbackgroundcolor( new HSSFColor.RED().getIndex()); // 배경색 sheet1.setdefaultcolumnstyle((short) 0, cs);

149 7. Excel - 설명 (4/13) 주요기능 Excel 문서속성수정 엑셀파일문서의속성 (Header/Footer) 을수정 HSSFHeader, HSSFFooter 클래스로엑셀문서의 Header 와 Footer 의값과속성을설정 // 엑셀파일로드 HSSFWorkbook wb = excelservice.loadworkbook(filename); HSSFSheet sheet = wb.createsheet("doc test sheet"); HSSFRow row = sheet.createrow(1); HSSFCell cell = row.createcell((short) 1); cell.setcellvalue(new HSSFRichTextString("Header/Footer Test")); // Header HSSFHeader header = sheet.getheader(); header.setcenter("center Header"); header.setleft("left Header"); header.setright(hssfheader.font("stencil-normal", "Italic") + HSSFHeader.fontSize((short) 16) + "Right Stencil-Normal Italic font and size 16"); // Footer HSSFFooter footer = sheet.getfooter(); footer.setcenter(hssfheader.font("fixedsys", "Normal") + HSSFHeader.fontSize((short) 12) + "- 1 -"); footer.setleft("left Footer"); footer.setright("right Footer"); // 엑셀파일저장 FileOutputStream out = new FileOutputStream(sb.toString()); wb.write(out); out.close();

150 7. Excel - 설명 (5/13) 주요기능 셀내용추출 엑셀파일을읽어특정셀의값을얻어옴 HSSFCell 클래스의 getrichstringcellvalue, getnumericcellvalue, getstringcellvalue 등다양한 type 의 Cell 내용을추출 // 엑셀파일로드 HSSFWorkbook wb = excelservice.loadworkbook(sb.tostring()); HSSFSheet sheet = wb.createsheet("cell test sheet2"); sheet.setcolumnwidth((short) 3, (short) 200); // column Width HSSFCellStyle cs = wb.createcellstyle(); HSSFFont font = wb.createfont(); font.setfontheight((short) 16); font.setboldweight((short) 3); font.setfontname("fixedsys"); cs.setfont(font); cs.setalignment(hssfcellstyle.align_right); // cell 정렬 cs.setwraptext( true ); for (int i = 0; i < 100; i++) { HSSFRow row = sheet.createrow(i); row.setheight((short)300); // row 의 height 설정 for (int j = 0; j < 5; j++) { HSSFCell cell = row.createcell((short) j); cell.setcellvalue( new HSSFRichTextString("row " + i + ", cell " + j)); cell.setcellstyle( cs ); } } // 엑셀파일저장 FileOutputStream out = new FileOutputStream(sb.toString()); wb.write(out); out.close();

151 7. Excel - 설명 (6/13) 주요기능 셀속성추출 특정셀의속성 ( 폰트, 사이즈등 ) 을수정 HSSFFont, HSSFCellStyle 등의클래스를이용하여셀의폰트, 사이즈등의셀속성을수정 // 엑셀파일로드 HSSFWorkbook wb = excelservice.loadworkbook(sb.tostring()); HSSFSheet sheet = wb.createsheet("cell test sheet2"); sheet.setcolumnwidth((short) 3, (short) 200); // column Width HSSFCellStyle cs = wb.createcellstyle(); HSSFFont font = wb.createfont(); font.setfontheight((short) 16); font.setboldweight((short) 3); font.setfontname("fixedsys"); cs.setfont(font); cs.setalignment(hssfcellstyle.align_right); // cell 정렬 cs.setwraptext( true ); for (int i = 0; i < 100; i++) { HSSFRow row = sheet.createrow(i); row.setheight((short)300); // row 의 height 설정 for (int j = 0; j < 5; j++) { HSSFCell cell = row.createcell((short) j); cell.setcellvalue(new HSSFRichTextString("row " + i + ", cell " + j)); cell.setcellstyle( cs ); } } // 엑셀파일저장 FileOutputStream out = new FileOutputStream(sb.toString()); wb.write(out); out.close();

152 7. Excel - 설명 (7/13) 주요기능 공통템플릿사용 공통템플릿을사용하여일관성을유지한다. jxls 오픈소스를사용하여작성된템플릿에지정된값을저장 List<PersonHourVO> persons = new ArrayList<PersonHourVO>(); PersonHourVO person = new PersonHourVO(); person.setname("yegor Kozlov"); person.setid("yk"); person.setmon(5.0); person.settue(8.0); person.setwed(10.0); person.setthu(5.0); person.setfri(5.0); person.setsat(7.0); person.setsun(6.0); persons.add(person); PersonHourVO person1 = new PersonHourVO(); person1.setname("gisella Bronzetti"); person1.setid("gb"); person1.setmon(4.0); person1.settue(3.0); person1.setwed(1.0); person1.setthu(3.5); person1.setsun(4.0); persons.add(person1); Map<String, Object> beans = new HashMap<String, Object>(); beans.put("persons", persons); XLSTransformer transformer = new XLSTransformer(); transformer.transformxls(filename, beans, sbresult.tostring());

153 7. Excel - 설명 (8/13) 주요기능 공통템플릿사용 공통템플릿을사용하여일관성을유지한다. jxls 오픈소스를사용하여작성된템플릿에지정된값을저장

154 7. Excel - 설명 (9/13) 엑셀다운로드 Configuration <bean id="categoryexcelview" class="egovframework.rte.fdl.excel.download.categoryexcelview" /> <bean class="org.springframework.web.servlet.view.beannameviewresolver"> <property name="order" value="0" /> </bean> Controller 클래스 (Map 을사용할경우 public ModelAndView selectcategorylist() throws Exception { List<Map> lists = new ArrayList<Map>(); Map<String, String> mapcategory = new HashMap<String, String>(); mapcategory.put("id", " "); mapcategory.put("name", "Sample Test"); mapcategory.put("description", "This is initial test data."); mapcategory.put("useyn", "Y"); mapcategory.put("reguser", "test"); lists.add(mapcategory); Map<String, Object> map = new HashMap<String, Object>(); map.put("category", lists); } return new ModelAndView("categoryExcelView", "categorymap", map);

155 7. Excel - 설명 (10/13) 엑셀다운로드 Controller 클래스 (VO 를사용한경우 public ModelAndView selectcategorylist() throws Exception { List<UsersVO> lists = new ArrayList<UsersVO>(); UsersVO users = new UsersVO(); users.setid(" "); users.setname("sample Test"); users.setdescription("this is initial test data."); users.setuseyn("y"); users.setreguser("test"); lists.add(users); Map<String, Object> map = new HashMap<String, Object>(); map.put("category", lists); } return new ModelAndView("categoryExcelView", "categorymap", map);

156 7. Excel - 설명 (11/13) 엑셀다운로드 ExcelView 클래스 public class CategoryExcelView extends AbstractExcelView protected void buildexceldocument(map model, HSSFWorkbook wb, HttpServletRequest req, HttpServletResponse resp) throws Exception { HSSFSheet sheet = wb.createsheet("user List"); sheet.setdefaultcolumnwidth((short) 12); HSSFCell cell = getcell(sheet, 0, 0); settext(cell, "User List"); settext(getcell(sheet, 2, 0), "id"); settext(getcell(sheet, 2, 1), "name");.. Controller 의 return 한객체의파라미터 Map<String, Object> map= (Map<String, Object>) model.get("categorymap"); List<Object> categories = (List<Object>) map.get("category"); if (categories.size() > 0) { Object obj = categories.get(0); } for (int i = 0; i < categories.size(); i++) { Map<String, String> category = (Map<String, String>) categories.get(i); cell = getcell(sheet, 3 + i, 0); settext(cell, category.get("id"));

157 7. Excel - 설명 (12/13) 엑셀업로드 Configuration <bean id="excelservice class="egovframework.rte.fdl.excel.impl.egovexcelserviceimpl"> <property name="mapclass" value="egovframework.rte.cvpl.service.impl.egovexceltestmapping" /> <property name="sqlmapclient" ref="sqlmapclient" /> </bean> VO 작성 public class EmpVO implements Serializable{ private BigDecimal empno; private String empname; private String job; public BigDecimal getempno() { return empno; } public void setempno(bigdecimal empno) { this.empno = empno; } public String getempname() { return empname; } public void setempname(string empname) { this.empname = empname; } } public String getjob() { return job; } public void setjob(string job) { this.job = job; }

158 7. Excel - 설명 (13/13) 엑셀업로드 Mapping 클래스 public class EgovExcelTestMapping extends EgovExcelMapping public EmpVO mappingcolumn(hssfrow row) { HSSFCell cell0 = row.getcell((short) 0); HSSFCell cell1 = row.getcell((short) 1); HSSFCell cell2 = row.getcell((short) 2); EmpVO vo = new EmpVO(); vo.setempno(new BigDecimal (cell0.getnumericcellvalue())); vo.setempname(cell1.getrichstringcellvalue().tostring()); vo.setjob(cell2.getrichstringcellvalue().tostring()); } } Query return vo; <sqlmap namespace="empbatchinsert"> <typealias alias="empvo" type="egovframework.rte.fdl.excel.vo.empvo" /> <insert id="insertempusingbatch" parameterclass="empvo"> <![CDATA[ insert into EMP ( EMP_NO, EMP_NAME, JOB ) values ( #empno#, #empname#, #job# ) ]]> </insert> </sqlmap> excelservice.uploadexcel( insertempusingbatch, fileinputstream);

159 7. Excel - 참고자료 The Apache POI Project jxls

160 8. File Handling - 개요 서비스개요 File 에대한생성및접근, 변경등과같이 File 을 Access 하는기능을제공하는서비스 시스템을개발할때필요한문자열데이터를다루기위해다양한기능을사용하도록서비스함 주요기능 File 생성 특정위치에 File 생성 File Access File에대한접근및수정 파일위치는절대경로, 상대경로등다양한형식지원 File을읽고수정할때 File Caching 기능제공

161 8. File Handling - 설명 (1/5) Jakarta Commons Virtual File System(VFS) 란 파일처리를추상화하여간편하고쉽게사용할수있는아파치의 Jakarta Commons Virtual File System (VFS) 를 File Handling 기능의기반오픈소스로채택함 Jakarta Commons Virtual File System (VFS) 는파일시스템에접근하기위한 API를제공하며, Local disk, HTTP server, ZIP 파일내부등다양한파일시스템에대한단일한 view를제공 다양한파일시스템에대한일관된접근 API를제공한다. 다양한파일시스템을지원한다. 다양한파일시스템을하나의로컬파일시스템처럼접근가능하도록한다. 파일접근시파일캐싱을통하여성능을향상시킨다

162 8. File Handling - 설명 (2/5) FileSystemManager Commons Virtual File System (VFS) 을사용하기위해서는 FileSystemManager 인터페이스가필요 FileSystemManager 인스턴스를얻는가장간단한방법은 VFS.getManager() 스태틱메소드를사용 FileSystemManager fsmanager = VFS.getManager(); FileObject jarfile = fsmanager.resolvefile( jar:lib/ajarfile.jar ); FileObject 파일및폴더를 FileObject 인스턴스로표현하여파일을생성 / 삭제하거나파일리스트검색및파일읽기 / 쓰기 등가능 // Locate the Jar file FileSystemManager fsmanager = VFS.getManager(); FileObject jarfile = fsmanager.resolvefile( jar:lib/ajarfile.jar" ); // List the children of the Jar file FileObject[] children = jarfile.getchildren(); System.out.println( Children of " + jarfile.getname().geturi() ); for ( int i = 0; i < children.length; i++ ) { System.out.println( children[ i ].getname().getbasename() ); }

163 8. File Handling - 설명 (3/5) 파일생성 FileObject 의 createfile() 메소드사용 public void testceatefile() throws Exception { FileSystemManager manager = VFS.getManager(); FileObject basedir = manager.resolvefile(system.getproperty( user.dir )); final FileObject file = manager.resolvefile(basedir, testfolder/file1.txt ); // 모든파일삭제 file.delete(selectors.select_files); assertfalse(file.exists()); // 파일생성 file.createfile(); asserttrue(file.exists()); }

164 8. File Handling - 설명 (4/5) 파일접근 파일쓰기 FileObject file = manager.resolvefile(basedir, testfolder/file1.txt ); FileContent filecontent = file.getcontent(); // 파일쓰기 OutputStream os = filecontent.getoutputstream(); String string = test 입니다. ; os.write(string.getbytes()); os.flush(); os.close(); assertnotsame(0, filecontent.getsize()); 파일읽기 FileObject writtenfile = manager.resolvefile(basedir, testfolder/file1.txt ); FileContent writtencontents = writtenfile.getcontent(); InputStream is = writtencontents.getinputstream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuffer sb = new StringBuffer(); for (String line = ; (line = reader.readline())!= null; sb.append(line)); is.close(); assertequals(sb.tostring(), string);

165 8. File Handling - 설명 (5/5) 파일캐싱 파일쓰기 // 캐싱 Manager 생성 DefaultFileSystemManager fs = new DefaultFileSystemManager(); fs.setfilescache(manager.getfilescache()); // zip, jar, tgz, tar, tbz2, file if (!fs.hasprovider( file )) { fs.addprovider( file, new DefaultLocalFileProvider()); } fs.setcachestrategy(cachestrategy.on_resolve); fs.init(); // 캐싱객체생성 FileObject fobase2 = fs.resolvefile(testfolder); FileObject cachedfolder = fobase2.resolvefile(scratchfolder.getname().getpath()); // 파일이존재하지않음 FileObject[] fos = cachedfolder.getchildren(); assertfalse(contains(fos, file1.txt )); // 파일생성 scratchfolder.resolvefile("file1.txt").createfile(); // 파일존재함 // BUT cachedfolder 에는파일이존재하지않음 fos = cachedfolder.getchildren(); assertfalse(contains(fos, file1.txt ));

166 8. File Handling - 참고자료 Apache Commons VFS Apache Commons IO

167 9. File Upload/Download - 개요 서비스개요 파일을클라이언트로부터서버로업로드하거나서버로부터클라이언트로다운로드할때반복적으로일어나 는 Overhead 를피하기위해단순한패턴및인터페이스제공 주요기능 HTTP 기반파일업로드 HTTP request(multipart Request) 를파싱 업로드크기및디렉토리위치에대한설정 복수개의파일을동시에업로드

168 9. File Upload/Download - 설명 (1/4) File Upload/Download 서비스 다양한파일업로드 API를제공하는 Commons FileUpload를채택 Spring 에서는 Commons FileUpload 를사용하여싱글파일업로드에대하여가이드함 멀티플파일업로드를지원하도록 CommonsMultipartResolver를사용함. (Spring mvc Multipart Multi file upload 지원부분은 Wiki를참조 ) 데이터전송방식 GET방식 : POST 방식 : URL 에폼데이터가노출되기때문에입력내용의길이제한이있고 256byte~4096byte 까지의데이터를전송할수있음. URL 에노출되지않고데이터를전송하기때문에입력내용의길이에제한을받지않음. ENCTYPE 속성의 "multipart/form-data : 파일이나용량이큰데이터를전송할때는폼데이터전송방식사용

169 9. File Upload/Download - 설명 (2/4) File Upload 구현예제 Step 1 빈설정파일에다음과같이 CommonsMultipartResolver 를정의함. <!-- MULTIPART RESOLVERS --> <bean id="spring.regularcommonsmultipartresolver" class="org.springframework.web.multipart.commons.commonsmultipartresolver"> <property name="maxuploadsize" value=" " /> <property name="maxinmemorysize" value=" " /> </bean> Step 2 컨트롤러의 property 로파일의업로드위치를지정해주고컨트롤러에서 setter 메소드를통해지정된파일업로드위치를불 러올수있음 # PATH 위치는설정시변경 # windows NT 일경우 file.upload.path=c:\\temp # Unix 일경우 file.upload.path=/usr/file/upload

170 9. File Upload/Download - 설명 (3/4) File Upload 구현 Setp 3 파일업로드를위해 JSP 파일의입력폼타입을 file 로지정하고 form 의 enctype 을 multipart/form-data 로지정함 <form method="post" action="<c:url value='/upload/genericmulti.do'/>" enctype="multipart/form-data"> <p>type: <input type="text" name="type" value="genericfilemulti" size="60" /> </p> <p>file1: <input type="file" name="file[]" size="60" /> </p> <p>file2: <input type="file" name="file[]" size="60" /> </p> <p> <input type="submit" value="upload" /> </p> </form> Setp 4 Controller public class GenericFileUploadController = "multipartresolver") CommonsMultipartResolver = "fileuploadproperties") = "/upload/genericmulti.do") public String multipartprocess(final HttpServletRequest request, Model model) throws Exception { final long starttime = System.nanoTime();... 이하생략 ( 자세한설명은 wiki File Upload/Download 참조 )

171 9. File Upload/Download - 설명 (4/4) File Download 구현 DownloadController public class DownloadController = "fileuploadproperties") Properties = "/download/downloadfile.do") public void = "requestedfile") String requestedfile, HttpServletResponse response) throws Exception { String uploadpath = fileuploadproperties.getproperty("file.upload.path"); File ufile = new File(uploadPath, requestedfile); int fsize = (int) ufile.length(); if (fsize > 0) { BufferedInputStream in = new BufferedInputStream( new FileInputStream(uFile)); // String mimetype = servletcontext.getmimetype(requestedfile); String mimetype = "text/html";.. response.setbuffersize(fsize);d response.setcontenttype(mimetype);

172 9. File Upload/Download - 참고자료 Spring's multipart (fileupload) support commons.apache.org {fileupload} commons.apache.org{empty-parse}

173 10. FTP - 개요 서비스개요 네트워크상에존재하는타어플리케이션과데이터 ( 파일 ) 을주고받기위해 FTP(File Transfer Protocol) Client 기능을제공하는서비스 주요기능 FTP Server 연결 파일주고받을 FTP Server 와연결 파일송신 FTP Server 에파일송신 파일수신 FTP Server 에서파일을수신

174 10. FTP 설명 (1/7) FTP 서비스 Jakarta Commons 의 Net 에서지원하는것은단순클라이언트측의기본적인 Internet Protocol 로구현한 FTP 기능을 편리하게제공 Jakarta Commons 의 Net 은 network utility collection Jakarta Commons Net Jakarta Commons Net 프로젝트에서지원하는프로토콜 FTP/FTPS NNTP SMTP POP3 Telnet TFTP Finger Whois rexec/rcmd/rlogin Time (rdate) and Daytime Echo Discard NTP/SNTP

175 10. FTP 설명 (2/7) org.apache.commons.net.ftp의논리적흐름 논리적흐름 1 FTP Client를생성한다. 2 FTP Server에연결한다. 3 응답이정상적인지확인한다. 4 FTP Server에로그인한다. 5 접속하여여러가지작업 (list, get, put 등 ) 을한다. 6 FTP Server에서로그아웃한다. 7 FTP Server 와의연결을끊는다

176 10. FTP 설명 (3/7) FTP접속사용예제리스트 파일리스트보기 파일다운로드 (get) 파일업로드 (put) 파일업로드 (append) 파일이름변경 (rename) 파일삭제 (delete) Directory생성 OS 커맨드입력하기 파일및전송상태설정

177 10. FTP 설명 (4/7) FTP 접속사용예제 파일리스트보기 FTPFile[] ftpfiles = client.listfiles("/"); if(ftpfiles!= null ){ for (int i = 0; i < ftpfiles.length; i++) { FTPFile file = ftpfiles[i]; logger.info(file.tostring()); // 파일정보 logger.info(file.getname()); // 파일명 logger.info(file.getsize()); // 파일사이즈 } } 파일다운로드 (GET) File get_file = new File("c:\\temp\\test.jpg"); FileOutputStream outputstream = new FileOutputStream(get_file); boolean result = client.retrievefile("/public/test.jpg", outputstream); outputstream.close();

178 10. FTP 설명 (5/7) FTP 접속사용예제 파일업로드 (PUT) File put_file = new File("c:\\temp\\test.jpg"); inputstream = new FileInputStream(put_file); boolean result = client.storefile("/public/test.jpg", inputstream); inputstream.close(); 파일업로드 (APPEND) File append_file = new File("c:\\temp\\test.jpg"); inputstream = new FileInputStream(append_file); boolean result = client.appendfile("/public/test.jpg", inputstream); inputstream.close(); 파일이름변경 (RENAME) boolean result = client.rename("/public/ 바꾸기전.jpg", "/public/ 바꾼후.jpg");

179 10. FTP 설명 (6/7) FTP 접속사용예제 파일삭제 (DELETE) boolean result = client.deletefile("/public/ 삭제할.jpg"); Dircetory 생성 boolean result = client.makedirectory("/public/test");

180 10. FTP 설명 (7/7) FTP 접속사용예제 OS 커맨드입력하기 client.sendcommand(ftpcommand.make_directory,"/public/test"); 파일및전송상태설정 /* 파일타입 */ client.setfiletype(ftp.binary_file_type); /* 파일전송형태 */ client.setfiletransfermode(ftp.compressed_transfer_mode);

181 10. FTP - 참고자료 Jakarta Commons Net Commons Net 2.0 API

182 11. ID Generation 개요 (1/3) 서비스개요 다양한형식의 ID 구조및다양한방식의 ID 생성알고리즘을제공하여시스템에서사용하는 ID(Identifier) 를생 성하는서비스

183 11. ID Generation 개요 (2/3) 주요기능 UUID(Universal Unique Identifier) 생성 : UUID(Universal Unique Identifier) 를생성한다. Sequence ID 생성 : 순차적으로증가또는감소하는 Sequence ID를생성한다. 시스템에서는다수의 Sequence ID가사용되므로, 각각의 Sequence ID는구별된다. 시스템의재시작시에도 Sequence ID는마지막생성된 ID의다음 ID를생성한다. Sequence ID 생성 : DB의 SEQUENCE를활용하여 ID를생성한다. Table ID 생성 : 키제공을위한테이블을지정하여 ID를생성한다

184 11. ID Generation 개요 (3/3) UUID(Universally Unique Identifier) 란 UUID는 OSF(Open Software Foundation) 에의해제정된고유식별자 (Identifier) 에대한표준이다. UID는 16- byte (128-bit) 의숫자로구성된다. UUID를표현하는방식에대한특별한규정은없으나, 일반적으로 16진법으로 형식으로표현한다. 550e8400-e29b-41d4-a UUID는다음 5개의 Version이존재한다. Version 1 (MAC Address) UUID를생성시키는컴퓨터의 MAC 어드레스와시간정보를이용하여 UUID를생성한다. 컴퓨터의 MAC 어드레스를이용하므로어떤컴퓨터에서생성했는지정보가남기때문에보안에문제가있다. Version 2 (DCE Security) POSIX UID를이용하여 UUID를생성한다. Version 3 (MD5 Hash) URL로부터 MD5를이용하여 UUID를생성한다. Version 4 (Random) Random Number를이용하여 UUID를생성한다. Version 5 (SHA-1 Hash) SHA-1 Hashing을이용하여 UUID를생성한다

185 11. ID Generation UUID Generation(1/4) 개요 새로운 ID 를생성하기위해 UUID 생성알고리즘을이용하여 16 바이트길이의 ID 를생성한다. String 타입의 ID 생성과 BigDecimal 타입의 ID 생성을지원한다. 지원하는방법은설정에따라서 Mac Address Base Service, IP Address Base Service, No Address Base Service 세가지유형이있다. Mac Address Base Service(1/2) MAC Address 를기반으로유일한 Id 를생성하는 UUIdGenerationService 설정 <bean name="uuidgenerationservice class="egovframework.rte.fdl.idgnr.impl.egovuuidgnrservice"> <property name="address"> <value>00:00:f0:79:19:5b</value> </property> </bean>

186 11. ID Generation UUID Generation(2/4) Mac Address Base Service(2/2) private EgovIdGnrService public void testuuidgeneration() throws Exception { assertnotnull(uuidgenerationservice.getnextstringid()); assertnotnull(uuidgenerationservice.getnextbigdecimalid()); }

187 11. ID Generation UUID Generation(3/4) IP Address Base Service IP Address 를기반으로유일한 Id 를생성하는 UUIdGenerationService 설정 <bean name="uuidgenerationservicewithip" class="egovframework.rte.fdl.idgnr.impl.egovuuidgnrservice"> <property name="address"> <value> </value> </property> </bean> private EgovIdGnrService public void testuuidgenerationip() throws Exception { assertnotnull(uuidgenerationservicewithip.getnextstringid()); assertnotnull(uuidgenerationservicewithip.getnextbigdecimalid()); }

188 11. ID Generation UUID Generation(4/4) No Address Base Service IP Address 설정없이 Math.random() 을이용하여주소정보를생성하고유일한 Id 를생성하는 UUIdGenerationService 설정 <bean name="uuidgenerationservicewithoutaddress" class="egovframework.rte.fdl.idgnr.impl.egovuuidgnrservice /> private EgovIdGnrService public void testuuidgenerationnoaddress() throws Exception { assertnotnull(uuidgenerationservicewithoutaddress.getnextstringid()); assertnotnull(uuidgenerationservicewithoutaddress.getnextbigdecimalid()); }

189 11. ID Generation Sequence Id Generation(1/4) 개요 새로운 ID 를생성하기위해 Database 의 SEQUENCE 를사용하는서비스이다. 서비스를이용하는시스템에서 Query 를지정하여아이디를생성할수있도록하고 Basic Type Service 와 BigDecimal Type Service 두가지를 지원한다. Basic Type Service(1/2) 기본타입 ID 를제공하는서비스로 int, short, byte, long 유형의 ID 를제공한다. DB Schema 설정 CREATE SEQUENCE idstest MINVALUE 0; <bean name="primarytypesequenceids class="egovframework.rte.fdl.idgnr.impl.egovsequenceidgnrservice destroy-method="destroy"> <property name="datasource" ref="datasource"/> <property name="query" value="select idstest.nextval FROM DUAL"/> </bean>

190 11. ID Generation Sequence Id Generation(2/4) Basic Type Service(2/2) private EgovIdGnrService public void testprimarytypeidgeneration() throws Exception { //int assertnotnull(primarytypesequenceids.getnextintegerid()); //short assertnotnull(primarytypesequenceids.getnextshortid()); //byte assertnotnull(primarytypesequenceids.getnextbyteid()); //long assertnotnull(primarytypesequenceids.getnextlongid()); }

191 11. ID Generation Sequence Id Generation(3/4) BigDecimal Type Service(1/2) BigDecimal ID 를제공하는서비스로기본타입 ID 제공서비스설정에추가적으로 usebigdecimals 을 true 로 설정하여사용하도록한다. DB Schema 설정 CREATE SEQUENCE idstest MINVALUE 0; <bean name="bigdecimaltypesequenceids" class="egovframework.rte.fdl.idgnr.impl.egovsequenceidgnrservice" destroy-method="destroy"> <property name="datasource" ref="datasource"/> <property name="query" value="select idstest.nextval FROM DUAL"/> <property name="usebigdecimals" value="true"/> </bean>

192 11. ID Generation Sequence Id Generation(4/4) BigDecimal Type Service(2/2) private EgovIdGnrService public void testbigdecimaltypeidgeneration() throws Exception { //BigDecimal assertnotnull(bigdecimaltypesequenceids.getnextbigdecimalid()); } DB 벤더별 SEQUENCE 및 Query 설정 DB 벤더별로 SEQUENCE 에대한지원여부및사용방식이다르므로이를고려하여설정해야한다. (DB 벤 더별 SEQUENCE 지원여부및설정방식은 wiki 참조 )

193 11. ID Generation Table Id Generation(1/6) 개요 새로운아이디를얻기위해서별도의테이블을생성하고키값과키값에해당하는아이디값을입력하여관리 하는기능을제공하는서비스로 table_name(char 또는 VARCHAR 타입 ), next_id(integer 또는 DECIMAL type) 두칼럼을필요로한다. 별도의테이블에설정된정보만을사용하여제공하는 Basic Service 와 String ID 의경우에적용이가능한 prefix 와채울문자열지정이가능한 Strategy Base Service 를제공한다. Basic Service(1/3) 테이블에지정된정보에의해서아이디를생성하는서비스로사용하고자하는시스템에서테이블을생성해서 사용할수있다. DB Schema ID Generation 서비스를쓰고자하는시스템에서미리생성해야할 DB Schema 정보임 CREATE TABLE ids ( table_name varchar(16) NOT NULL, next_id DECIMAL(30) NOT NULL, PRIMARY KEY (table_name)); INSERT INTO ids VALUES('id','0');

194 11. ID Generation Table Id Generation(2/6) Basic Service(2/3) 설정 <bean name="basicservice" class="egovframework.rte.fdl.idgnr.impl.egovtableidgnrservice" destroy-method="destroy"> <property name="datasource" ref="datasource"/> <property name="blocksize" value="10"/> <property name="table" value="ids"/> <property name="tablename" value="id"/> </bean> blocksize: Id Generation 내부적으로사용하는정보로 ID 요청시마다 DB 접속을하지않기위한정보 ( 지정 한횟수마다 DB 접속처리 ) table: 생성하는테이블정보로사용처에서테이블명변경가능 tablename: 사용하고자하는아이디개별인식을위한키값 ( 대개의경우는테이블별로아이디가필요하기 에 tablename 이라고지정함 )

195 11. ID Generation Table Id Generation(3/6) Basic Service(3/3) private EgovIdGnrService public void testbasicservice() throws Exception { //int assertnotnull(basicservice.getnextintegerid()); //short assertnotnull(basicservice.getnextshortid()); //byte assertnotnull(basicservice.getnextbyteid()); //long assertnotnull(basicservice.getnextlongid()); //BigDecimal assertnotnull(basicservice.getnextbigdecimalid()); //String assertnotnull(basicservice.getnextstringid()); }

196 11. ID Generation Table Id Generation(4/6) Strategy Base Service(1/3) 아이디생성을위한룰을등록하고룰에맞는아이디를생성할수있도록지원하는서비스로위의 Basic Service 에서추가적으로 Strategy 정보설정을추가하여사용할수있다. 단, 이서비스는 String 타입의 ID 만을 제공한다. DB Schema CREATE TABLE idttest( table_name varchar(16) NOT NULL, next_id DECIMAL(30) NOT NULL, PRIMARY KEY (table_name)); INSERT INTO idttest VALUES('test','0');

197 11. ID Generation Table Id Generation(5/6) Strategy Base Service(2/3) 설정 <bean name="ids-testwithgenerationstrategy class="egovframework.rte.fdl.idgnr.impl.egovtableidgnrservice" destroy-method="destroy"> <property name="datasource" ref="datasource"/> <property name="strategy" ref="strategy"/> <property name="blocksize" value="1"/> <property name="table" value="idttest"/> <property name="tablename" value="test"/> </bean> <bean name="strategy class="egovframework.rte.fdl.idgnr.impl.strategy.egovidgnrstrategyimpl"> <property name="prefix" value="test-"/> <property name="cipers" value="5"/> <property name="fillchar" value="*"/> </bean> strategy: 아래에정의된 MixPrefix 의 bean name 설정 prefix: 아이디의앞에고정적으로붙이고자하는설정값지정 cipers: prefix 를제외한아이디의길이지정 fillchar: 0 을대신하여표현되는문자

198 11. ID Generation Table Id Generation(4/4) Strategy Base Service(3/3) private EgovIdGnrService public void testidgenstrategy() throws Exception { initializenextlongid("test", 1); } // prefix : TEST-, cipers : 5, fillchar :*) for (int i = 0; i < 5; i++) { assertequals("test-****" + (i + 1), idstestwithgenerationstrategy.getnextstringid()); }

199 12. Logging - 개요 서비스개요 Logging 은시스템의개발이나운용시발생할수있는어플리케이션내부정보에대해서, 시스템의외부저장 소에기록하여, 시스템의상황을쉽게파악할수있게지원하는서비스 주요기능 로깅환경설정지원 서브시스템별상세한로그정책부여 다양한형식 ( 날짜형식, 시간형식등 ) 의로그메시지형태지정 다양한매체 (File, DBMS, Message, Mail 등 ) 에대한기록기능설정 로그기록 레벨 (debug, info, warn, error, fatal 등 ) 별로로그를기록

200 12. Logging - 설명 (1/5) Logging 서비스 시스템의개발이나운용시발생할수있는사항에대해서, 시스템의외부저장소에기록하여, 시스템의상황을 쉽게파악할수있음. 많은개발자가 Log 을출력하기위해일반적으로사용하는방식은 System.out.println() 임. 하지만이방식은간편한반면에다음과같은이유로권장하지않음. 콘솔로그를출력파일로리다이렉트할지라도, 어플리케이션서버가재시작할때파일이 overwrite될수도있음. 개발 / 테스팅시점에만 System.out.println() 을사용하고운영으로이관하기전에삭제하는것은좋은방법이아님. System.out.println() 호출은디스크 I/O동안동기화 (synchronized) 처리가되므로시스템의 throughput을떨어뜨림. 기본적으로 stack trace 결과는콘솔에남는다. 하지만시스템운영중콘솔을통해 Exception을추적하는것은바람직하지못함

201 12. Logging - 설명 (2/5) Log4j 환경설정하는방법 프로그래밍내에서직접설정하는방법 설정파일을사용하는방법 중요컴포넌트설명 컴포넌트 Logger Appender Layout 설명 로그의주체 ( 로그파일을작성하는클래스 ) 설정을제외한거의모든로깅기능이이를통해처리됨. 어플리케이션별로사용할로거 ( 로거명기반 ) 를정의하고이에대해로그레벨과 Appender 를지정할수있음. 로그를출력하는위치를의미하며, Log4J API 문서의 XXXAppender 로끝나는클래스들의이름을보면, 출력위치를어느정도짐작할수있음. Appender 의출력포맷 - 일자, 시간, 클래스명등여러가지정보를선택하여로그정보내용으로지정할수있음

202 12. Logging - 설명 (3/5) 로그레벨지정하기 log4j 에서는기본적으로 debug, info, warn, error, fatal 의다섯가지로그레벨이있음 (FATAL > ERROR > WARN > INFO > DEBUG > TRACE) 로그레벨 설명 Fatal - 아주심각한에러가발생한상태를나타냄. 시스템적으로심각한문제가발생해서어플리케이션작동이불가능할경우가해당하는데, 일반적으로는어플리케이션에서는사용할일이없음. Error - 요청을처리하는중문제가발생한상태를나타냄 Warn - 처리가능한문제이지만, 향후시스템에러의원인이될수있는경고성메시지를나타냄. Info - 로그인, 상태변경과같은정보성메시지를나타냄. Debug - 개발시디버그용도로사용할메시지를나타냄. Trace - log4j 에서신규추가된레벨으로서. 디버그레벨이너무광범위한것을해결하기위해서좀더상세한상태를나타냄

203 12. Logging - 설명 (4/5) Appender(1/2) log4j 는콘솔, 파일, DB, socket, message, mail 등다양한로그출력대상과방법을지원하는데, 이에대해 log4j 의 Appender 로정의할수있다. Appender 설명 ConsoleAppender - 콘솔화면으로출력하기위한 appender 임 - org.apache.log4j.consoleappender : Console 화면으로출력하기위한 Appender FileAppender - FileAppender 는로깅을파일에하고싶을때사용함. RollingFileAppender DailyRollingFileAppender - FileAppender 는지정한파일에로그가계속남으므로한파일의크기가지나치게커질수있으며, 계획적인로그관리가불가능해짐. - RollingFileAppender 는파일의크기또는파일백업인덱스등의지정을통해서특정크기이상파일의크기가커지게되면기존파일을백업파일로바꾸고, 다시처음부터로깅을시작함 - 설정한날짜또는조건에맞춰로깅을수행함. - 생성자 DailyRollingFileAppender(Layout layout, String filename, String datepattern); 를이용 해서객체의생성과함께 log 가 roll 되는시간을지정해줄수도있고기본생성자로생성후 setdatepattern() 을이용해서지정해줄수도있음

204 12. Logging - 설명 (5/5) Appender(2/2) Appender 설명 JDBCAppender - DB 에로그를출력하기위한 Appender 로하위에 Driver, URL, User, Password, Sql 과같은 parameter 를정의할수있음. - 다음은 log4j.xml 파일내의 JDBCAppender 에대한속성정의내용임. EgovDBAppender ( 전자정부확장 Appender) - log4j-1.3alpha-8 의 DBAppender 를 extends 하고있으며 usesupportsgetgeneratedkeys flag 에따라 JDBC3.0 의 getgeneratedkeys 를사용하지않는옵션추가한 Appeder 임. (Oracle 인경우 DBAppender 를그냥쓸때 getgeneratedkeys 실행시 허용되지않는작업 에러가발생하는문제를회피하기위해확장 ) EgovJDBCAppender ( 전자정부확장 Appender) - Singleton 을구현하고있으며, spring 의 datasource bean 을 injection 할수있도록 Annotation Bean 으로도설정되어있어야함. - log4j 의 JDBCAppender 을 extends 하고있으며 JDBCAppender 는 log4j 의접속설정을따라매번 Connection 을직접생성하게되나, EgovJDBCAppender 는 Spring 의 datasource 를 Annotation 형식으로 injection 하여사용할수있게확장한 Appender 임

205 12. Logging - 참고자료 Apache Logging Services Project

206 13. Mail - 개요 서비스개요 을송신하는기능을제공하는서비스 주요기능 송신 SMTP 표준을준수하여 송신 송신시간단히텍스트만보내기 송신시파일첨부하기 송신시 URL을통해첨부하기 송신시 HTML 이메일보내기 송신시인증처리하기

207 13. Mail 설명 (1/5 ) Mail 서비스 전자정부프레임워크에서는 Mail 발송을쉽게처리하기위해 Jakarta Commons API를사용 Commons 은내부적으로 Java Mail API와 JavaBeans Activation API 를제공 Mail 서비스의종류 간단히텍스트만보내기 파일첨부하기 URL을통해첨부하기 HTML 이메일보내기 인증처리하기

208 13. Mail 설명 (2/5 ) 간단히텍스트만보내기 org.apache.commons.mail.simple 은가장중심이되는 org.apache.commons.mail. 을상속받아 setmsg(java.lang.string msg) 만을구현한가장기본적인클래스 SMTP서버지정 : sethostname(java.lang.string ahostname) 받는사람의메일주소 : addto(java.lang.string ) or addto(java.lang.string , java.lang.string name) 보내는사람의메일주소 : setfrom(java.lang.string ) or setfrom(java.lang.string , java.lang.string name) 여러사람에게메일을보낼경우 : addto 함수의추가

209 13. Mail 설명 (3/5 ) 간단히텍스트만보내기 (Source) public static void main(string args[])throws MailException { Simple = new Simple (); // sethostname 에실제메일서버정보 .setcharset("euc-kr"); // 한글인코딩 .sethostname("mail.myserver.com"); //SMTP 서버설정 try { .addto( egov@somewhere.org", egov man"); // 수신자추가 } catch ( Exception e) { e.printstacktrace(); } try { .setfrom("me@apache.org", "Me"); // 보내는사람 } catch ( Exception e) { e.printstacktrace(); } .setsubject("test message"); // 메일제목 .setcontent("simple 메일 Test 입니다 ", "text/plain; charset=euc-kr"); try { .send(); } catch ( Exception e) {

210 13. Mail 설명 (4/5 ) Mail 에파일첨부하기 ( 특징 ) org.apache.commons.mail.simple 은가장중심이되는 org.apache.commons.mail. 을상속받아 setmsg(java.lang.string msg) 만을구현한가장기본적인클래스 첨부파일을보내려면 org.apache.commons.mail. attachment 클래스와 org.apache.commons.mail.multipart 클래스를사용하면됨 파일경로와파일설명등을추가하여 setname(java.lang.string name) 을통해첨부되는파일명을설정한다. 그후 MultiPart 을통해 Simple 처럼기본메일정보를설정 그리고 MultiPart 의 attach() 함수를통해첨부파일을추가하여전송 만약첨부파일이두개이상이라면 Attachment 를여러개생성하여파일정보를설정한후 attach() 를통해추가 Attachment 객체를생성한뒤 .attach() 를사용해서첨부할파일을추가해주기만하면된다. 실제파일명은한글이포함되더라도, Attachment.setName() 메소드를사용해서파일명을변경해서전송할수도있다. 주의할점은 1.0 버전의 Commons 은파일명을한글로전달할경우, 파일명이올바르게전달되지않고깨진다는점이다. ( 파일자체는올바르게전송된다.) 따라서 1.0 버전의 Common 을사용하여파일을전송할때에는알파벳과숫자로만구성된이름의파일을전송한다

211 13. Mail 설명 (5/5 ) Mail 에파일첨부하기 (Source) // 첨부할 attachment 정보를생성합니다 Attachment attachment = new Attachment(); attachment.setpath("c:\\xxxx.jpg"); attachment.setdisposition( attachment.attachment); attachment.setdescription(" 첨부관련 TEST 입니다 "); attachment.setname("xxxx.jpg"); // // 기본메일정보를생성합니다 MultiPart = new MultiPart (); .setcharset("euc-kr");// 한글인코딩 .sethostname("mail.myserver.com"); .addto("egov@egov.org", " 전자정부 "); .setfrom("egovto@egov.org", "Me"); .setsubject(" 전자정부첨부파일 TEST 입니다 "); .setmsg(" 여기는첨부관련내용을입력합니다 "); // 생성한 attachment 를추가합니다 .attach(attachment); // 메일을전송합니다 .send();

212 13. Mail - 참고자료 Apache Commons- UserGuide Commons- Commons- API

213 14. Marshalling/Unmarshalling - 개요 서비스개요 객체를특정데이터형식으로변환하고, 반대로특정데이터형식으로작성된데이터를객체로변환하는기능을제공하는서비스 메모리상에존재하는객체를물리적장치에저장하거나네트워크를통해전송하기위해사용 Spring Web Service OXM WS는 Server와 Client 두대상간의데이터를주고받는기술중에하나이다. 정보를요청하는쪽이 Client이다.(Client는 Server 가될수도있고일반사용자가될수도있다.) 요청한정보를받아서알맞게처리후결과값을리턴하는쪽이 Server이다. Client < XML > Server WS는 XML(WSDL) 형식으로데이터를주고받는다. 따라서이 XML를객체화하거나객체를 XML화해야한다. 그것이 Marshalling,Unmarshalling이다. OXM Utill은 JAXB,Castor,XMLBeans,JiBX,XStream.. 등여러가지가있다. Client(OXM) < XML(WSDL) > (OXM)Server

214 14. Marshalling/Unmarshalling - 설명 (1/6) 주요기능 Marshalling 객체를특정데이터형식으로변환 변환된데이터는 Unmarshalling 기능을이용하여원본객체로생성가능해야함 Unmarshalling 특정데이터형식으로작성된정보를이용하여, 해당하는객체생성 생성된객체는 Marshalling 기능을이용하여원본데이터로변환가능해야함 Castor 와 XMLBeans 의 Marshaller, Unmarshaller 사용하기 Spring's OXM은다양한 Java-XML Binding 오픈소스를지원한다. 여기서는오픈소스 Castor와 XMLBeans를사용하여구현한가이드프로그램을제시한다. Castor Configuration <bean id="divertcastor" class="egovframework.rte.fdl.divert.divertcastor"> <property name="marshaller" ref="castormarshaller" /> <property name="unmarshaller" ref="castormarshaller" /> </bean> <bean id="castormarshaller" class="org.springframework.oxm.castor.castormarshaller" />

215 14. Marshalling/Unmarshalling - 설명 (2/6) Castor Guide Program(Java Object 의데이터를 XML 문서로 DataBinding Sample Source = "castormarshaller") private Marshaller marshaller; public void testmarshalling() { try { FileOutputStream os = null; List<Writer> book2writers = new ArrayList<Writer>(); book2writers.add(new Writer("J,J.R 툴킨 ")); book2writers.add(new Writer("J.J.T 툴킨 ")); BookMg bookmg2 = new BookMg(" ", " 반지의제왕 ", book2writers);? os = new FileOutputStream("CasterBook.xml"); marshaller.marshal(bookmg2, new StreamResult(os));? } catch (Exception e) { logger.debug(e.getmessage()); e.printstacktrace(system.err); fail("testmarshalling failed!"); } }

216 14. Marshalling/Unmarshalling - 설명 (3/6) Castor Guide Program(XML 문서를 JavaObject 로 DataBinding Sample Source = "castormarshaller") private Unmarshaller public void testunmarshalling() { FileInputStream is = null; try { is = new FileInputStream("CasterBook.xml"); bookmg = (BookMg) unmarshaller.unmarshal(new StreamSource(is)); writers = bookmg.getwriters(); for (Iterator i = writers.iterator(); i.hasnext(); ) { Writer writer = (Writer)i.next(); } }... }

217 14. Marshalling/Unmarshalling - 설명 (4/6) XMLBeans Configuration <bean id="divertxmlbeans" class="egovframework.rte.fdl.divert.divertxmlbeans"> <property name="marshaller" ref="xmlbeansmarshaller" /> <property name="unmarshaller" ref="xmlbeansmarshaller" /> </bean> <bean id="xmlbeansmarshaller" class="org.springframework.oxm.xmlbeans.xmlbeansmarshaller" />

218 14. Marshalling/Unmarshalling - 설명 (5/6) XMLBeans Guide Program(Java Object 의데이터를 XML 문서로 DataBinding Sample Source = "xmlbeansmarshaller") private Marshaller public void testmarshalling() { FileOutputStream os = null; userdoc = UserinfoDocument.Factory.newInstance(); userelement = userdoc.addnewuserinfo(); userelement.setname(" 홍길동 "); userelement.setage(31); userelement.setphone( ); xmloptions = new XmlOptions(); xmloptions.setsaveprettyprint(); xmloptions.setsaveprettyprintindent(4); xmloptions.setcharacterencoding("euc-kr"); try { os = new FileOutputStream("XMLBeanGen.xml"); marshaller.marshal(userdoc, new StreamResult(os)); }catch(exception ee) {

219 14. Marshalling/Unmarshalling 설명 (6/6) XMLBeans Guide Program(XML 문서를 JavaObject 로 DataBinding Sample Source = "xmlbeansmarshaller") private Unmarshaller public void testunmarshalling() { FileInputStream is = null; try { is = new FileInputStream("XMLBeanGen.xml"); userdoc = (UserinfoDocument) unmarshaller.unmarshal(new StreamSource(is)); userelement = userdoc.getuserinfo(); }catch(filenotfoundexception fnde){ fnde.getstacktrace(); fail("testunmarshalling failed!"); } catch(ioexception ioe){ ioe.getstacktrace(); }... }

220 14. Marshalling/Unmarshalling - 참고자료 Spring Framework OXM class API Castor XMLBeans

221 15. Object Pooling - 개요 서비스개요 객체에대한 Pooling기능을제공하는서비스이다. 객체의생성비용이크고, 생성횟수가많으며, 평균적으로사용되는객체의수가적은경우, 성능을향상시키기위해서사용한다. Object Pool은소프트웨어디자인패턴으로서, 객체를필요에따라생성하고파괴하는방식이아닌, 적절한개수의객체를미리사용가능한상태로생성하여이를이용하는방식이다. Client는 Pool에객체를요청하여객체를얻은후, 업무를수행한다. 얻어온객체를이용하여업무수행을끝마친후, 객체를파괴하는것이아니라 Pool에게돌려주어다른 Client가사용할수있도록한다. Object Pooling은객체생성비용이크고, 객체생성횟수가많으며, 평균적으로사용되는객체의수가적은경우, 높은성능의향상을가져다준다. 주요기능 Pool 초기화 (Initialization) 특정객체에대한 Pool 생성 Pool 초기값및최대값을설정하면, 초기값개수만큼객체를생성하여 Pool에추가함 객체할당 (Allocate) Pool에사용가능한객체가있을경우, 객체를할당하고사용가능한객체가없을경우, 만약 Pool 크기가최대값보다작으면새로운객체를생성하여할당하고, Pool의크기가최대값인경우, 예외처리를수행함

222 15. Object Pooling - 설명 (1/5) 객체반환 (Release) 사용이완료된객체를 Pool 로반환하고, Pool 로반환된객체는재사용할수있도록초기화함 ObjectPool Guide Program Configration <bean id="dbcpobjectpool" class="egovframework.rte.fdl.objectpool.dbcp.dbcpobjectpoolset"> <property name="pool" ref="dbcpobjectpooler" /> </bean> <bean id="dbcpobjectpooler" class="egovframework.rte.fdl.objectpool.dbcp.dbcpobjectpool" />

223 15. Object Pooling - 설명 (2/5) ObjectPool 설정필드 설정 설명 maxactive 커넥션풀이제공할최대커넥션개수 whenexhaustedaction 커넥션풀에서가져올수있는커넥션이없을때어떻게동작할지를지정한다. maxwait 사용되지않고풀에저장될수있는최대커넥션개수. 음수일경우제한이없다. maxidle 사용되지않고풀에저장될수있는최소커넥션개수. testonborrow True 일경우커넥션풀에서커넥션을가져올때커넥션이유효한지의여부를검사한다. testonreturn True 일경우커넥션풀에서커넥션을반환할떄커넥션이유효한지의여부를검사한다. timebetweenevctiionrunsmillis 사용되지않는커넥션을추출하는쓰레드의실행주기를지정한다. numtestsperevictionrun 사용되지않는커넥션을몇개검사할지지정한다. minevictableidletimemillis 사용되지않는커넥션을추출할때이속성에서지정한시간이상비활성화상태인커넥션만추출한다. testwhileidle True 일경우비활성화커넥션을추출할떄커넥션이유효한지의여부를검사해서유효하지않은켜넥션을풀에서제거한다

224 15. Object Pooling - 설명 (3/5) Guide Program jdbc_driver,username,password 를 jdbc.properties 로부터읽어온다. private void loadproperties() throws IOException { String filename_ = Thread.currentThread().getContextClassLoader().getResource("jdbc.properties").getFile(); Properties props = null; FileInputStream fis = null; props = new Properties(); fis = new FileInputStream(fileName_); props.load(new BufferedInputStream(fis)); fis.close(); g_driver = props.getproperty("driver"); g_url = props.getproperty("dburl"); g_user = props.getproperty("username"); g_password = props.getproperty("password"); }

225 15. Object Pooling - 설명 (4/5) Guide Program jdbc.properties 를통해서데이터베이스접속정보를얻어온다. private void setupdriver(string driver,string url,string user,string password)throws Exception { Class.forName(driver); ObjectPool 설정세팅 GenericObjectPool connectionpool = new GenericObjectPool(null); connectionpool.setmaxactive(maxactive); connectionpool.settestwhileidle(testwhileidle); 실제 DB와의커넥션을 connectionpool.setnumtestsperevictionrun(numtestsperevictionrun); 연결해주는팩토리생성 ConnectionFactory connectionfactory = new DriverManagerConnectionFactory(url,user,password); PoolableConnectionFactory poolableconnectionfactory = new PoolableConnectionFactory(connectionFactory, connectionpool, null, null, false, true); PoolingDriver poolingdriver = new PoolingDriver(); poolingdriver.registerpool("database", connectionpool); } Connection Pool 이 PoolableConnection 객체를생성할때사용할 PoolableConnectionFactory 생성

226 15. Object Pooling - 설명 (5/5) Guide Program DbcpObjectpoolTest.java = "dbcpobjectpooler") private DbcpObjectpool public void runmodule() { Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; String sql = "select * from emp"; try { con = pool.getconnection(); pstmt = con.preparestatement(sql); rs = pstmt.executequery(); logger.debug("module1"); while(rs.next(){ logger.debug(rs.getstring("ename")); } }

227 15. Object Pooling - 참고자료 Apache Commons Pool class API

228 16. Property - 개요 서비스개요 외부파일이나환경정보에구성되어있는 key, value의쌍을내부적으로가지고있으며, 어플리케이션이이특정 key에대한 value에접근할수있도록해주는서비스 주로시스템의설치환경에관련된정보나, 잦은정보의변경이요구되는경우외부에서그정보를관리하게함으로써시스템의가변성을향상시킴 주요기능 외부별도의파일에설정정보를저장 외부파일은절대 / 상대경로나클래스패스로접근하여사용 다양한 Character Set을지원 서버의재기동없이프로퍼티를적용 문자열 key에모든객체를 value에저장 Key 문자열을가지고 value 객체조회 전체 key-value 쌍을가져오는기능제공

229 16. Property - 설명 (1/5) Property 시스템의설치환경에관련된정보나, 잦은정보의변경이요구되는경우외부에서그정보를관리하게함 시스템의유연성을높일수있음 Spring Bean 설정파일에관리하고자하는정보를입력 (Bean 설정파일사용 ) 하거나외부파일에정보입력후에 Bean 설정파일에서그파일위치를입력하여이용

230 16. Property - 설명 (2/5) Bean 설정파일사용 (1/2) Configuration <bean name="propertyservice class="egovframework.rte.fdl.property.impl.egovpropertyserviceimpl destroy-method="destroy"> <property name="properties"> <map> <entry key="aaaa" value="1234"/> </map> </property> </bean> Sample protected EgovPropertyService propertyservice public void testpropertiesservice() throws Exception { assertequals("1234",propertyservice.getstring("aaaa")); }

231 16. Property - 설명 (3/5) Bean 설정파일사용 (2/2) 제공유형별설정 / 사용방법 제공유형 설정방법 사용방법 String key= A value= ABC propertyservice.getstring( A ) boolean key= B value= true propertyservice.getboolean( B ) int key= C value= 123 propertyservice.getint( C ) long key= D value= 123 propertyservice.getlong( D ) short key= E value= 123 propertyservice.getshort( E ) float key= F value= 123 propertyservice.getfloat( F ) Vector key= G value= 123,456 propertyservice.getvector( G )

232 16. Property - 설명 (4/5) 외부설정파일사용 (1/2) Configuration <bean name="propertyservice" class="egovframework.rte.fdl.property.impl.egovpropertyserviceimpl destroy-method="destroy > <property name="extfilename"> <set> <map> <entry key="encoding" value="utf-8"/> <entry key="filename" value="file:./src/**/refresh-resource.properties"/> </map> <value>classpath*:properties/resource.properties</value> </set> </property> </bean> properties AAAA=

233 16. Property - 설명 (5/5) 외부설정파일사용 (2/2) Sample protected EgovPropertyService propertyservice public void testpropertiesservice() throws Exception { assertequals("1234",propertyservice.getstring("aaaa")); } 실시간갱신방법 외부파일에기재된 property 내용수정 propertyservice.refreshpropertyfiles() 호출

234 17. Resource - 개요 서비스개요 국제화 (Internationalization) 및현지화 (Localization) 등을지원하기위하여, key값을이용하여, 각국가및언어에해당하는메시지를읽어오는서비스 주요기능 메시지참조 국가및언어에따라미리저장되어있는메시지정보에서, 특정 key 값에해당하는메시지를조회함

235 17. Resource - 설명 (1/5) Spring Message Source Spring 은 MessageSource 인터페이스를확장하여어플리케이션에서사용하는메시지에대한일관된처리및 국제화를지원함 Message 맛보기예제 (1/2) 환경설정 MessageSource 를구현한 bean 을설정 아래설정에서 egovframework-message 로지정한파일은실제로는 egovframework-message.properties 로정의되어 있음 <bean name="messagesource" class="org.springframework.context.support.resourcebundlemessagesource"> <property name="usecodeasdefaultmessage"> <value>true</value> </property> <property name="basenames"> <list> <value>egovframework-message</value> </list> </property> </bean>

236 17. Resource - 설명 (2/5) Message 맛보기예제 (2/2) 메시지사용예제 messagesource.getmessage() 메소드를이용하여 Message 를얻음 //egovframework-message.properties 에정의된메시지내용. MessageSource messagesource ; String getmsg = messagesource.getmessage("resource.basic.msg1", null, Locale.getDefault() ); assertequals("get Message Success!", getmsg, "message1");

237 17. Resource - 설명 (3/5) Message Locale 사용 (1/2) 동일한메시지키를가지고언어별로별도로설정관리하여사용자에따라서사용자에맞는언어로메시지를제공할수있음 환경설정 egovframework-message-locale 로지정한파일을 egovframework-message-locale_ko.properties, egovframeworkmessage-locale_en.properties로정의하고동일한메시지키에해당하는메시지를달리지정함 <bean name="messagesource" class="org.springframework.context.support.resourcebundlemessagesource"> <property name="usecodeasdefaultmessage"> <value>true</value> </property> <property name="basenames"> <list> <value>egovframework-message-locale </value> </list> </property> </bean>

238 17. Resource - 설명 (4/5) Message Locale 사용 (2/2) Propreties File 설정 //egovframework-message-locale_ko.properties 파일내용 resource.locale.msg1= 메시지 1 //egovframework-message-locale_en.properties 파일내용 resource.locale.msg1=en_message1 사용예제 Locale 정보에따라서추출되는메시지의내용이달라짐 //egovframework-message.properties 에정의된메시지내용. resource.basic.msg1=message1 String getmsg = messagesource.getmessage("resource.locale.msg1", null, Locale.KOREAN ); assertequals("get Message Success!", getmsg, " 메시지 1"); String getmsg = messagesource.getmessage("resource.locale.msg1", null, Locale.ENGLISH ); assertequals("get Message Success!", getmsg, "en_message1");

239 17. Resource - 설명 (5/5) Message Parameter 프로그램수행중에발생되는메시지에파라미터를추가하여제공 메시지정의시 {0},{1} 등으로파라미터선언 resource.basic.msg3=message {0} {1} 사용예제 parameter 에 1 과 2 를지정하여 getmessage 의두번째인자에넣고호출하면리턴메시지로 message 1 2 를얻음 Object[] parameter = { new String("1"), new Integer(2) }; String getmsg = messagesource.getmessage("resource.basic.msg3", parameter, Locale.getDefault() ); assertequals("get Message Success!", getmsg, "message 1 2");

240 17. Resource - 참고자료 The Spring Framework - Reference Documentation

241 18. Scheduling - 개요 서비스개요 어플리케이션서버내에서주기적이거나반복적인작업을지원하는서비스 주요기능 속성 ( 반복주기, 반복회수등 ) 을지정및변경하는기능을제공 주기적이거나반복적으로수행될작업을선언하여관리 주기적이거나반복적으로수행될작업들의주기, 반복회수등을선언하여관리 Unix의 Cron command와유사한형태의표기법지원

242 18. Scheduling - 설명 (1/11) Quartz 스케쥴러 오픈소스작업스케줄링프레임워크 자바로구현되어있으며독립어플리케이션혹은 J2EE환경에서통합되어실행됨 다양한작업스케줄링지원 Unix 시스템의 cron 과유사한표현식지원 확장가능한리스너제공 오류시작업복구 POJO 혹은 EJB 작업지원 JTA 트랜잭션지원 클러스터링지원 멀티쓰레딩지원 RMI를통한리모트사용지원

243 18. Scheduling - 설명 (2/11) Quartz 스케쥴러주요요소 Scheduler Quartz 실행환경을관리하는핵심개체 Job 사용자가수행할작업을정의하는인터페이스로서 Trigger 개체를이용하여스케줄링됨. JobDetail What? Job JobDetail When? Trigger 작업명과작업그룹과같은수행할 Job 에대한상세 Trigger 정보를정의하는개체 Scheduler 정의한 Job 개체의실행스케줄을정의하는개체로서 Scheduler 개체에게 Job 수행시점을알려주는개체 Quartz 스케줄러특징 수행작업을정의하는 Job과실행스케줄을정의하는 Trigger를분리함으로써유연성을제공함 Job 과실행스케쥴을정의한경우, Job은그대로두고실행스케쥴만을변경할수있음 하나의 Job에여러개의실행스케쥴을정의할수있음

244 18. Scheduling - 설명 (3/11) Quartz 스케쥴러사용예제 (1/2) 사용자정의 Job 사용자는업무처리를수행할 Job 개체를생성하기위해 org.quartz.job 인터페이스를구현하고심각한오류가발생한경우 JobExecutionException 예외를던질수있음 Job 인터페이스는단일메소드로 execute() 가정의되어있음 public class DumbJob implements Job { public void execute(jobexecutioncontext context) throws JobExecutionException { System.out.println("DumbJob is executing."); } }

245 18. Scheduling - 설명 (4/11) Quartz 스케쥴러사용예제 (2/2) Quartz 스케줄등록 1 우선 Job 설정을위해 JobDetail 클래스를정의한다. 2 TriggerUtils을이용하여매일 8시30분실행하는 Trigger를생성한다. 3 마지막으로, Scheduler에 JobDetail과 Trigger를등록한다. JobDetail jobdetail = new JobDetail("myJob",// Job 명 sched.default_group, // Job 그룹명 ('null' 값인경우 DEFAULT_GROUP 으로정의됨 ) DumbJob.class); // 실행할 Job 클래스 Trigger trigger = TriggerUtils.makeDailyTrigger(8, 30); // 매일 08 시 30 분실행 trigger.setstarttime(new Date()); // 즉시시작 trigger.setname("mytrigger"); sched.schedulejob(jobdetail, trigger);

246 18. Scheduling - 설명 (5/11) Spring 과 Quartz 통합 Spring은 Scheduling 지원을위한통합클래스를제공함 Spring의 Quartz 작업생성방법 JobDetailBean을이용한방법으로, QuartzJobBean을상속받아 Job 클래스생성 MethodInvokingJobDetailFactoryBean을이용하여 Bean 객체의메소드직접호출

247 18. Scheduling - 설명 (6/11) JobDetailBean을이용한작업생성 (1/2) Job 작성 QuartzJobBean은 Quartz Job 인터페이스구현체 아래예제의 SayHelloJob 클래스는작업생성을위해 QuartzJobBean의 executeinternal(..) 함수를오버라이드함 package egovframework.rte.fdl.scheduling.sample; public class SayHelloJob extends QuartzJobBean { } private String name; public void setname(string name) { this.name = name; protected void executeinternal(jobexecutioncontext ctx) throws JobExecutionException { System.out.println("Hello, " + name); }

248 18. Scheduling - 설명 (7/11) JobDetailBean을이용한작업생성 (2/2) JobDetailBean 설정 JobDetail 작업실행에필요한정보를담고있는객체 Spring은 JobDetail 빈생성을위해 JobDetailBean을제공함 jobdataasmap 개체를이용하여 JobDetail 개체에 Job 설정에필요한속성정보를전달함 <bean id="jobdetailbean" class="org.springframework.scheduling.quartz.jobdetailbean"> <property name="jobclass" value="egovframework.rte.fdl.scheduling.sample.sayhellojob" /> <property name="jobdataasmap"> <map> <entry key="name" value="jobdetail" /> </map> </property> </bean>

249 18. Scheduling - 설명 (8/11) MethodInvokingJobDetailFactoryBean을이용한작업생성 작업수행을할 Bean 클래스정의 package egovframework.rte.fdl.scheduling.sample; public class SayHelloService { } public void sayhello() { System.out.println("Hello"); } 정의한 Bean 객체의메소드를직접호출하는작업을생성하기위해 MethodInvokingJobDetailFactoryBean 정 의 <bean id="sayhelloservice" class="egovframework.rte.fdl.scheduling.sample.sayhelloservice"> <property name="name" value="factorybean" /> </bean> <bean id="jobdetailfactorybean" class="org.springframework.scheduling.quartz.methodinvokingjobdetailfactorybean"> <property name="targetobject" ref="sayhelloservice" /> <property name="targetmethod" value="sayhello" /> <property name="concurrent" value="false" /> </bean>

250 18. Scheduling - 설명 (9/11) 작업스케쥴링 (1/2) SimpleTrigger 특정시간, 반복회수, 대기시간과같은단순스케쥴링에사용됨 CronTrigger 유닉스의 Cron 명령어와유사하며, 복잡한스케쥴링에사용됨 CronTrigger 는달력을이용하듯특정시간, 요일, 월에 Job 을수행하도록설정할수있음 SimpleTriggerBean 을이용한설정예 <bean id="simpletrigger" class="org.springframework.scheduling.quartz.simpletriggerbean"> <property name="jobdetail" ref="jobdetailbean" /> <!-- 즉시시작 --> <property name="startdelay" value="0" /> <!-- 매 10 초마다실행 --> <property name="repeatinterval" value="10000" /> </bean>

251 18. Scheduling - 설명 (10/11) 작업스케쥴링 (2/2) CronTriggerBean 을이용한설정 <bean id="crontrigger" class="org.springframework.scheduling.quartz.crontriggerbean"> <property name="jobdetail" ref="jobdetailfactorybean" /> <!-- 매 10 초마다실행 --> <property name="cronexpression" value="*/10 * * * *?" /> </bean> 크론표현식 초 (0-59) 분 (0-59) 시간 (0-23) 날짜 (1-31) 월 (1-12) 요일 (1-7) 년도 ( 옵션 ) 특수문자 1. * : 항상실행의의미 2.? : 날짜와요일은상호배타적이므로둘중하나를설정하지않음을표시함 사용예제 ? * * 매일 10시 15분에실행 *? 매월 15일 10시15분에실행 크론표현식에대한자세한설명은아래사이트참조 Tutorial.html

252 18. Scheduling - 설명 (11/11) 작업시작하기 스케줄링한작업의시작을위해 Spring 은 SchedulerFactoryBean 을제공함 <bean id="scheduler class="org.springframework.scheduling.quartz.schedulerfactorybean"> <property name="triggers"> <list> <ref bean="simpletrigger" /> <ref bean="crontrigger" /> </list> </property> </bean>

253 18. Scheduling - 참고자료 Quartz 매뉴얼 Spring Scheduling 매뉴얼 Quartz API Spring API Quartz Cron 표현식

254 19. Server Security - 개요 서비스개요 응용프로그램작성시발생될수있는보안상의문제점은인증및접근제어, 계정관리, 정보통제및환경설정등의상황에서발생할수있으며이에대한대응을위한서비스제공 기존의 Servlet spec에서 Security의한계 container 이식성, config. Requirements, 제한된웹요청 security의한계 서비스레이어보안및도메인객체레벨보안미지원 주요기능 인증 Web URL 페이지인증 Method invocation 인증 권한부여 세션관리

255 19. Server Security - 설명 (1/24) Why Spring Security? 엔터프라이즈어플리케이션을위한인증 (Authentication), 권한처리 (Authorization) 서비스를제공하는강력하고유연한보안솔루션 Servlet Filter 와 Java AOP 를통한 Interception를사용하여보안을강제하며 Spring의 IoC 와 lifecycle 서비스기반으로동작 authentication, Web URL authorization, Method 호출 authorization, 도메인객체기반의 security 처리, 채널보안 (https 강제 ), Human user 인식등의주요기능을제공 Web request 보안에더하여 Service Layer 및인스턴스수준의보안제공으로 Layering issue 해결및웹클라이언트외의다양한 rich 클라이언트 / 웹서비스에대한보안제어를지원 재사용성, 이식성, 코드품질, 레퍼런스 ( 정부, 은행, 대학, 기업등많은 business field), 다양한타프레임워크지원, community Spring Security는편의성뿐아니라보안레이어컴포넌트의재사용성이높은오픈소스보안프레임워크

256 19. Server Security - 설명 (2/24) Architecture 일반적인웹어플리케이션의인증절차 전형적인웹리소스접근개념도 [ 그림 ]

257 19. Server Security - 설명 (3/24) Architecture HTTP Request Filter Chain - AuthenticationProcessingFilter AuthenticationProcessingFilter 와 dependencies

258 19. Server Security - 설명 (4/24) Architecture DB Schema(1/4) 자원 자원 - 역할매핑 자원 ID 권한 자원 ID 자원명자원패턴설명자원유형정렬순서생성일자수정일자 사용자 사용자 ID 사용자이름패스워드사용여부 역할 권한역할명권한설명생성일자수정일자 권한계층 부모역할자식역할 사용자 - 권한매핑 사용자 ID 권한

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 1. AOP - 개요 (1/7) 서비스개요 객체지향프로그래밍 (Object Oriented Programming) 을보완하는개념으로어플리케이션을객체지향적으로모듈화하여작성하더라도다수의객체들에분산되어중복적으로존재하는공통관심사가여전히존재한다. AOP는이를횡단관심으로분리하여핵심관심과엮어서처리할수있는방법을제공한다. 로깅, 보안, 트랜잭션등의공통적인기능의활용을기존의비즈니스로직에영향을주지않고모듈화처리를지원하는프로그래밍기법

More information

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r Jakarta is a Project of the Apache

More information

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인 표준프레임워크로구성된컨텐츠를솔루션에적용하는것에문제가없는지확인 ( S next -> generate example -> finish). 2. 표준프레임워크개발환경에솔루션프로젝트추가. ( File -> Import -> Existring Projects into

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

Intro to Servlet, EJB, JSP, WS

Intro to Servlet, EJB, JSP, WS ! Introduction to J2EE (2) - EJB, Web Services J2EE iseminar.. 1544-3355 ( ) iseminar Chat. 1 Who Are We? Business Solutions Consultant Oracle Application Server 10g Business Solutions Consultant Oracle10g

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

Spring Data JPA Many To Many 양방향 관계 예제

Spring Data JPA Many To Many 양방향 관계 예제 Spring Data JPA Many To Many 양방향관계예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) 엔티티매핑 (Entity Mapping) M : N 연관관계 사원 (Sawon), 취미 (Hobby) 는다 : 다관계이다. 사원은여러취미를가질수있고, 하나의취미역시여러사원에할당될수있기때문이다. 보통관계형 DB 에서는다 : 다관계는 1

More information

Interstage5 SOAP서비스 설정 가이드

Interstage5 SOAP서비스 설정 가이드 Interstage 5 Application Server ( Solaris ) SOAP Service Internet Sample Test SOAP Server Application SOAP Client Application CORBA/SOAP Server Gateway CORBA/SOAP Gateway Client INTERSTAGE SOAP Service

More information

제11장 프로세스와 쓰레드

제11장 프로세스와 쓰레드 제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드

More information

슬라이드 1

슬라이드 1 1. 개요 - 실행환경연계통합레이어 (1/3) 연계통합레이어는타시스템과의연동기능을제공하는 Layer 임 전자정부개발프레임워크실행환경 서비스그룹 Presentation Layer 설명 업무프로그램과사용자간의 Interface 를담당하는 Layer 로서, 사용자화면구성, 사용자입력정보검증등의기능을제공함 Layer Presentation Layer Logic Business

More information

1

1 1 1....6 1.1...6 2. Java Architecture...7 2.1 2SDK(Software Development Kit)...8 2.2 JRE(Java Runtime Environment)...9 2.3 (Java Virtual Machine, JVM)...10 2.4 JVM...11 2.5 (runtime)jvm...12 2.5.1 2.5.2

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

KYO_SCCD.PDF

KYO_SCCD.PDF 1. Servlets. 5 1 Servlet Model. 5 1.1 Http Method : HttpServlet abstract class. 5 1.2 Http Method. 5 1.3 Parameter, Header. 5 1.4 Response 6 1.5 Redirect 6 1.6 Three Web Scopes : Request, Session, Context

More information

Microsoft PowerPoint - JCO2007_Spring2.0_발표자료_Rev-A.ppt [호환 모드]

Microsoft PowerPoint - JCO2007_Spring2.0_발표자료_Rev-A.ppt [호환 모드] From Spring 1.x Spring 2.0 To 이일민 (Consultant, Epril) 안영회 (Consultant, Epril) 2 목차 q Spring의목표와전략 q Spring 2.0 q Core Container and DI q AOP q Portable Service Abstractions q Web q Spring Portfolio 3 Spring

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

thesis

thesis ( Design and Implementation of a Generalized Management Information Repository Service for Network and System Management ) ssp@nile nile.postech.ac..ac.kr DPE Lab. 1997 12 16 GMIRS GMIRS GMIRS prototype

More information

Spring

Spring Spring MVC 프로젝트생성 2015 Web Service Computing 일반적인스프링의정의 스프링의정의 자바엔터프라이즈개발을편하게해주는오픈소스경량급애플리케이션프레임워크 스프링의기원 로드존슨 (Rod Johnson) 이라는유명 J2EE 개발자가출간한 Expert One-on- One J2EE Design and Development 이라는제목의책에소개된예제샘플

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id=entitymanagerfactory class=org.springframework.orm.jpa.localentitymanagerfactorybean p:persistenceunitname= JPA 와 Hibernate - 스프링의 JDBC 대신에 JPA를이용한 DB 데이터검색작업 - JPA(Java Persistence API) 는자바의 O/R 매핑에대한표준지침이며, 이지침에따라설계된소프트웨어를 O/R 매핑프레임워크 라고한다. - O/R 매핑 : 객체지향개념인자바와관계개념인 DB 테이블간에상호대응을시켜준다. 즉, 객체지향언어의인스턴스와관계데이터베이스의레코드를상호대응시킨다.

More information

[Brochure] KOR_TunA

[Brochure] KOR_TunA LG CNS LG CNS APM (TunA) LG CNS APM (TunA) 어플리케이션의 성능 개선을 위한 직관적이고 심플한 APM 솔루션 APM 이란? Application Performance Management 란? 사용자 관점 그리고 비즈니스 관점에서 실제 서비스되고 있는 어플리케이션의 성능 관리 체계입니다. 이를 위해서는 신속한 장애 지점 파악 /

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W Research & Technique Apache Tomcat RCE 취약점 (CVE-2019-0232) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE-2019-0232 취약점은 Windows 시스템의 Apache Tomcat 서버에서 enablecmdlinearguments

More information

Microsoft PowerPoint - Smart CRM v4.0_TM 소개_20160320.pptx

Microsoft PowerPoint - Smart CRM v4.0_TM 소개_20160320.pptx (보험TM) 소개서 2015.12 대표전화 : 070 ) 7405 1700 팩스 : 02 ) 6012 1784 홈 페이지 : http://www.itfact.co.kr 목 차 01. Framework 02. Application 03. 회사 소개 01. Framework 1) Architecture Server Framework Client Framework

More information

No Slide Title

No Slide Title J2EE J2EE(Java 2 Enterprise Edition) (Web Services) :,, SOAP: Simple Object Access Protocol WSDL: Web Service Description Language UDDI: Universal Discovery, Description & Integration 4. (XML Protocol

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

Spring Boot

Spring Boot 스프링부트 (Spring Boot) 1. 스프링부트 (Spring Boot)... 2 1-1. Spring Boot 소개... 2 1-2. Spring Boot & Maven... 2 1-3. Spring Boot & Gradle... 3 1-4. Writing the code(spring Boot main)... 4 1-5. Writing the code(commandlinerunner)...

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 7 장클래스와객체 이번장에서학습할내용 객체지향이란? 객체 메시지 클래스 객체지향의장점 String 클래스 객체지향개념을완벽하게이해해야만객체지향설계의이점을활용할수있다. 실제세계는객체로이루어진다. 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 절차지향과객체지향 절차지향프로그래밍 (procedural programming): 문제를해결하는절차를중요하게생각하는방법

More information

4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편

4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편 4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편리한것들 1. slf4j 를활용한 Logger 생성을편리하게해보자 2. AOP 설정 JDBC

More information

Network Programming

Network Programming Part 5 확장된 Network Programming 기술 1. Remote Procedure Call 2. Remote Method Invocation 3. Object Request Broker 2. Java RMI

More information

TTA Journal No.157_서체변경.indd

TTA Journal No.157_서체변경.indd 표준 시험인증 기술 동향 FIDO(Fast IDentity Online) 생체 인증 기술 표준화 동향 이동기 TTA 모바일응용서비스 프로젝트그룹(PG910) 의장 SK텔레콤 NIC 담당 매니저 76 l 2015 01/02 PASSWORDLESS EXPERIENCE (UAF standards) ONLINE AUTH REQUEST LOCAL DEVICE AUTH

More information

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345]) 예외와예외클래스 예외처리 514760-1 2016 년가을학기 12/08/2016 박경신 오류의종류 에러 (Error) 하드웨어의잘못된동작또는고장으로인한오류 에러가발생되면 JVM실행에문제가있으므로프로그램종료 정상실행상태로돌아갈수없음 예외 (Exception) 사용자의잘못된조작또는개발자의잘못된코딩으로인한오류 예외가발생되면프로그램종료 예외처리 추가하면정상실행상태로돌아갈수있음

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 웹서버프로그래밍 2 JSP 개요 01. JSP 개요 (1) 서블릿 (Servlet) 과 JSP(Java Server Page) 서블릿은자바를이용한서버프로그래밍기술 초기웹프로그래밍기술인 CGI(Common Gateway Interface) 를대체하기위해개발되었으나, 느린처리속도, 많은메모리요구, 불편한화면제어등의한계로 PHP, ASP 등서버스크립트언어등장 JSP

More information

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770> i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,

More information

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Crash Unity SDK... Log & Crash Search. - Unity3D v4.0 ios

More information

슬라이드 1

슬라이드 1 EJB and JBoss SEAM 양수열소장 Java Champion, JCO Advisor, Inpion Consulting Agenda Web Framework & EJB What is Seam? Why Seam? Q/A Framework history Main Milestone in Standard & OpenSource 95 96 97 98 99 00

More information

<property name="configlocation" value="classpath:/egovframework/sqlmap/example/sql-map-config.xml"/> <property name="datasource" ref="datasource2"/> *

<property name=configlocation value=classpath:/egovframework/sqlmap/example/sql-map-config.xml/> <property name=datasource ref=datasource2/> * 표준프레임워크로구성된컨텐츠를솔루션에적용 1. sample( 게시판 ) 프로젝트생성 - egovframe Web Project next generate example finish 2. 프로젝트추가 - 프로젝트 Import 3. 프로젝트에 sample 프로젝트의컨텐츠를추가, 기능동작확인 ⓵ sample 프로젝트에서 프로젝트로복사 sample > egovframework

More information

MVVM 패턴의 이해

MVVM 패턴의 이해 Seo Hero 요약 joshua227.tistory. 2014 년 5 월 13 일 이문서는 WPF 어플리케이션개발에필요한 MVVM 패턴에대한내용을담고있다. 1. Model-View-ViewModel 1.1 기본개념 MVVM 모델은 MVC(Model-View-Contorl) 패턴에서출발했다. MVC 패턴은전체 project 를 model, view 로나누어

More information

Cluster management software

Cluster management software 자바네트워크프로그래밍 (OCJP 국제공인자격취득중심 ) 충북대학교 최민 기본예제 예외클래스를정의하고사용하는예제 class NewException extends Exception { public class ExceptionTest { static void methoda() throws NewException { System.out.println("NewException

More information

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 2. 관련연구 2.1 MQTT 프로토콜 Fig. 1. Topic-based Publish/Subscribe Communication Model. Table 1. Delivery and Guarantee by MQTT QoS Level 2.1 MQTT-SN 프로토콜 Fig. 2. MQTT-SN

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

Portal_9iAS.ppt [읽기 전용]

Portal_9iAS.ppt [읽기 전용] Application Server iplatform Oracle9 A P P L I C A T I O N S E R V E R i Oracle9i Application Server e-business Portal Client Database Server e-business Portals B2C, B2B, B2E, WebsiteX B2Me GUI ID B2C

More information

[Brochure] KOR_LENA WAS_

[Brochure] KOR_LENA WAS_ LENA Web Application Server LENA Web Application Server 빠르고확장가능하며장애를선대응할수있는운영중심의고효율차세대 Why 클라우드환경과데이터센터운영의노하우가결집되어편리한 관리기능과대용량트랜잭션을빠르고쉽게구현함으로고객의 IT Ownership을강화하였습니다. 고객의고민사항 전통 의 Issue Complexity Over

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V Mobile Service > IAP > Android SDK IAP SDK TOAST SDK. IAP SDK. Android Studio IDE 2.3.3 Android SDK Version 2.3.3 (API Level 10). Name Reference Version License okhttp http://square.github.io/okhttp/ 1.5.4

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

01(767-774) SAV12-04.hwp

01(767-774) SAV12-04.hwp XML 관점 명세를 이용한 관점지향 프로그래밍의 개선 767 XML 관점 명세를 이용한 관점지향 프로그래밍의 개선 (Improving Aspect Oriented Programming with Aspect Specification using XML) 김 은 선 이 병 정 이 재 호 (Eunsun Kim) (Byungjeong Lee) (Jaeho Lee) 요

More information

Web Application을 구성하는 패턴과 Spring ROO의 사례

Web Application을 구성하는 패턴과 Spring ROO의 사례 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의첫글자들

More information

rmi_박준용_final.PDF

rmi_박준용_final.PDF (RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

슬라이드 1

슬라이드 1 NeoDeveloper 설치가이드 차례 1. 환경 3 2. 설치 3 2.1 웹서버설치 3 Tomcat 7 3 JDK 1.6 3 2.2 NeoDeveloper 설치 3 Neo Developer 서버구성 3 Demo용 User Application 구성 4 Neo Developer 서버 Data File 4 Client 개발 Tool 설치 4 3. 설정 5 3.1

More information

PCServerMgmt7

PCServerMgmt7 Web Windows NT/2000 Server DP&NM Lab 1 Contents 2 Windows NT Service Provider Management Application Web UI 3 . PC,, Client/Server Network 4 (1),,, PC Mainframe PC Backbone Server TCP/IP DCS PLC Network

More information

Apache Ivy

Apache Ivy JBoss User Group The Agile Dependency Manager 김병곤 fharenheit@gmail.com 20100911 v1.0 소개 JBoss User Group 대표 통신사에서분산컴퓨팅기반개인화시스템구축 Process Designer ETL, Input/Output, Mining Algorithm, 통계 Apache Hadoop/Pig/HBase/Cassandra

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

슬라이드 1

슬라이드 1 - 1 - 전자정부개발프레임워크실행환경 5. 업무처리레이어 1. 개요 2. Process Control 3. Exception Handling - 2 - 1. 개요 - 실행환경업무처리레이어 (1/3) 5. 업무처리레이어 업무처리레이어는업무프로그램의업무로직을담당하는 Layer 로서, 업무흐름제어, 에러처리등 의기능을제공함 전자정부개발프레임워크실행환경 서비스그룹

More information

untitled

untitled Push... 2 Push... 4 Push... 5 Push... 13 Push... 15 1 FORCS Co., LTD A Leader of Enterprise e-business Solution Push (Daemon ), Push Push Observer. Push., Observer. Session. Thread Thread. Observer ID.

More information

DBMS & SQL Server Installation Database Laboratory

DBMS & SQL Server Installation Database Laboratory DBMS & 조교 _ 최윤영 } 데이터베이스연구실 (1314 호 ) } 문의사항은 cyy@hallym.ac.kr } 과제제출은 dbcyy1@gmail.com } 수업공지사항및자료는모두홈페이지에서확인 } dblab.hallym.ac.kr } 홈페이지 ID: 학번 } 홈페이지 PW:s123 2 차례 } } 설치전점검사항 } 설치단계별설명 3 Hallym Univ.

More information

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1); void method() 2); void method1() public class Test 3); args) A 제 10 장상속 예제 1) ConstructorTest.java class Parent public Parent() super - default"); public Parent(int i) this("hello"); super(int) constructor" + i); public Parent(char c) this(); super(char) constructor

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 4 (Object) (Class) (Instance) (Method) (Constructor) Memory 1 UML 1 @ & 1 (Real World) (Software World) @ &.. () () @ & 2 (Real World) (Software World) OOA/ Modeling Abstraction Instantiation

More information

Spring 정의 2012 년 1 월 31 일화요일 오젂 9:17 1. 개요 1.1. 목적 수많은프로젝트에서프레임워크나아키텍체에대한관심없이대부분의개발을개발자의능력에젂담시키는것이일반적이다. 이는프로젝트의위험요소를증가시킬뿐만아니라개발완료후유지보수비용을증가시킴으로써추가적인비

Spring 정의 2012 년 1 월 31 일화요일 오젂 9:17 1. 개요 1.1. 목적 수많은프로젝트에서프레임워크나아키텍체에대한관심없이대부분의개발을개발자의능력에젂담시키는것이일반적이다. 이는프로젝트의위험요소를증가시킬뿐만아니라개발완료후유지보수비용을증가시킴으로써추가적인비 Spring 정의 2012 년 1 월 31 일화요일 오젂 9:17 1. 개요 1.1. 목적 수많은프로젝트에서프레임워크나아키텍체에대한관심없이대부분의개발을개발자의능력에젂담시키는것이일반적이다. 이는프로젝트의위험요소를증가시킬뿐만아니라개발완료후유지보수비용을증가시킴으로써추가적인비용부담을초래할뿐더러안정성에도문제가되곤한다. 이에본내용은 Spring Framework를통해앞에서의문제점들을해결할수있는데초점을맞췄으며,

More information

<323020C0CCB8EDC8A32DB0E6B7AEC4C1C5D7C0CCB3CA2E687770>

<323020C0CCB8EDC8A32DB0E6B7AEC4C1C5D7C0CCB3CA2E687770> 한국산학기술학회논문지 Vol. 10, No. 3, pp. 589-595, 2009 이명호 1* 1 세명대학교전자상거래학과 Design and Implementation of Hotel Reservation System Based Spring Framework 2.5 of Lightweight Container Architecture Myeong-Ho Lee

More information

파워포인트 템플릿

파워포인트 템플릿 ibizsoftware 정호열차장 ( 표준프레임워크오픈커뮤니티커미터 ) Agenda 1. ibatis 와 Hibernate 의개념및특징 2. Hibernate 와 JPA 쿼리종류 3. ibatis 와 Hibernate 동시사용을위한 Transaction 처리방안 4. @EntityListeners 활용방법 Agenda 5. Hibernate 사용시 Dynamic

More information

PowerPoint Presentation

PowerPoint Presentation Spring Framework 의이해 - 강사김현오 - 1. 스프링프레임워크개요 1.1 스프링프레임워크개요 1.2 스프링시작하기 스프링의등장배경 POJO 프레임워크 스프링프레임워크 스프링의등장배경 (1/2) 자바엔터프라이즈애플리케이션개발표준인 EJB EJB 를사용하면애플리케이션작성을쉽게할수있다. 저수준의트랜잭션이나상태관리, 멀티쓰레딩, 리소스풀링과같은복잡한저수준의

More information

01-OOPConcepts(2).PDF

01-OOPConcepts(2).PDF Object-Oriented Programming Concepts Tel: 02-824-5768 E-mail: hhcho@selabsoongsilackr? OOP (Object) (Encapsulation) (Message) (Class) (Inheritance) (Polymorphism) (Abstract Class) (Interface) 2 1 + = (Dependency)

More information

슬라이드 1

슬라이드 1 7. [ 실습 ] 예제어플리케이션개발 1. 실습개요 2. 프로젝트환경구성 3. 기본환경설정 4. 예제어플리케이션개발 5. 참조 - 539 - 1. 실습개요 (1/4) 7. [ 실습 ] 예제어플리케이션개발 스프링기반의 EGOV 프레임워크를사용하여구현된예제어플리케이션구현을통하여 Presentation Layer와 Business Layer의연계를살펴본다. 예제어플리케이션구현기능

More information

Web Services 와 EAI

Web Services 와 EAI Spring.NET 프레임워크활용가이드 Version 0.2 엔소아컨설팅대표컨설턴트전병선 Spring.NET 프레임워크활용가이드 애플리케이션프레임워크 Spring.NET 프레임워크 IoC 컨테이너와 DI AOP (Aspect-Oriented Programming) 애플리케이션프레임워크 프레임워크 (framework) 틀구조, 뼈대, 골격, 구조, 구성 애플리케이션프레임워크

More information

신림프로그래머_클린코드.key

신림프로그래머_클린코드.key CLEAN CODE 6 11st Front Dev. Team 6 1. 2. 3. checked exception 4. 5. 6. 11 : 2 4 : java (50%), javascript (35%), SQL/PL-SQL (15%) : Spring, ibatis, Oracle, jquery ? , (, ) ( ) 클린코드를 무시한다면 . 6 1. ,,,!

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가 혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가웹페이지내에뒤섞여있어서웹페이지의화면설계가점점어려워진다. - 서블릿이먼저등장하였으나, 자바내에

More information

I. Introduction... 1 II. Jdbc Support 구현배경 사용자요구사항 p6spy Architecture Architecture InjectionPa

I. Introduction... 1 II. Jdbc Support 구현배경 사용자요구사항 p6spy Architecture Architecture InjectionPa Anyframe Jdbc Support Plugin Version 1.1.0 저작권 2007-2014 삼성 SDS 본문서의저작권은삼성 SDS 에있으며 Anyframe 오픈소스커뮤니티활동의목적하에서자유로운이용이가능합니다. 본문서를복제, 배포할경우에는저작권자를명시하여주시기바라며본문서를변경하실경우에는원문과변경된내용을표시하여주시기바랍니다. 원문과변경된문서에대한상업적용도의활용은허용되지않습니다.

More information

슬라이드 1

슬라이드 1 Continuous Integration 엔터프라이즈어플리케이션아키텍처 조영호카페PJT팀 2008.10.01 youngho.cho@nhncorp.com 목차 1. Domain Logic Pattern 2. Data Source Pattern 3. Putting It All Together 1. Domain Logic Pattern Layered Architecture

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

Microsoft PowerPoint - 테스트주도개발.pptx

Microsoft PowerPoint - 테스트주도개발.pptx 테스트가능한 소프트웨어설계와 TDD 작성패턴 Testable software design & TDD patterns 한국스프링사용자모임 (KSUG ) 채수원 발표자소개 LG CNS 경영기술교육원기술교육팀전임강사 강의과목디자인패턴 & 리팩터링 분석설계실무 Agile 적용실무 블로그여름으로가는문 blog.doortts.com Comments 내용이나후기에대해서는

More information

자바 프로그래밍

자바 프로그래밍 5 (kkman@mail.sangji.ac.kr) (Class), (template) (Object) public, final, abstract [modifier] class ClassName { // // (, ) Class Circle { int radius, color ; int x, y ; float getarea() { return 3.14159

More information

Spring 3의 JSR 303 지원

Spring 3의 JSR 303 지원 Spring 3 의 JSR 303(Bean Validation) 지원 - 귀찮은확인, 쉽고편하게하자!- 2010. 9. 11 KSUG 안세원 kingori@gmail.com 목차 JSR 303 (Bean Validation) 소개 JSR 303 개요 JSR 303 주요구성요소 Spring 3 의 JSR 303 지원 Spring 3 의 JSR 303 활용 Spring

More information

Spring Batch 2.0 시작하기

Spring Batch 2.0 시작하기 작성자 : 최한수 (cuteimp@gmail.com) 최종수정일 : 2009 년 6 월 22 일 본문서는 Spring Batch을학습하고자하는사람들을위하여 Sample Project를통해 Spring Batch 의기본적인이해와사용을돕는것을목적으로한다. Spring Batch 소개 Spring Batch 란? 우리가일반적으로알고있는 Batch라는것은일괄적으로어떠한작업을반복적으로처리하는것이다.

More information

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일 Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 Introduce Me!!! Job Jeju National University Student Ubuntu Korean Jeju Community Owner E-Mail: ned3y2k@hanmail.net Blog: http://ned3y2k.wo.tc Facebook: http://www.facebook.com/gyeongdae

More information

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074> 객체지향프로그램밍 (Object-Oriented Programming) 1 C++ popular C 객체지향 (object oriented) C++ C : 상위계층언어특징 + 어셈블리언어특징 C++ : 소프트웨어개발플랫폼에객체지향개념제공 객체지향 : 자료와이들자료를어떻게다룰것인지따로생각하지않고단지하나의사물로생각 형 변수가사용하는메모리크기 변수가가질수있는정보

More information

교육2 ? 그림

교육2 ? 그림 Interstage 5 Apworks EJB Application Internet Revision History Edition Date Author Reviewed by Remarks 1 2002/10/11 2 2003/05/19 3 2003/06/18 EJB 4 2003/09/25 Apworks5.1 [ Stateless Session Bean ] ApworksJava,

More information

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형 AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형 언어 변환 1.4. 기대 효과 4.4. 프로그램 Restructuring 4.5. 소스 모듈 관리 2. SeeMAGMA 적용 전략 2.1. SeeMAGMA

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 1,..... @ 1 Green Project 1991 Oak Java 1995. 5 December '90 by Patrick Naughton, Mike Sheridan and James Gosling Embedded in various consumer electronic device 1992. 9. 3 Star 7 1993 www portability

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

ETL_project_best_practice1.ppt

ETL_project_best_practice1.ppt ETL ETL Data,., Data Warehouse DataData Warehouse ETL tool/system: ETL, ETL Process Data Warehouse Platform Database, Access Method Data Source Data Operational Data Near Real-Time Data Modeling Refresh/Replication

More information

JAVA PROGRAMMING 실습 05. 객체의 활용

JAVA PROGRAMMING 실습 05. 객체의 활용 public class Person{ public String name; public int age; } public Person(){ } public Person(String s, int a){ name = s; age = a; } public String getname(){ return name; } @ 객체의선언 public static void main(string

More information

untitled

untitled 3 IBM WebSphere User Conference ESB (e-mail : ljm@kr.ibm.com) Infrastructure Solution, IGS 2005. 9.13 ESB 를통한어플리케이션통합구축 2 IT 40%. IT,,.,, (Real Time Enterprise), End to End Access Processes bounded by

More information

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O Orange for ORACLE V4.0 Installation Guide ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE...1 1....2 1.1...2 1.2...2 1.2.1...2 1.2.2 (Online Upgrade)...11 1.3 ORANGE CONFIGURATION ADMIN...12 1.3.1 Orange Configuration

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information