PROGRAMMING/Spring

[Inflearn] 스프링 입문 | 7 AOP

2022. 12. 28. 08:58
목차
  1. 1 AOP가 필요한 상황
  2. 2 AOP 적용

1 AOP가 필요한 상황

(1) AOP가 필요한 상황

  - 언제? 여러개의 메소드에서 호출시간을 측정하고자 할 때

  - 아래와 같은 방법으로 각각에 메소드에 시간을 찍어야 할까?

/* 회원가입 */
public Long join(Member member) {
    long start = System.currentTimeMillis();
    try {
        validateDuplicateMember(member); //중복 회원 검증
        memberRepository.save(member);
        return member.getId();
    } finally {
        long finish = System.currentTimeMillis();
        long timeMs = finish - start;
        System.out.println("join " + timeMs + "ms");
    }
}

 

(2) 문제정의

  - 시간 측정 로직은 메소드들의 공통 관심 사항

  - 시간 측정 로직과 비지니스 로직이 섞여 유지보수 어려움

  - 시간 측정 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 함

 

2 AOP 적용

(1) AOP 적용

  - 공통 관심 사항과 핵심 관심 사항 분리하기

  - 시간을 측정하는 로직을 별도의 공통 로직으로 만들기

  - 원하는 대상 선택 가능, 필요시 이 로직만 변경하면 됨

 

(2) 소스코드

  - 컴포넌트 등록

@Bean
public TimeTraceApp timeTraceAop() {
    /* SpringBin에 등록된 memberRepository를 요기 넣어줌 */
    return new TimeTraceApp();
}

 

- TimeTraceAop 작성

@Aspect
@Component
public class TimeTraceApp {
    
    /* 밑에 있는거 다 적용해 */
    @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");
        }
    }
}
  1. 1 AOP가 필요한 상황
  2. 2 AOP 적용
'PROGRAMMING/Spring' 카테고리의 다른 글
  • [Inflearn] 스프링 입문 | 6 스프링 DB 접근 기술 (2)
  • [Inflearn] 스프링 입문 | 6 스프링 DB 접근 기술 (1)
  • [Inflearn] 스프링 입문 | 5 회원 관리 예제 - 웹 MVC 개발
  • [Inflearn] 스프링 입문 | 4 스프링과 빈의 의존관계
yuujoeng
yuujoeng
IT and Information Security
yuujoeng
알감자는 공부중
yuujoeng
전체
오늘
어제
  • 🎁 (201)
    • SECURITY (80)
      • 관리보안 (27)
      • System (10)
      • System | Wargame (30)
      • Android (9)
      • Reversing (3)
      • AWS (1)
    • BLOCKCHAIN (45)
      • BlockChain (22)
      • Ethereum (23)
    • PROGRAMMING (30)
      • Web (16)
      • Android (6)
      • Spring (8)
    • IT (0)
      • Article (40)
      • RaspberryPi (5)

블로그 메뉴

  • HOME
  • TIKKLE

인기 글

hELLO · Designed By 정상우.
yuujoeng
[Inflearn] 스프링 입문 | 7 AOP
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.