728x90
(인프런) 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 공부하고 리뷰한 글입니다.
1. AOP가 필요한 상황
1) 모든 메소드의 호출 시간을 측정하고 싶을 때
2) 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern)
3) 회원 가입 시간, 전체 회원 조회 시간을 측정하고 싶을 때
1. MemberService 회원 조회 시간 측정 추가
@Transactional
public class MemberService {
...
/**
* 회원 가입
*/
public Long join(Member member) {
long start = System.currentTimeMillis(); // 회원가입 시작 시각
try {
validateDuplicateMember(member); // 중복 회원 검증
memberRepository.save(member); // 중복 회원 아니면 저장
return member.getId(); // 저장한 member id 반환
} 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");
}
}
...
}
2. 문제
회원 가입, 전체 회원 조회에서 시간을 측정하는 기능은 핵심 관심사항이 아닌 공통 관심사항이다!
- 시간을 측정하는 로직은 공통 관심 사항이다.
- 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다.
- 시간을 측정하는 로직을 별도의 공통 로직으로 만들기 매우 어렵다.
- 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아가면서 변경해야 한다.
728x90
'Spring > 스프링 입문' 카테고리의 다른 글
[스프링 입문] 07. AOP - AOP 적용 (0) | 2022.05.02 |
---|---|
[스프링 입문] 06. 스프링 DB 접근 기술 - 스프링 데이터 JPA (0) | 2022.05.02 |
[스프링 입문] 06. 스프링 DB 접근 기술 - JPA (0) | 2022.04.29 |
[스프링 입문] 06. 스프링 DB 접근 기술 - 스프링 JdbcTemplate (0) | 2022.04.29 |
[스프링 입문] 06. 스프링 DB 접근 기술 - 스프링 통합 테스트 (0) | 2022.04.29 |