본문 바로가기
Spring Tutorial

[Spring 입문 15] AOP가 필요한 상황

by 미소5 2024. 8. 11.
  • AOP가 필요한 상황
    • 모든 메소드의 호출 시간을 측정하고 싶다면?
    • 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면?

[Spring 입문 3] 회원 관리 예제 - 백엔드 개발 (tistory.com)

 

[Spring 입문 3] 회원 관리 예제 - 백엔드 개발

컨트롤러: 웹 MVC의 컨트롤러 역할서비스: 핵심 비즈니스 로직 구현리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등 

joly156.tistory.com

 

  • MemberService - 회원 조회 시간 측정 추가
@Transactional
public class MemberService {

    private final MemberRepository memberRepository;

    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    /**
     * 회원가입
     */
    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");
        }

    }

    private void validateDuplicateMember(Member member) {
        //중복회원(같은이름회원) 검증
        memberRepository.findByName(member.getName())
                .ifPresent(m -> {
                    throw new IllegalStateException("이미 존재하는 회원입니다.");
                });
    }

    /**
     * 전체 회원 조회
     */
    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");
        }
    }

    public Optional<Member> findOne(Long memberId) {
        return memberRepository.findById(memberId);
    }
}

실행결과

 


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

AOP를 적용하면 해결된다!

 

[Spring 입문16] AOP 적용 (tistory.com)

 

[Spring 입문16] AOP 적용

AOP: Aspect Oriented Programming 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 분리 해결 회원가입, 회원 조회등 핵심 관심사항과 시간을 측정하는 공통 관심 사항을 분리한다. 시간을

joly156.tistory.com

 

 

 

 

728x90
반응형