개발자's Life

[Spring] AOP 를 쉽게 이해하자! 본문

Back-end/Spring

[Spring] AOP 를 쉽게 이해하자!

Rowen Jobs 2023. 5. 14. 19:54
728x90
반응형

김영한님의 무료강의인 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 을 들었다.

그 중 마지막 기술 강의인 AOP 를 들었는데 현재 1년이 조금 넘은 개발자로써 아주 유익한 내용이였다.

 

우선 AOP 를 다른 블로그를 참고하여 내용을 적어본다.

AOP란?

Aspect-Oriented Programming (관점 지향 프로그래밍)의 약자이다.

 

흩어진 Aspect들을 모아서 모듈화 해줘서 관심사 분리라는 개념을 갖고 객체지향 프로그래밍을 통해

더욱 객체지향적으로 만들어주는 기술이다.

 

서로 다른 클래스라고 하더라도 비슷한 기능을 하는 부분(ex 비슷한 메서드, 비슷한 코드)이 있다.

이 부분을 Concern이라고 한다.

[참고 블로그]

https://rma7.tistory.com/70

 

AOP란 무엇인가

AOP란? Aspect-Oriented Programming (관점 지향 프로그래밍)의 약자이다. 흩어진 Aspect들을 모아서 모듈화 해줘서 관심사 분리라는 개념을 갖고 객체지향 프로그래밍을 통해 더욱 객체지향적으로 만들어

rma7.tistory.com

 

김영한 님이 예를 들어 설명 주신 상황이 있다. 

 

(기억을 되살려 하는거라 아주 디테일하게 맞지는 않음)

관리직 개발자 : "각 메소드 마다 초 단위로 실행 시간 찍어봐!"

실무 개발자 : "1000개가 되는 메소드 마다 해당 반복되는 코드를..?"

...... 1000개 찍은 후.......

관리직 개발자 : "ms 단위로 찍어야겠다."

실무 개발자 : ",...ㅠㅠ"

선배 개발자 : "AOP 써서 해보세요! "

 

라는 예시였다.

김영한 님이 짜주신 코드에 주석을 달아서 설명글을 남기겠다.

 

package hello.hellospring.aop;

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

// AOP를 사용해주기 위한 어노테이션
@Aspect
// Spring Bean 에 올려주기 위해 Component 어노테이션
@Component
public class TimeTraceAop {
	
    // Around 어노테이션을 사용하는 이유는 어떤 위치의 메소드를 적용할지 정해야함.
    // hellospring 패키지 아래에 있는 모든 클래스
    @Around("execution(* hello.hellospring..*(..))")
    public Object execute(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 의 예시를 김영한님 강의보고 정리하였다.

 

 

* 잘못된 부분 있을 경우 댓글로 남겨주세요~

728x90

'Back-end > Spring' 카테고리의 다른 글

[SPRING] @Configuration, @Bean 간략 설명  (0) 2023.05.29
Spring 용어 정리 - (강의_FCS_01)  (0) 2023.02.06
Comments