AOP (Aspect Oriented Programming)

박준서·2024년 10월 17일
4

Web

목록 보기
9/16
post-thumbnail
  • 횡단 관심사의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임

핵심 관심사와 횡단 관심사

  • 예를 들어, 음식 배달 서비스를 들어보자.
    • 음식 배달의 핵심은 음식을 조리하는 것이다. [ 핵심 관심사 ]
    • 하지만 수익을 내야 하니 주문을 받고 배달을 하는 등의 역할 또한 수행해야 한다. [ 부가 관심사 ]
  • 핵심 관심사 (core concern)
    • 본질에 해당하는 일
  • 부가 관심사 (cross cutting concern) == 횡단 관심사
    • 부가적인 일
    • 필요없는 것은 아니다.
  • AOP는 위와 같은 부가 관심사들을 모듈화 해서 재사용하는 것을 목적으로 한다.
  • 이렇게 AOP를 사용하면 모듈화를 통해 코드의 유지보수성을 향상 시키고 디버깅을 용이하게 하는 등의 이점이 있다.

OOP의 단점을 해소하기 위해 등장한 개념

  • 기존의 단순 OOP에서는 계좌이체, 사용자 등록, 입출금 등의 서비스가 각각 객체지향으로 프로그래밍 되었고, 각각의 OOP 모두 기능 작동을 위해서 로깅, 보안, 트랜잭션을 하는 코드가 구현되어있었다.
  • 여기서 사용자등록, 계좌이체, 입출금 비즈니스 로직 모두가 공통적으로 가지고 있는 로직이 있다는 것을 알 수 있다. 따라서 이것을 각각 OOP 소스코드에서 제거하고 외부로 빼내어 하나의 공통 모듈로 만들 수 있다. 이것이 바로 OOP를 발전시킨 AOP 라는 것이다.
  • 횡단 관심 : 공통 모듈 ⇒ 로깅, 보안, 트랜잭션
  • 핵심 관심 : 각 서비스의 핵심 비즈니스 로직

AOP 기본 컨셉과 용어

  • 용어를 이해해야 이해할 수 있다.
용어설명
target핵심관심사를 가지고 있는 실제 Bean
advice횡단관심사 처리 코드
스프링에서는 동작 시점에 따라 @Before @After @Around @AfterThrowing @AfterReturning 지원
join pointadvice가 끼어드는 지점으로 target의 비즈니스 로직 메서드, field 등이 있으나 spring에서는 메서드만 지원
pointcuttarget의 어떤 메서드에서 advice를 적용할 것인지를 결정하는 표현식으로 필터 역할
aspect횡당 관심 코드를 구현하는 객체로 모듈화된 관점에 대한 추상적인 명칭
하나 이상의 advice와 pointcut의 결합으로 구성
weavingaspect를 join point에 적용하는 행위
public class TargetBean {
	private String name;
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getName() {
		return this.name;
	}
}

우리는 위 코드에서 setName의 실행 전에 어떠한 로그를 남기고 싶다.

위 코드에서는 this.name = name; 이 핵심 로직이고 이 핵심 로직을 가지고 있는 이 Bean 객체를 target 이라고 한다. 로그를 남기는 행위가 바로 횡단 관심사, 로그를 남기는 횡단 관심 코드advice가 된다.

  • 기존 비즈니스 로직에 “여기서 로그 남기면 좋을 거 같은데?” 하는 advice (조언)을 한다고 생각하면 이해하기 쉽다

위 adivce는 setName의 실행 전에 처리되어야 하므로 타입은 @Before가 적절하다. target에는 여러 가지 메서드가 있는데, 이 메서드 들이 join point 이다. 위 코드를 보면 setName, getName 처럼 2개의 joinpoint가 있는데, getName은 아니고 setName 메서드가 대상이므로 “setName만 대상으로” 하도록 처리하는 부분은 poincut 이다.

aspect는 바로 필터인 poincut과 횡단 관심 코드인 advice를 뭉친 것이다. aspect에는 하나 이상의 poincut + advice 들이 존재한다. 마지막으로 advice 또는 aspect를 joinpoint에 적용 시키는 것을 weaving 이라고 한다.

profile
Back-End Developer

1개의 댓글

comment-user-thumbnail
2024년 10월 17일

오.. 정말 확실한 정리!! 깔끔해요~~

답글 달기

관련 채용 정보