AOP(Aspect Oriented Programming)가 필요한 상황
- 모든 메서드의 호출시간을 측정하고 싶다면??
문제
- 시간을 측정하는 기능은 핵심 관심 사항이 아님.
- 시간을 측정하는 로직은 공통 관심 사항
- 시간 측정 로직과 핵심 비즈니스 로직이 섞여 유지보수가 어려움
- 시간을 측정하는 로직을 별도의 로직으로 만들기 어려움.
- 또 변경할 땐 또 모든로직 찾아가면서 변경해야함.
-> 이런 문제를 해결하기 위한게 AOP
공통관심사항과 핵심관심사항을 분리

적용할 곳에 지정 해줌.
@Aspect
@Component
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("START: " + joinPoint.toString());
try{
return joinPoint.proceed();
}finally{
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("END: " + joinPoint.toString() + " " + timeMs + "ms");
}
}
}
@Aspect 키워드
@Component로 빈에 등록
@Around 어노테이션
해결
- 핵심 관심사항과 공통관심 사항 분리 성공
- 시간 측정 로직을 별도의 공통 로직으로 만듦
- 핵심 관심사항을 깔끔 유지
- 변경 필요하면 이로직만 변경
- 원하는 적용대상 변경 가능

Controller가 Service에 의존, Controller가 Service를 호출

1. 스프링이 가짜 프록시 Service를 만듦
2. 가짜 프록시 Service 수행 후 proceed()를 통해 실제 Service 호출


DI를 통해 AOP가 가능.
스프링 -> 프록시 방식 AOP
자바에서 컴파일 타임에 코드를 생성해서 자바코드를 박아주는 기술도 있음.
'Spring > 스프링입문' 카테고리의 다른 글
[스프링입문] 섹션6-2. JPA, 스프링데이터 JPA (0) | 2023.01.17 |
---|---|
[스프링입문] 섹션6-1. 스프링 DB 접근 기술 - Jdbc, JdbcTemplate (0) | 2023.01.17 |
[스프링입문] 섹션5. 회원관리 예제 - 웹MVC개발 (0) | 2023.01.17 |
[스프링입문] 섹션4. 스프링 빈과 의존관계 (2) | 2023.01.16 |
[스프링입문] 섹션3.회원 관리 예제 - 웹MVC개발 (0) | 2023.01.16 |
AOP(Aspect Oriented Programming)가 필요한 상황
- 모든 메서드의 호출시간을 측정하고 싶다면??
문제
- 시간을 측정하는 기능은 핵심 관심 사항이 아님.
- 시간을 측정하는 로직은 공통 관심 사항
- 시간 측정 로직과 핵심 비즈니스 로직이 섞여 유지보수가 어려움
- 시간을 측정하는 로직을 별도의 로직으로 만들기 어려움.
- 또 변경할 땐 또 모든로직 찾아가면서 변경해야함.
-> 이런 문제를 해결하기 위한게 AOP
공통관심사항과 핵심관심사항을 분리

적용할 곳에 지정 해줌.
@Aspect
@Component
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("START: " + joinPoint.toString());
try{
return joinPoint.proceed();
}finally{
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("END: " + joinPoint.toString() + " " + timeMs + "ms");
}
}
}
@Aspect 키워드
@Component로 빈에 등록
@Around 어노테이션
해결
- 핵심 관심사항과 공통관심 사항 분리 성공
- 시간 측정 로직을 별도의 공통 로직으로 만듦
- 핵심 관심사항을 깔끔 유지
- 변경 필요하면 이로직만 변경
- 원하는 적용대상 변경 가능

Controller가 Service에 의존, Controller가 Service를 호출

1. 스프링이 가짜 프록시 Service를 만듦
2. 가짜 프록시 Service 수행 후 proceed()를 통해 실제 Service 호출


DI를 통해 AOP가 가능.
스프링 -> 프록시 방식 AOP
자바에서 컴파일 타임에 코드를 생성해서 자바코드를 박아주는 기술도 있음.
'Spring > 스프링입문' 카테고리의 다른 글
[스프링입문] 섹션6-2. JPA, 스프링데이터 JPA (0) | 2023.01.17 |
---|---|
[스프링입문] 섹션6-1. 스프링 DB 접근 기술 - Jdbc, JdbcTemplate (0) | 2023.01.17 |
[스프링입문] 섹션5. 회원관리 예제 - 웹MVC개발 (0) | 2023.01.17 |
[스프링입문] 섹션4. 스프링 빈과 의존관계 (2) | 2023.01.16 |
[스프링입문] 섹션3.회원 관리 예제 - 웹MVC개발 (0) | 2023.01.16 |