Spring/스프링 입문

[스프링 입문] 07. AOP - AOP가 필요한 상황

HSY_mumu 2022. 5. 2. 15:23
728x90

(인프런) 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 공부하고 리뷰한 글입니다.

1. AOP가 필요한 상황

1) 모든 메소드의 호출 시간을 측정하고 싶을 때

2) 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern)

3) 회원 가입 시간, 전체 회원 조회 시간을 측정하고 싶을 때

 

1. MemberService 회원 조회 시간 측정 추가

@Transactional
public class MemberService {
	...
    /**
     * 회원 가입
     */
    public Long join(Member member) {

        long start = System.currentTimeMillis();    // 회원가입 시작 시각

        try {
            validateDuplicateMember(member);    // 중복 회원 검증
            memberRepository.save(member);  // 중복 회원 아니면 저장
            return member.getId();  // 저장한 member id 반환
        } finally {
            // 회원 가입 로직이 끝날 때 시각
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;   // 회원 가입 호출 시간
            System.out.println("join = " + timeMs + "ms");
        }
    }
	...
    /**
     *  전체 회원 조회
     */
    public List<Member> findMembers() {
        // 전체 회원 조회 시작 시각
        long start = System.currentTimeMillis();

        try {
            return memberRepository.findAll();
        } finally {
            // 전체 회원 조회 로직 끝날 때 시각
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;   // 전체 회원 조회 호출 시간
            System.out.println("findMembers = " + timeMs + "ms");
        }

    }
    ...
}

 

2. 문제

회원 가입, 전체 회원 조회에서 시간을 측정하는 기능핵심 관심사항이 아닌 공통 관심사항이다!

  • 시간을 측정하는 로직공통 관심 사항이다.
  • 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다.
  • 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다.
  • 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다.

 

 

 

728x90