[Spring] AOP

2024. 11. 10. 23:55·Spring

AOP?

AOP는 Aspect-Oriented Programming으로, 관점지향 프로그래밍이라고 부른다.

AOP는 비즈니스 로직과는 별개의 공통 기능(횡단 관심사, cross-cutting concerns)을 분리하여 코드의 중복을 줄이고, 모듈화를 통해 코드의 유지보수를 용이하게 하는 프로그래밍 기법을 말한다.

AOP의 주요 개념

Aspect (관점)

한 문장으로 정리하면 여러 클래스에 걸쳐 있는 관심사의 모듈화이다.

트랜잭션 관리가  Java에서 횡단 관심사의 좋은 예이다.

Spring AOP에서 Aspect는  스키마 기반 접근 방식  또는  @Aspect를 사용하여 구현된다.

 

사용 예시

@Slf4j
@Aspect
@Component
@Order(1) // @커스텀 여러개 쓸 경우 진행 순서
public class LoginAspect {
// ...
}

Joinpoint

한 문장으로 정리하면프로그램 실행 중의 한 지점, 예를 들어 메서드 실행이나 예외 처리를 말한다.

Spring AOP에서 조인 포인트는 항상 메서드 실행을 나타낸다.

 

사용 예시

@Before("PointcutCommon.beforePointcut()") // 전 실행
    public void printLogBefore(JoinPoint jp) {
        String methodName = jp.getSignature().getName(); // 메서드명
        log.info("공통 관심 - 로그 : [{}] 비즈니스 메서드 수행 전 호출",methodName);
    }

 

Advice

특정 Joinpoint 에서 Aspect가 수행하는 액션을 의미한다.

Advice의 다른 유형으로는 "around", "before", "after"  어드바이스가 있다.

사용 예시

@Service
@Aspect
@Slf4j
public class LogAdvice {

    @Before("PointcutCommon.daoLogPointcut()") // 전 실행
    public void printLogBefore(JoinPoint jp) {
        String methodName = jp.getSignature().getName(); // 메서드명
        log.info("공통 관심 - 로그 : [{}] 비즈니스 메서드 수행 전 호출",methodName);
    }
    @AfterReturning("PointcutCommon.daoLogPointcut()") // 성공 실행
    public void printLogAfterReturning(JoinPoint jp) {
        String methodName = jp.getSignature().getName(); // 메서드명
        log.info("공통 관심 - 로그 : [{}] 비즈니스 메서드 수행 성공",methodName);
    }
    @AfterThrowing("PointcutCommon.daoLogPointcut()") // 오류 시 실행
    public void printLogAfterThrowing(JoinPoint jp) {
        String methodName = jp.getSignature().getName(); // 메서드명
        log.info("공통 관심 - 로그 : [{}] 비즈니스 메서드 수행 실패",methodName);
    }
}

Pointcut

어떤 Joinpoint에서 Advice를 실행할지 결정하는 표현식을 의미한다.

execution, @annotation 등의 표현식을 사용하여 메서드 실행 위치를 지정한다.

사용 예시

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class PointcutCommon {

    @Pointcut("execution(* com.coma.app.biz..*DAO.*(..))")
    public void daoLogPointcut() {} // 참조 메서드, 실질적인 기능이 있지않다

}

'Spring' 카테고리의 다른 글

[Spring] 롬복(Lombok) 라이브러리  (0) 2024.10.30
[Spring] 횡단 로직 - AOP를 활용한 로그인 체크 기능 구현하기  (0) 2024.10.28
[Spring] 쿠키 활용하기 - 자동 로그인  (0) 2024.10.25
[Spring] Multipart & 파일 업로드  (1) 2024.10.23
[Spring] 커스텀 어노테이션  (1) 2024.10.23
'Spring' 카테고리의 다른 글
  • [Spring] 롬복(Lombok) 라이브러리
  • [Spring] 횡단 로직 - AOP를 활용한 로그인 체크 기능 구현하기
  • [Spring] 쿠키 활용하기 - 자동 로그인
  • [Spring] Multipart & 파일 업로드
yn98
yn98
좌우명 : 여전할 것 인가, 역전할 것 인가? 백엔드 개발자가 되고싶은 역전하고 있는 개발자 꿈나무의 블로그입니다. 개발을 하면서 공부한 것들을 기록합니다. 24.06 ~
  • yn98
    개발 꿈나무
    yn98
  • 전체
    오늘
    어제
    • 분류 전체보기 (131)
      • Python (3)
      • 공부 (7)
      • DB (7)
      • JAVA (24)
      • JSP (9)
      • jQuery (2)
      • HTML (3)
      • Spring (20)
      • 웹 (4)
      • C (1)
      • Git (2)
      • 에러일기 (19)
      • 프로젝트 (6)
      • 책 (21)
        • 멘토씨리즈 자바 (14)
        • 2024 수제비 정보처리기사 (7)
      • 기타 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
    • Notion
  • 공지사항

  • 인기 글

  • 태그

    Di
    codeup 4891 : 행복
    스프링 프레임워크
    aop
    오버로딩
    상속
    DispatcherServlet
    recoverabledataaccessexception
    MVC
    @Component
    오블완
    생성자
    정처기 실기
    html
    ViewResolver
    2-layered 아키텍처
    어노테이션
    티스토리챌린지
    정보처리기사
    이벤트 스케줄러
    멘토씨리즈 자바
    @service
    java
    정보처리기사 실기
    수제비
    Spring
    @repository
    객체지향
    정처기
    jsp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
yn98
[Spring] AOP
상단으로

티스토리툴바