[99클럽] 코테 스터디 7일차 TIL + AOP

김엄지·2024년 5월 26일
0

회고

목록 보기
25/26

Let's start studying Spring again !

역시 코드 작성하는 것은 즐겁다 ! 자바보다 스프링 공부가 더 재미있다 !
오늘은 따로 트러블슈팅할 만한 내용이 없어서 배운 개념에 대해 간략하게 정리해볼까한다.

AOP 언제 사용할까?

AOP를 언제 왜 사용하는지에 대해서 먼저 고민해보자.

필요한 사항이 무엇이 있을까?

  • 모든 메서드 호출 시간 측정하고 싶다면?
  • 공통 관심 사항과 핵심 관심 사항을 분리하고 싶다면?
  • 회원가입 시간, 회원 조회 시간을 측정하고 싶다면?

매번 클래스 파일에다가 코드를 하나씩 작성하기에는 너무 힘이 들기 때문에 AOP를 사용하면 한꺼번에 관리하기 편해진다.

AOP란

AOP(Aspect Oriented Programming)는 핵심 비즈니스 로직과는 분리된 관심사를 모듈화하는 데 중점을 둔다. 스프링 프레임워크에서는 AOP를 통해 공통 기능을 애플리케이션의 여러 부분에 일관되게 적용할 수 있다.

공통 기능의 예시

  • 로깅
  • 트랙잭션 관리
  • 보안

AOP의 주요 개념

  1. Aspect - 오늘 사용해본 코드
    공통 기능을 모듈화한 것으로 로깅이나 트랜잭션 관리 기능

  2. Join Point - 오늘 사용해본 코드
    Aspect가 적용될 수 있는 지점으로 메서드 호출, 객체 생성 등

  3. Advice
    Aspect가 joinpoint에서 실제로 수행하는 작업으로 Before, After, Around 등 다양한 타입이 있다.

  4. Weaving
    Aspect와 비즈니스 로직을 결합하는 과정으로 컴파일 시점, 로드 시점, 런타임 시점 중 어느 시점에든 이루어질 수 있다.

사용해본 코드

호출 시간을 측정해보았다.

@Aspect
@Component
public class TimeTraceAop {

    @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");
        }
    }
}

결과

처음에는 실행했을 경우에는 몇 ms의 시간이 더 걸렸지만, 반복될 수록 더욱 시간이 짧아짐(거의 0 ms)을 확인할 수 있었다.

🧐 내일 학습할 것은 무엇인지

  • 오직 자바만을 사용해서 예제 코드를 작성해보고 객체지향 원리를 적용하므로서 스프링을 공부해보자 !
profile
나만의 무언가를 가진 프로그래머가 되자

0개의 댓글