핵심 포인트
- AOP(Aspect Oriented Programming)는 관심 지향 프로그래밍이다.
- AOP에서 의미하는 Aspect는 애플리케이션의 공통 관심사를 의미한다.
- 애플리케이션의 공통 관심사는 비즈니스 로직을 제외한 애플리케이션 전반에 걸쳐서 사용되는 공통 기능들을 의미한다.
- 애플리케이션 전반에 걸쳐서 사용되는 공통 기능에는 로깅, 보안, 트랜잭션, 모니터링, 트레이싱 등의 기능이 있다.
- AOP를 애플리케이션에 적용해서 다음과 같은 이점을 누릴 수 있다.
- 코드의 간결성 유지
- 객체 지향 설계 원칙에 맞는 코드 구현
- 코드의 재사용
공통관심사항 : 애플리케이션에 필요한 기능 중에서 공통적으로 적용되는 공통 기능에 대한관심사
ex)보안, 로깅, 트랜젝션
핵심관심사항 : 애플리케이션의 주 목적을 달성하기 위한 핵심 로직
ex) CRUD 라고 생각이 듭니다.(뇌피셜)
!!AOP라는 것은 애플리케이션의 핵심 업무 로직에서 로깅이나 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것
코드로 보자
@RestController
@RequestMapping("/api")
public class RestApiController {
@GetMapping("/get/{id}")
public void get(@PathVariable Long id, @RequestParam String name){
System.out.println("get Method");
System.out.println("get Method" + id);
System.out.println("get Method" + name);
}
@PostMapping("/post")
public void post(@RequestBody User user){
System.out.println("Post method" + user);
}
}
위의 코드에서 메소드마다 System.out.println이 있는데 메소드가 10개, 20개가 된다면
중복되는 코드가 많아서 가독성이 떨어질 것이다.
이럴 때 사용되는 것이 AOP이다.