스프링 입문7 (코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술)(feat.김영한 강사님)

권영태·2023년 5월 2일
0

스프링

목록 보기
7/18

Project : Gradle-Groovy Project
JDK : JAVA 17
Spring Boot Version : 3.0.6
Dependencies : Spring Web, Thymeleaf, H2database
IDEA : IntelliJ IDEA

이번 시간에는 AOP에 대해 알아본다.

AOP가 필요한 상황

  • 모든 메소드의 호출 시간을 측정하고 싶다면?
  • 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern)
  • 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면?

MemberService 회원 조회 시간 측정 추가

@Transactional
public class MemberService {
   /**
   * 회원가입
   */
   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");
   		  }
 	}
 /**
 * 전체 회원 조회
 */
 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");
     	}
     }
}

💡 AOP란

  • 공통 관심 사항과 핵심 관리 사항을 분리한다.
    • 공통 관심 사항 : 시간을 측정하는 비즈니스 로직
    • 핵심 관리 사항 : 핵심 비즈니스 로직

@Component  // 대신 Spring bean에 직접 등록하는것을 선호하지만 영상은 Component로 진행
@Aspect
public class TimeTraceAop {
 
 @Around("execution(* hello.hellospring..*(..))")       // 어디다 적용할건지 타겟팅(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 적용 전 의존관계


AOP 적용 후 의존관계


프록시란 가짜 Spring Bean으로 생각하면 된다.

profile
GitHub : https://github.com/dudxo

0개의 댓글