[Spring] AOP(Aspect Oriented Programming)란?

2021. 7. 4. 09:55·스터디/Spring
728x90
AOP란?

AOP(Aspect Oriented Programming)는 직역하면 "관점지향 프로그래밍"이다.

한 마디로 정의하자면 AOP는 흩어진 코드를 한 곳으로 모으는 코딩 기법.

어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다.

AOP를 사용하면 공통 관심 사항과 핵심 관심 사항을 분리하여 로직을 구현 할 수 있다. (공통 관심 사항을 AOP로 구현)

 

-AOP 사용 장점

  • 핵심 관심 사항과 공통 관심 사항 분리 가능
  • 핵심 관심 사항을 깔끔하게 유지 가능
  • 공통 관심 사항 로직 변경 용이
  • 원하는 적용 대상 선택 가능

 

EX) AOP 등록 예시코드 - TimeTraceAop.java

@Aspect
@Component
public class TimeTraceAop {

    // 공통관심사항 적용 할 타겟 지정
    @Around("execution(* hello.hellospring..*(..))")
    public Object excute(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        System.out.println("START :" + joinPoint.toString());
        try{
            return joinPoint.proceed();
        }finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish -start;
            System.out.println("END : " + joinPoint.toString() + " " + timeMs + "ms");
        }


    }
}

위 코드는 각 메소드마다 실행 시간을 구하고자 할 때 사용하는 코드이다. 각 클래스의 메서드마다 위 코드를 작성하면 코드 중복 + 복잡한 구조 + 코드수정의 번거로움으로 코드가 더러워진다. 이렇게 공통적인 부분을 따로 구현하여 aop로 빼낸다면 훨씬 더 깔끔하게 코드를 작성하고 코드를 수정하기에도 효율적이다.

 

@Around 어노테이션 옆에 aop를 적용 할 타겟 지정이 가능하다. 위 예시 코드의 경우 hello.hellospring 하위 아래 모든 클래스에 aop를 적용한다는 의미이다.

 

 


*참조

1.스프링 프레임워크 입문 (인프런) - 백기선

2.스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB접근 기술 (인프런) - 김영한

3.https://engkimbs.tistory.com/746 [새로비]

728x90

'스터디 > Spring' 카테고리의 다른 글

[Spring] 싱글톤 패턴 (Singleton pattern)  (0) 2021.08.17
[Spring] Spring Container, BeanFactory 그리고 ApplicationContext  (0) 2021.08.17
[Spring] PSA (Portable Service Abstraction) 란?  (0) 2021.07.04
[Spring] IoC와 DI  (0) 2021.07.04
Spring vs SpringBoot  (0) 2021.06.27
'스터디/Spring' 카테고리의 다른 글
  • [Spring] Spring Container, BeanFactory 그리고 ApplicationContext
  • [Spring] PSA (Portable Service Abstraction) 란?
  • [Spring] IoC와 DI
  • Spring vs SpringBoot
zoodi
zoodi
IT/개발 관련 지식을 기록하는 블로그입니다.
  • zoodi
    오늘의 기록
    zoodi
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 후기
        • 컨퍼런스
        • 일상리뷰
      • 금융경제
        • 뉴스
        • 금융IT용어
        • 경제 및 부동산
      • 코딩 테스트
      • 스터디
        • JAVA
        • Kotlin
        • Spring
        • React, Nextjs
        • 인공지능 AI
        • Cloud & k8s
        • Kafka
        • Database
        • Network
        • Algorithm
        • Hadoop
        • LINUX
        • R Programming
        • 기타 (소공, 보안)
      • 도서
      • 기타
  • 블로그 메뉴

    • 홈
    • 스터디
    • 금융경제
    • 후기
    • 기타
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    리트코드
    db
    코딩테스트
    코테공부
    프로그래머스
    MySQL
    이분탐색
    자바
    java
    Python
    쿠버네티스
    코딜리티
    kafka
    springboot
    codility
    CodingTest
    알고리즘
    자료구조
    Spring
    코딩
    C++
    LeetCode
    스프링
    스프링부트
    네트워크
    Kotlin
    카카오코테
    금융용어
    코테
    pythoncodingtest
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
zoodi
[Spring] AOP(Aspect Oriented Programming)란?
상단으로

티스토리툴바