AOP

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");
 }
 }
}

문제

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