AOP란 Aspect Oriented Programming의 줄임말로 관점 지향 프로그래밍이란 뜻입니다.
쉽게 말하자면 핵심 로직과 부가 로직을 분리하는 것입니다.
핵심 로직이란 실제 처리하고자 하는 로직이고 부가 로직이란 핵심 로직의 위아래로 반복적으로 나타나는 로직을 뜻합니다.
대표적인 예로 Transaction을 볼 수 있습니다.
일반적으로 트랜잭션을 적용하기 위해 AutoCommit을 해제한 후 핵심 로직을 작성합니다.
그리고 마지막 부분에 핵심 로직이 정상적으로 수행이 되었다면 Commit, 그렇지 않다면 Rollback을 시킵니다.
public void transactionFunc() throws SQLException {
Connection connection = null;
try {
connection = DriverManager.getConnection("");
// AutoCommit 해제
connection.setAutoCommit(false);
/*
핵심 로직 부분...
*/
// 정상 처리시 Commit
connection.commit();
} catch (Exception e) {
// 예외시 Rollback
connection.rollback();
}
}
@Transactional은 Spring에서 제공해주는 AOP로 어노테이션을 추가만으로 트랜잭션에 대한 코드를 분리시켜 메서드엔 핵심 로직에만 집중할 수 있게 해 줍니다.
@Transactional
public void transactionFunc() {
/*
핵심 로직 부분...
*/
}
AOP에 사용되는 용어들을 정리해 보겠습니다.
어드바이스(Advice)
부가 기능
조인 포인트(Join Point)
어드바이스가 적용될 수 있는 위치 (메서드, 생성자, 필드 등)
참고로 스프링 AOP인 JDK Dynamic Proxy와 CGLib는 Proxy기반 AOP를 제공합니다. Proxy는 메서드를 오버라이드를 통해 제공하기 때문에 조인 포인트는 메서드로 한정됩니다. AspectJ를 사용하면 바이트 코드를 Compile이나 Class Load 단계에서 조작을 하기 때문에 더 다양하게 AOP를 지원합니다.
타겟(Target)
어드바이스를 받는 객체
포인트 컷(Point Cut)
조인 포인트 중에 어드바이스가 적용될 위치를 판별
어드바이저(Advisor)
어드바이스 + 포인트 컷
저는 처음에 용어들이 쉽게 와닿지 않았는데
부가 로직이(Advise) 적용 가능한 곳 중에(Join Point) 선별을 해서(Point Cut) 핵심 로직과 부가 로직을 결합시킨다
의 개념을 토대도 이해하였습니다.
다음엔 Spring AOP인 JDK Dynamic Proxy와 CGLIB에 대해 알아보겠습니다.
'Spring' 카테고리의 다른 글
Spring의 @Transactional (0) | 2021.12.15 |
---|---|
JDK Dynamic Proxy와 CGLIB (0) | 2021.12.07 |
Spring Boot에 Redis Cache 적용해보기 (0) | 2021.11.25 |
Spring JPA Specification을 사용해 유연하게 조회 API 만들기 (3) | 2021.11.08 |
@RestControllerAdvice 예외 처리 (0) | 2021.10.31 |
댓글