참고
내용
AOP(Aspect Oriented Programming)
NOTE
관점 지향 프로그래밍 ( Aspect Oriented Programming )
•
어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나눠보고 그 관점을 기준으로 각각
모듈화 하겠다는 의미
◦
핵심적인 관점 : 개발자가 적용하고자 하는 핵심 비즈니스 로직
◦
부가적인 관점 : 핵심 로직을 수행하기 위해 필요한 DB연결(JDBC), 로깅, 파일 입출력 등
•
AOP는 프록시 패턴을 통해 구현된다
◦
프록시(Proxy) : Target을 감싸서 요청을 대신 받아주는 Wrapping 오브젝트이다
◦
Advice가 적용되었을 때 만들어짐
•
대표적으로 Spring AOP와 AspectJ가 존재한다.
AOP - Apsect(관점)
NOTE
하나의 회사가 있다고 가정하자, 회사에는 부서가 존재하고 각 부서에는 팀장과 팀원이 존재한다
•
일할 때 모든 직원이 필요하지는 않다
◦
부서장 회의, 신규 사업회의 등 주제와 같은 인원들만 필요함
•
이와 같은 주제를 프로그래밍에서는 관점(Aspect)라고 부른다.
AOP - Container , Bean
NOTE
•
Container
◦
관점에 따라 필요한 직원들이 존재하는 회사
•
Bean
◦
회사에 다니는 직원들은 객체(Objct), Beans라고 한다
AOP - 적용 예시, 용어
NOTE
어느날 부터 개발팀 사람들의 지각이 많아졌고, 개발팀 전원은 출퇴근시 지문인증을하고 급여에 반영하기로 했다
야근하는 특정 인원들에게 택시비를 지급하는 경우
•
이렇게 적용된 추가 작업은 언제든지 해제할 수 있으며, 해제하면 원래대로 돌아간다.
•
AOP 용어
◦
Aspect
▪
Advice를 가진 클래스
◦
Advice
▪
간섭에 사용할 코드를 가진 메소드
▪
Aspect가 무엇을 언제 할 지를 정의한다 (Before, After 등.. )
◦
Target
▪
Advice를 받을 대상 (핵심이 기능이 담긴 클래스)
◦
Joinpoint
▪
Advice를 적용할 수 있는 곳을 JoinPoint라고 한다
▪
즉 애플리케이션 실행에 Aspect를 끼워 넣을 수 있는 지점을 말한다
•
메서드, 필드, 객체, 생성자 등등…
◦
Pointcut
▪
Target과 JoinPoint를 특정하기 위한 식 (실제 Advice가 적용될 시점)
▪
Aspect가 어디서 JoinPoint를 할 지를 말한다.
◦
Weaving
▪
Target객체에 Asepct를 실제로 적용하는 절차
▪
Advice와 Target이 결합되어서 프록시 객체를 만드는 과정
•
[참고]
◦
Pointcut 실제 적용
// pointCut 적용 식
@Before(value = "execution(* com.ssafy.board.model..Board*.*(..))")
// execution(실행) *(접근 제한자, *이므로 모두에 적용)
// [패키지 명] ..(앞의 패키지명을 포함한 모든 패키지를 선택한다)
// Board*.*(Board~.~ 로 시작하는 파일(클래스)을 모두 찾는다)
// (..) 파라미터도 제한이 없음
Java
복사
AOP - 시점에 따른 Advice 구분
NOTE
AOP 시점에 따른 코드