티스토리 뷰

Web 개발

[Web] Spring Basic 7 - AOP

코딩브론즈 2021. 12. 16. 18:21

AOP 란?

- AOP 란 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍을 의미.

- 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것.

- 핵심적인 관점 : 핵심 비즈니스 로직. 로직의 존재 이유.

- 부가적인 관점 : 해당 로직에 걸리는 시간, 로그, DB 연결 등 공통적인 로직

- AOP의 취지 : 부가적인 로직을 여러 메서드에 일일이 넣는것 대신 관점별로 모듈화하여 재사용하도록 함. -> 효율성↑

 

1. AOP가 필요한 상황

- 상황 : 모든 메소드가 동작하는 시간을 측정하라.

  • 회원가입, 회원조회 등의 메소드에 시간을 측정하는 기능은 핵심적인 관점이 아니라 부가적인 관점이다.
  • 회원가입, 회원조회 등의 메소드에 일일이 시간 측정 로직을 구현하는 것은 비효율적이다. 시간도 오래걸릴 뿐만 아니라 무엇보다 핵심 비즈니스 로직과 부가적인 로직이 섞여서 유지보수에도 어려움이있다.

 

2. AOP 적용

- 클래스에 @Aspect 어노테이션을 붙여야한다.

- 해당 클래스를 Spring Bean에 등록해야한다. @Component를 붙이거나 SpringConfig 클래스에서 등록하자.

- @Around를 통해 어느곳에 적용할지 타겟팅을 할 수있다. <- 복잡한게 많지만 실무에서 쓰는것은 5% 미만이다.

- 결론

  • 회원가입, 회원 조회등 핵심 관심사항과 시간을 측정하는 공통 관심 사항을 분리함.
  • 시간을 측정하는 로직을 별도의 공통 로직으로 만듬.
  • 변경이 필요하면 이 로직만 변경하면 됨
  • 원하는 적용 대상을 선택할 수도 있음.

 

스프링의 AOP 동작 방식 

- AOP 적용 전

  1. 컨트롤러에서 서비스를 호출함.
  2. 컨트롤러는 서비스에 의존한다.
  3. 따라서 컨트롤러에서 서비스의 메서드를 호출하면 호출된 메서드를 실행한다.

 

- AOP 적용 후

  1. 컨트롤러에서 서비스를 호출함.
  2. 해당 서비스가 AOP 적용된 서비스인지 확인.
  3. 가짜 서비스를 만든다 = 프록시(Proxy)
  4. 컨테이너에 Spring Bean을 등록할 때, 진짜 서비스가 아니라 프록시를 등록한다.
  5. 프록시의 내부 메서드 실행이 끝나면 진짜를 호출한다.

AOP 적용 후 전체 그림

 

프록시 확인해보기

- 컨트롤러에서 service.getClass()를 출력해보자. MemverService에서 끝나지 않고 $$Enhancer ~~~ 가 붙는다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함