PowerPoint 프레젠테이션

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

슬라이드 1

Microsoft PowerPoint - CSharp-10-예외처리

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

Spring Boot/JDBC JdbcTemplate/CRUD 예제

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

JAVA PROGRAMMING 실습 09. 예외처리

PowerPoint Presentation

PowerPoint 프레젠테이션

PowerPoint Presentation

Cluster management software

PowerPoint 프레젠테이션

쉽게 풀어쓴 C 프로그래밊

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

PowerPoint Presentation

PowerPoint Presentation

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

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

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

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

PowerPoint Presentation

PowerPoint 프레젠테이션

제11장 프로세스와 쓰레드

untitled

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

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

rmi_박준용_final.PDF

C++ Programming

JUNIT 실습및발표

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

02 C h a p t e r Java

PowerPoint 프레젠테이션

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

9장.예외와 단정

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

예제 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

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

Design Issues

Microsoft PowerPoint - 04-UDP Programming.ppt

Dialog Box 실행파일을 Web에 포함시키는 방법

어댑터뷰

JVM 메모리구조

PowerPoint Presentation

실용적인 스프링 AOP

1

교육자료

歯JavaExceptionHandling.PDF

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

PowerPoint Presentation

Microsoft PowerPoint - Java7.pptx

C# Programming Guide - Types

JAVA PROGRAMMING 실습 08.다형성

Semantic Consistency in Information Exchange

Java Agent Plugin Guide

PowerPoint Presentation

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

슬라이드 1

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

17장 클래스와 메소드

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft Word - src.doc

PowerPoint Presentation

강의 개요

01( ) SAV12-04.hwp

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

12-file.key

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

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

PowerPoint 프레젠테이션

JMF2_심빈구.PDF

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

DocsPin_Korean.pages

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

자바-11장N'1-502

PowerPoint Template

Network Programming

Spring Boot

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

쉽게 풀어쓴 C 프로그래밍

게시판 스팸 실시간 차단 시스템

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

MySQL-.. 1

[Brochure] KOR_TunA

JAVA PROGRAMMING 실습 05. 객체의 활용

Microsoft PowerPoint - RMI.ppt

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

DBMS & SQL Server Installation Database Laboratory

로거 자료실

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

chap 5: Trees

No Slide Title

PowerPoint 프레젠테이션

Spring Batch 2.0 시작하기

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

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

PowerPoint Template

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Transcription:

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

1. 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 기능을추가할수있게해주는핵심적인처리과정임 Page l 5

1. AOP - 개요 (3/7) 주요개념 조인포인트 (JoinPoint), 포이트컷 (Pointcut), 어드바이스 (Advice) Pointcut JoinPoint Advice Page l 6

1. AOP - 개요 (4/7) 주요개념 포인트컷 (PointCut) 예제 : bean() Pointcut 을이용하여종적및횡적으로빈을선택 Page l 7

1. 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 advice: join point를빠져나가는 ( 정상적이거나예외적인반환 ) 방법에상관없이수행되는 advice Around advice: joinpoint 전, 후에수행되는 advice Page l 8

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

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

1. AOP - 설명 (1/17) Spring의 AOP 지원 스프링은프록시기반의런타임 Weaving 방식을지원한다. 스프링은 AOP 구현을위해다음세가지방식을제공한다. @AspectJ 어노테이션을이용한 AOP 구현 XML Schema를이용한 AOP 구현 스프링 API를이용한 AOP 구현 표준프레임워크실행환경은 XML Schema 를이용한 AOP 구현방법을사용한다. Page l 11

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

1. 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."); Page l 13

1. 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 + "]"); Page l 14

1. 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);... Page l 15

1. 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."); Page l 16

1. 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; Page l 17

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

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

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

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

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

1. AOP - 설명 (14/17) Pointcut 정의예제 Pointcut 선택된 Joinpoints execution(public * *(..)) execution(* set*(..)) 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) target(com.xyz.service.accountservice) args(java.io.serializable) bean(accountrepository)!bean(accountrepository) bean(*) bean(account*) bean(*repository) bean(accounting/*) bean(*datasource) bean(*datasource) public 메소드실행이름이 set으로시작하는모든메소드명실행 AccountService 인터페이스의모든메소드실행 service 패키지의모든메소드실행 service 패키지와하위패키지의모든메소드실행 service 패키지내의모든결합점 service 패키지및하위패키지의모든결합점 AccountService 인터페이스를구현하는프록시개체의모든결합점 AccountService 인터페이스를구현하는대상객체의모든결합점하나의파라미터를갖고전달된인자가 Serializable인모든결합점 accountrepository 빈 accountrepository 빈을제외한모든빈모든빈이름이 'account' 로시작되는모든빈이름이 Repository 로끝나는모든빈이름이 accounting/ 로시작하는모든빈이름이 datasource 나 DataSource 으로끝나는모든빈 Page l 23

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

1. 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); Page l 25

1. 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> Page l 26

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

2. 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를생성한다. Page l 28

2. ID Generation 개요 (3/3) UUID(Universally Unique Identifier) 란 UUID는 OSF(Open Software Foundation) 에의해제정된고유식별자 (Identifier) 에대한표준이다. UID는 16-byte (128-bit) 의숫자로구성된다. UUID를표현하는방식에대한특별한규정은없으나, 일반적으로 16 진법으로 8-4-4-4-12 형식으로표현한다. 550e8400-e29b-41d4-a716-446655440000 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를생성한다. Page l 29

2. 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> Page l 30

2. ID Generation UUID Generation(2/4) Mac Address Base Service(2/2) Sample @Resource(name="UUIdGenerationService") private EgovIdGnrService uuidgenerationservice; @Test public void testuuidgeneration() throws Exception { assertnotnull(uuidgenerationservice.getnextstringid()); assertnotnull(uuidgenerationservice.getnextbigdecimalid()); Page l 31

2. 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>100.128.120.107</value> </property> </bean> Sample @Resource(name="UUIdGenerationServiceWithIP") private EgovIdGnrService uuidgenerationservicewithip; @Test public void testuuidgenerationip() throws Exception { assertnotnull(uuidgenerationservicewithip.getnextstringid()); assertnotnull(uuidgenerationservicewithip.getnextbigdecimalid()); Page l 32

2. 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 /> Sample @Resource(name="UUIdGenerationServiceWithoutAddress") private EgovIdGnrService uuidgenerationservicewithoutaddress; @Test public void testuuidgenerationnoaddress() throws Exception { assertnotnull(uuidgenerationservicewithoutaddress.getnextstringid()); assertnotnull(uuidgenerationservicewithoutaddress.getnextbigdecimalid()); Page l 33

2. 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> Page l 34

2. ID Generation Sequence Id Generation(2/4) Basic Type Service(2/2) Sample @Resource(name="primaryTypeSequenceIds") private EgovIdGnrService primarytypesequenceids; @Test public void testprimarytypeidgeneration() throws Exception { //int assertnotnull(primarytypesequenceids.getnextintegerid()); //short assertnotnull(primarytypesequenceids.getnextshortid()); //byte assertnotnull(primarytypesequenceids.getnextbyteid()); //long assertnotnull(primarytypesequenceids.getnextlongid()); Page l 35

2. 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> Page l 36

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

2. 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'); Page l 38

2. 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 이라고지정함 ) Page l 39

2. ID Generation Table Id Generation(3/6) Basic Service(3/3) Sample @Resource(name="basicService") private EgovIdGnrService basicservice; @Test 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()); Page l 40

2. 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'); Page l 41

2. 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 을대신하여표현되는문자 Page l 42

2. ID Generation Table Id Generation(6/6) Strategy Base Service(3/3) Sample @Resource(name="Ids-TestWithGenerationStrategy") private EgovIdGnrService idstestwithgenerationstrategy; @Test 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()); Page l 43

3. Logging - 개요 서비스개요 Logging은시스템의개발이나운용시발생할수있는어플리케이션내부정보에대해서, 시스템의외부저장소에기록하여, 시스템의상황을쉽게파악할수있게지원하는서비스 표준프레임워크 3.0부터 SLF4J가적용이되었으며 Log4j를함께사용하였다. 주요기능 로깅환경설정지원 서브시스템별상세한로그정책부여 다양한형식 ( 날짜형식, 시간형식등 ) 의로그메시지형태지정 다양한매체 (File, DBMS, Message, Mail 등 ) 에대한기록기능설정 로그기록 레벨 (debug, info, warn, error 등 ) 별로로그를기록 Page l 44

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

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

3. Logging - 설명 (3/4) 로그레벨지정하기 log4j 에서는기본적으로 debug, info, warn, error, fatal 의다섯가지로그레벨이있음 (ERROR > WARN > INFO > DEBUG > TRACE) 로그레벨 설명 Error - 요청을처리하는중문제가발생한상태를나타냄 Warn - 처리가능한문제이지만, 향후시스템에러의원인이될수있는경고성메시지를나타냄. Info - 로그인, 상태변경과같은정보성메시지를나타냄. Debug - 개발시디버그용도로사용할메시지를나타냄. Trace - 디버그레벨이너무광범위한것을해결하기위해서좀더상세한상태를나타냄. Page l 47

3. Logging - 설명 (4/4) Appender log4j 는콘솔, 파일, DB, socket, message, mail 등다양한로그출력대상과방법을지원하는데, 이에대해 log4j 의 Appender 로정의할수있다. Appender 설명 ConsoleAppender - 콘솔화면으로출력하기위한 appender 임 - org.apache.log4j.consoleappender : Console 화면으로출력하기위한 Appender FileAppender - FileAppender 는로깅을파일에하고싶을때사용함. RollingFileAppender JDBCAppender - FileAppender 는지정한파일에로그가계속남으므로한파일의크기가지나치게커질수있으며, 계획적인로그관리가불가능해짐. - RollingFileAppender 는파일의크기또는파일백업인덱스등의지정을통해서특정크기이상파일의크기가커지게되면기존파일을백업파일로바꾸고, 다시처음부터로깅을시작함 - DB 에로그를출력하기위한 Appender 로하위에 Driver, URL, User, Password, Sql 과같은 parameter 를정의할수있음. - 다음은 log4j.xml 파일내의 JDBCAppender 에대한속성정의내용임. - EgovConnectionFactory 빈설정이필요함 Page l 48

Page l 49