비즈니스 어플리케이션 개발에 있어서 중요한 2가지 원칙
낮은 결합도 : 코드의 수정 용이, DI를 이용하여 구현 가능
높은 응집도 : 비즈니스 로직 프로그램과 디버그, 예외처리 등의 부가 프로그램을 분리하여 코딩
관심 분리 (Separation of Concerns) : 위에 두개의 관심을 분리할 수 있다면, 실제 비즈니스 로직만 각각의 클래스를 구성할 수 있고, 필요에 따라 넣었다 뺐다 하는 더욱 간결하고 응집도 높은 프로그램을 만들 수 있다. 관심분리 측면에서, OOP(객체지향 프로그래밍)에서는 횡단관심에 해당되는 공통 코드를 완벽하게 독립적인 모듈과 불리해 내는 것이 어려움
횡단 관심(Cross-Cutting Concerns): 메소드마다 공통으로 들어가는 로깅, 예외 처리 등의 코드
핵심 관심 (Core Concerns): 사용자의 요청에 따라 실제로 수행되는 핵심 비즈니스 로직
⭐️ 용어가 중요
조인포인트(Joinpoint) : 클라이언트가 호출하는 모든 비즈니스 로직 메소드(핵심관심영역코드)
EX. Impl의 모든 메소드, 메서드 호출, 필드 값 변경
포인트컷(pointcut) : 모든 비즈니스 메소드 중, 공통기능(횡단관심 영역의 코드)이 적용되는 메소드
expression : 표현 execution : 실행
아래와 예와 같이, id를 다르게 하면서, 여러개의 포인트컷설정
어드바이스(Advice) : 충고, 횡단 관심에 해당되는 공통기능의 코드를 의미, 독립된 클래스의 메소드로 작성, 구현된 어드바이스의 동작유무는 스프링 설정파일에서 결정됨
애스팩트(Aspect) : 포인트컷과 어드바이스의 결합으로 어떤 포인트컷에 대해서 어떤 어드바이스를 실행할지를 결정한다 즉, 애스팩트의 설정에 따라서 aop의 동작 방식이 결정
위빙(Weaving) : 포인트컷으로 지정한 핵심관심 메소드가 호출될때, 어드바이스에 해당하는 횡단 관심 메소드가 삽입되는 과정
즉, 횡단관심(CrossCutting)과 핵심관심(CoreConcerns)들이 섞어가면서 프로그램 하는 것
엘리먼트 설정방법에는 XML방식과 어노테이션 방식이 있음
XMl을 이용한 설정방식
태그(Tag)와 엘리먼트(Element)
- html코딩을 하다보면, 태그와 엘리먼트라는 용어가 혼재 사용
- 엘리먼트 = 시작태그 + 내용 + 끝태그로 구성, 시작태그와 종료태그를 묶어서 구성, 속성을 가짐, 중첩가능 등이 특징
ex) <h2> 웹프로그래밍실무 <h2> 이 경우에 <h2>태그 전체는 엘리먼트임
<aop:config>
<aop:config> AOP 설정에 있어서 루트 엘리먼트로 여러개가 올 수 있으며
<aop:config> 하위에 <aop:pointcut>과 <aop:aspect>가 위치할 수 있음
<aop:pointcut>엘리먼트는 포인트것을 지정하기 위해 사용
<aop:pointcut>엘리먼트는 포인트컷을 지정하기 위해 사용
<aop:config>나 <aop:aspect>의 자식엘리먼트로 올 수 있음
아래와 같이 <aop:pointcut>rk <aop:aspect> 밖에 있으면, 여러개의 <aop:aspect>에 사용될 수 있지만,
<aop:aspect>의 자식엘리먼트로 <aop:pointcut>가 사용되면, 해당 <aop:aspect>내에서만 사용됨
<aop:aspect>엘리먼트는 애스팩트를 설정하기 위해서 사용
핵심관심의 포인트 컷과 횡단관심의 어드바이스를 결합하기 위해서 사용
애스팩트를 어떻게 사용하느냐에 따라, 위빙에 결과가 달라지기 때문에 중요한 설정임