[스프링입문] 섹션7. AOP

2023. 1. 17. 20:23· Spring/스프링입문

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 어노테이션

 

해결

  • 핵심 관심사항과 공통관심 사항 분리 성공
  • 시간 측정 로직을 별도의 공통 로직으로 만듦
  • 핵심 관심사항을 깔끔 유지
  • 변경 필요하면 이로직만 변경
  • 원하는 적용대상 변경 가능

AOP 적용 전 의존관계

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

 

1. 스프링이 가짜 프록시 Service를 만듦

2. 가짜 프록시 Service 수행 후 proceed()를 통해 실제 Service 호출

 

AOP적용전 전체그림

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
'Spring/스프링입문' 카테고리의 다른 글
  • [스프링입문] 섹션6-2. JPA, 스프링데이터 JPA
  • [스프링입문] 섹션6-1. 스프링 DB 접근 기술 - Jdbc, JdbcTemplate
  • [스프링입문] 섹션5. 회원관리 예제 - 웹MVC개발
  • [스프링입문] 섹션4. 스프링 빈과 의존관계
LTSGOD
LTSGOD
LTSGOD
TS's log
LTSGOD
전체
오늘
어제
  • 분류 전체보기 (138)
    • 언어 공부 (18)
      • C++ (6)
      • Python (12)
    • AI (39)
      • Numpy (2)
      • Pandas (5)
      • Pytorch (11)
      • Deep Learning (9)
      • CV (11)
      • 과제에서 얻은 것 (1)
    • 수학 (17)
      • 확률론 (8)
      • AI Math (9)
    • Spring (24)
      • 스프링입문 (8)
      • 스프링 원리 - 기본편 (5)
      • 스프링부트와 AWS로 혼자구현하는 웹 서비스 (10)
      • JPA (1)
      • spring MVC (0)
    • CS 기본 (25)
      • 네트워크 (5)
      • OS (4)
      • 자료구조 (9)
      • DB (7)
    • Git (2)
    • 백준 (1)
    • 활동 (8)
      • 2023 겨울 (1)
      • 네이버 부스트캠프 AI Tech (7)
    • HTML,CSS (2)
    • 도커 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 붓캠
  • pytorch
  • AWS
  • 백준
  • 회고
  • Camper
  • 부스트캠프
  • 후기
  • BOOSTCAMP
  • AI Tech 5기
  • AI
  • 5기

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
LTSGOD
[스프링입문] 섹션7. AOP
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.