카테고리 없음
AOP
komzihoon
2023. 5. 3. 14:39
package com.example.demo.service;
@Transactional
public class MemberService {
/**
* 회원가입
*/
public Long join(Member member) { // 가입할때 나오는 시간
long start = System.currentTimeMillis(); // 시간을 밀리세컨드로 나오게끔 해줌. 시작하고
try {
validateDuplicateMember(member); //중복 회원 검증
memberRepository.save(member); 멤버 레퍼지토리에 멤버를 저장해주고,
return member.getId(); //멤버에 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");
}
}
}
문제
- 회원가입, 회원 조회에 시간을 측정하는 기능은 **핵심 관심 사항이 아니다.
- 시간을 측정하는 로직은 **공통 관심 사항이다.
- 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다.
- 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다.
- 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다.