[Spring] AOP
programming/spring

[Spring] AOP


7. AOP


7.1 AOP의 개요


7.1.1 AOP (Aspect Oriented Programming, 관점(관심) 지향적인 프로그래밍)


- OOP(Object Oriented Programming, 객체지향 프로그래밍)를 보완하는 확장적인 개념


- Aspect(측면, 관점, 관심) : 핵심적인 비즈니스 로직은 아니지만 반드시 해야 하는 작업들

ex. 버스, 지하철로 출·퇴근을 할 때 교통카드를 찍어야 함, 목적지에 정시에 도착하는 것이 중요하고 교통카드를 찍는 행위가 메인은 아님.


- 관심의 분리(Separation of Concerns)를 통해 핵심관점(업무로직) + 횡단관점(트랜잭션, 로그, 보안, 인증 처리 등)으로 관심의 분리를 실현


- 장점 : 중복되는 코드 제거, 효율적인 유지 보수, 높은 생산성, 재활용성 극대화, 변화 수용의 용이성




7.2 AOP의 주요 용어


- Aspect : 공통 관심사(로깅, 보안, 트랜잭션 등)


- Join Points : method를 호출하는 시점, 예외가 발생하는 시점 등과 같이 특정 작업이 실행되는 시점을 의미함


- Advice : Join Points에서 실행되어야 하는 코드(실제로 AOP 기능을 구현한 객체)


- Pointcuts : 실제로 Advice를 적용시킬 대상 method


- Proxy : Advice가 적용되었을 때 만들어지는 객체


7.3 Advice의 종류


- Before : target method 호출 전에 적용

- After : target method 호출 후에 적용

- Around : target method 호출 이전과 이후 모두 적용(가장 광범윔하게 사용됨)


7.4 AOP의 설정 방법


7.4.1 pom.xml에 라이브러리 추가

<properties>

<java-version>1.8</java-version>

<org.springframework-version>5.0.3.RELEASE</org.spirngframework-version>

<org.aspectj-version>1.8.10</org.aspectj-version>

<org.slf4j-version>1.7.25</org.slf4j-version>

</properties>

<dependencies>

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>${org.aspectj-version}</version>

</dependency>

</dependencies>


7.4.2 servlet-context.xml의 Namespace에 aop와 tx 추가

7.4.3 servlet-context.xml에 aop 태그 추가

7.4.4 AOP 기능을 지원할 Advice 클래스 작성


3) LogAdvice.java

로그 수집 작업을 하려면 모든 메서드에 해야 함

로그 수집은 중요한 업무이지만 핵심적인 업무는 아니고 공통적인 업무에 해당됨

공통적인 업무는 모든 class의 모든 method에 작성하지 말고 Advice에 모아서 작성하고 세부적인 코드에서는 핵심업무에 집중하도록 처리


4) AOP 실습용 테이블

5)? 컨트롤러에 json data를 전달하는 테스트를 위해 크롬에 확장 프로그램 설치

http://google.com 에서 Advanced REST client 검색


마. http 응답 코드와 method



입력데이터를 json으로 보내기 위해 사용


put : 전체 수정

delete : 삭제

patch : 일부분 수정