11월 24일
상황을 가정해 보자 고객사가 모든 클래스마다 시작부터 끝나는 시간을 체크해달라고 요청하였다면
시간을 체크하는 코드를 짜서 모든 클래스에 복+붙 을 하여 작업을 마무리 짓는다. 그런데 고객사에서 초 까지도 넣어 달라고 한다. 그렇다면 모든 클래스에 들어가서 그 코드를 다 수정해야 된다면 몇개 안되면 일일히 수정하면 되지만 클래스가 100개이상이라면 100번을 수정해야 되므로 매우 번거롭다 이러한 불편함을 해결하기 위해 AOP기술이 나왔다.
중복적인 소스가 있다면 그거를 어떠한 관점으로 분리하여 하나의 파일로 빼서 관리를 하겠다는 개념으로 클래스파일들은 비즈니스로직만 담고있고 중복적인 기능은 모듈화 하여 처리하는 프로그래밍 기법이다.
로깅,보안,트랜잭션 등의 공통적인 기능을 활용하고 있다.
(1)JoinPoint
연결고리.횡단관심 모듈이 삽입되어 동작할 수 있는 실행 가능한 특정 위치를 말함.
즉, 어떠한 메서드가 실행이 된다면 실행하는 구간의 시점을 찾는 것.
(2)Pointcut
우리가 실행하는 impl class라고 보면 된다. 주체가되는 클래스가 Pointcut.
(3)Advice
주가 되는 impl class에서 뽑아낸 로직, 즉 중복이되는 기능을 모아둔곳
(4)Aspect
Pointcut+Advice 의 조합
(5)Weaving
위와 같은 역할을 하는 방식을 Weaving방식 이라고 한다.
정리해서, 소스를 따로 분리해서 관리를 하는데 나중에 결합을 시켜서 분리하기전 처럼 작동하는 방식을 Weaving방식이라고 하고, 주가되고 있는것이Pointcut, 떼어낸걸 Advice 그걸 엮어주는걸 JoinPoint라고 한다.
*표준프레임워크 실행환경은 xml Schema를 이용한 AOP구현 방법을 사용한다.
*Advice 결합점 결합 타입
Advice를 필요한 구간에 JoinPoint를 걸었다면 Advice실행되는 지점을 선택할수 있음.
-Before advice: JoinPoint 전에 수행되는 advice
-After returning advice:JoinPoint가 성공적으로 리턴된 후에 동작하는 advice
-After throwing advice: 예외가 발생하는 JoinPoint가 빠져나갈때 수행되는 advice
-After advice:join point를 빠져나가는 방법에 상관없이 수행되는 advice
먼저 Advice를 bean으로 설정 한다.로깅과 같이 중복된 기능을 모아둔 모듈의 class경로를 설정함.
'aop:config'태그를 통해서 Advice와 joinpoint를 만들수 있다.
Pointcut은 주가되는 impl클래스들이 들어가는 구간인데 패턴매칭표현식으로 지정을 할수 있다.
aop.sample.*Sample.*(..))
Sample 이라고 끝나는 모든 클래스안에 모든 메소드를 Pointcut으로 지정을 하겠다.
<aop:aspect>
aspect는 Pointcut+Advice 의 조합인데,Sample클래스의 모든메서드들이 실행이 되면 aspect로 지정한걸 실행해죠
<aop:before>
메서드를 실행하기전에 aop:before 로 지정한 메서드 먼저 실행해죠!
<aop:after-returning>
클레스가 실행하고 문제없이 결과가 수행되면 실행 하는것. pointcut-ref에 지정한 메서드들을 수행하게 되면 method로 지정한 부분을 실행해죠! 언제? 결과가 다끝나면
<aop:After throwing>
에러가 발생했을때 method로 지정한 부분을 실행해죠!
<aop:after>
try-catch구간의 finally같은 구간임. 정상적으로 수행을 하든 에러가 났든 무조건 한번더 실행함.
<aop:around>
before와 after의 조합으로 Sample클래스의 모든메서드들이 실행이 되면 처음에 한번 실행하고 문제없이 다끝나면 다시한번 실행을 함.
위에 설정에따른 advice 적용순서(정상 실행)
before->around(대상 메서드 수행 전)->대상메서드->after-returning->after(finally)->around(대상 메서드 수행 후)
위에 설정에따른 advice 적용순서(예외발생시)
before->around(대상 메서드 수행 전)->대상메서드(예외발생)->After throwing->after(finally)
전자정부 프레임워크만 제공하는 서비스로 공통컨포넌트에서 제공한다.
하는 기능은 내가 테이블을 만드는데 그곳에 pk값을 지정을 할때 유니크한 값으로 설정을 하는데, 이걸 increment로 insert할때 마다 자동으로 생성을 해주던지 특정조건에 맞춰서 pk값을 생성할때 도와주는 서비스다
*ID를 생성하는 방법 2가지가 있음
첫번째,UUID 생성(유니크한 값을 뽑아내는 기능)
두번째, Sequence ID생성(DB에 Sequence ID를 뽑아내는 방법)
세번째, 테이블 ID생성(테이블 ID를 가지고 생성하는 방법)
Logging은 시스템의 개발이나 운용 시 발생할 수 있는 어플리케이션 내부정보에 대해서, 시스템의 외부 저장소에 기록하여, 시스템의 상황을 쉽게 파악할 수 있게 지원하는 서비스
즉,print 또는 System.out.println과 같은 기능
상황에 따라서 로그레벨을 지정하여 쓸수 있다.개발단에는 debug를 쓰고 운영을 할때는 info를쓴다. 왜?debug가 좀더 자세한 내용을 담고 있어서 로그가 많이 쌓이는데 로그가 많이 쌓이면 에러가 날수 있어서 운영할때는 info를 쓰는게 정석이다.