김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 보면서 공부한 내용입니다.
모든 메소드의 호출 시간을 측정하고 싶은 경우?
→ 무수히 많은 메소드의 시간 측정을 시작과 끝 사이에 넣어야 되는 경우가 발생함.
즉, 메소드는 무수히 많이 존재할 수 있기 때문에 모든 메소드에 시간 측정 로직을 집어넣을 수 없음.
AOP를 통해 공통 로직을 짜서 집어넣어야함.
/**
* 회원 가입
*/
public Long join(Member member) throws SQLException {
long start = System.currentTimeMillis(); // 메소드 호출 시작
try{ // 핵심 로직
// 조건 : 같은 이름이 있는 회원은 중복 가입x
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");
}
}
/**
* 회원 가입
*/
try{ // **핵심 관심 사항**
validateDuplicateMember(member);
memberRepository.save(member);
return member.getId();
}
/**
* 전체 회원 조회
*/
try{ // **핵심 관심 사항**
return memberRepository.findAll();
}
long start = System.currentTimeMillis(); // 메소드 호출 시작
long finish = System.currentTimeMillis(); // 메소드 호출 끝
long timeMs = finish - start;