Programing/egovFramework

전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(4-1) - context-aspect.xml

리커니 2017. 1. 24.
반응형

 

전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(4-1) - context-aspect.xml 

 

이전 포스팅에서 톰캣이 구동될 때 참조하는 web.xml과 dispatcher-servlet.xml에 대해 알아보았다.

 

Link : 전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(2) - web.xml

Link : 전자정부프레임워크 나만의 웹 템플릿 프로젝트 생성하기(3) - dispatcher-servlet.xml

 

설명은 dispatcher-servlet.xml 부터 설명을 했지만

구동 순서상으론 web.xml의 <listener>에 등록된 context-*.xml 부터 실행이 된다는 것은 알고 있자.

 

톰캣이 구동되면서 web.xml을 참조하는데

<listener> 에 등록된 (이번 포스팅에서 설명하려는) egovframework/spring/context-*.xml 설정 파일들을 우선적으로 읽는다.(listener는 pre-loading)

 

그러면서 프리젠테이션 레이어(controller)에서 참조할 비지니스 레이어(service, DAO)를 우선적으로 메모리에 띄우게 되고, 그 후에 dispatcher-servlet.xml을 참조하여 프리젠테이션레이어(DispatcherServlet, controller)를 구동한다.

 

이제 위의 설명을 이해했다면 egovframework/spring/context-*.xml 파일들에 대해 알아보자.

 

 

위처럼 해당 경로에는 많은 설정 파일들이 존재한다.

기능에 따라 분류해 논듯 하다.

 

가장 처음에 있는 context-aspect.xml 파일 부터 보도록 하자.

 

 

처음에는 다른 xml 파일과 마찮가지고 네임스페이스와 XML스키마 관련 정보가 있다.

 

 

 

그 다음은 AOP 설정이다.

AOP(Aspect Oriented Programming)는 관점지향 프로그래밍으로

기존의 OOP(객체지향프로그래밍:Object Oriented Programming)를 보다 효율적으로 사용하게 하기 위한 기술이다.

 

예를 들어 기존에는 공통적으로 사용되는 메소드를 분리하여 필요할 때마다 new 메소드명 을 사용하여

호출하여 사용했다.(OOP방식) 하지만 AOP를 적용하면 이렇게 공통적으로 사용되는 메소드들을 xml 설정만으로 사용이 가능하게 된다. 

 

AOP의 사용은 <aop:config></aop:config> 태그로 사용한다.

이 사이에 pointcut 설정으로 호출가능한 비지니스 메소드를 필터링 하고

aspect 설정으로 어느시점에 어떤 메소드를 사용할 지 설정한다.

 

여기서의 시점은 5가지가 제공된다.

before : 메소드 실행 전

after-returning : 메소드가 성공적으로 리턴되는 시점

after-throwing 메소드 실행중 exception이 발생되는 시점

after : 위의 두가지를 포함

around : before + after, 메소드에 실행 전후 동작 가능

 

 

cf)

after-returning의 경우 <aop:after-returning>에 returning 옵션으로 바인드 변수를 꼭 매핑해 주어야 한다.

after-throwing은 throwing 옵션에 바인드 변수 매핑 가능.

 

 

다시 소스로 돌아와 설명을 하자면,

serviceMethod라는 id를 갖는 point 컷의 범위 내에서 exception이 발생된 후에(after-throwing) exceptionTransfer 클래스의 transfer 메소드를 실행 한다 라는 설정이다.

 

그런데 aop설정에서 aspect 설정이 되있는 bean(id가 exceptionTransfer)에 setter injection 설정이 되어 있다.(<property></property>)

ExceptionTransfer 클래스에 <property> name 은 해당 클래스 내에 setExceptionHandlerService가 있다는 말이다.

거기에 list 타입의 집합 객체가 매개변수로 설정되어 있다.

 

setter inject으로 설정된 집합객체에 설정된 두개의 bean을 실행해서 위에 선언된 ExceptionTransfer 클래스에 setExceptionHandlerService에 매개변수로 사용하겠다는 말이다.

 

위에서 설명한 소스 아래 부분은 setter injection으로 설정된 bean 들에 대한 내용이다.

 

 

각 클래스의 메소드에서 사용할 매개변수를 setter injection으로 설정하고 그 매개변수들을 ExceptionTransfer 클래스에서 사용하는 것이다.

 

위의 소스들에서 사용되는 클래스들을 타고 들어가 보면

결국 serviceImpl에서 Exception 이 발생 했을 때 그에 대한 개별 로그를 출력하는 것이다.

 

반응형

댓글

💲 추천 글