sanhaa
sanha story
sanhaa
전체 방문자
오늘
어제
  • 분류 전체보기 (93)
    • 일상 (3)
    • Programming (42)
      • Back-end Language (32)
      • Front-end Language (8)
      • Database Language (2)
    • Etc. (35)
      • Coding Test (23)
      • Algorithm (7)
      • Data structure (1)
      • IDE (1)
      • Job Preparation (3)
    • Project (3)
    • Engineer Information Proces.. (10)
    • secret space (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 투 포인트 알고리즘
  • 시간복잡도 #JAVA #코딩테스트
  • 정처기 #DCL #SQL #DB
  • 연속된 자연수의 합 구하기
  • JAVA #백준 #구간합
  • JAVA 구간 합 구하기
  • 1253번
  • DDL #SQL #DB #정보처리기사 #SQL응용 #MySQL
  • 삼발자 #일상
  • iterator #
  • 주몽의명령
  • 프로그래머스
  • DFS #백준
  • oEmebed
  • 코딩테스트
  • 백준 2018번
  • Spring
  • 신고받기
  • 사이드 프로젝트 #여기로모여라 #web socket #실시간 위치공유
  • 알고리즘
  • spring #java #k6 #
  • 정보처리기사 #정처기 #기출 #2021기출
  • 큐
  • 스택
  • hash #java #프로그래머스 #코딩테세트 #백준
  • DML #정처기 #시나공 #SQL #MYSQL #SPRING #JAVA
  • 자바
  • 백준
  • Java
  • connection reset by peer

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sanhaa

sanha story

[JAVA] AOP란 무엇일까?
Programming/Back-end Language

[JAVA] AOP란 무엇일까?

2022. 3. 28. 23:16

AOP : Aspect Oriented Programming 의 약자로 공통 관심 사항과 핵심 관심 사항을 분리 시킨 것

 

 

 

AOP가 없으면 ? 

모든 클래스의 시간을 측정을 한다고 생각하면,

각각의 클래스 마다 시간 측정 로직을 입력을 해야하며  클래스가 많으면 많은 시간과 노동이 필요하다.

하지만 AOP를 적용하여 원하는 곳에  공통 관심 사항을 적용하면 편리하다. 

 

모든 클래스의 시간을 측정하는 AOP를 만들어보자. 

 

 

 

패키지에 aop폴더를 만들고 TimeTraceAOP class를 만들고 혹시 @Aspect 어노테이션에 오류가 뜨면

아래 dependency를 build.gradle에 추가를 한다.  

implementation 'org.springframework.boot:spring-boot-starter-aop'

 

 

@Aspect
@Component //빈으로 등록 
public class TimeTraceAop {

    @Around("execution(* com.toy.project..*(..))") //공통 관심사항
    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 timsMs = finish  - start;
            System.out.println("END: " + joinPoint.toString()+ " " + timsMs + "ms");    }
    }
}

@Around()어노테이션 안에는 공통으로 적용 시킬 범위를 입력을 한다. 

필자는 모든 패키지 전 범위로 설정을 했다. 

 

log

클래스가 실행될 때 마다 실행시간을 확인할 수 있다. 

 

스프링 AOP 동작 방식 설명

 

 

 

 

AOP는 Porxy(가짜 memberService)를 만든다.

빈을 등록할 때 프록시->joinPoint.proceed()-> 실제 Servce실행이 실행이 된다. 

 

 

 

 

출처 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

'Programming > Back-end Language' 카테고리의 다른 글

[Spring] Test 코드를 작성해야 하는 이유/방법  (0) 2022.04.13
[Spring] DI 의존성 주입이란 ?  (0) 2022.04.13
[Spring] @ResponseBody은 무엇일까?  (0) 2022.03.28
[Spring]Failed to load resource: the server responded with a status of 404 () 오류 해결 방법  (0) 2022.03.24
[개발환경] Spring boot+React 연동하기  (0) 2022.03.23
    'Programming/Back-end Language' 카테고리의 다른 글
    • [Spring] Test 코드를 작성해야 하는 이유/방법
    • [Spring] DI 의존성 주입이란 ?
    • [Spring] @ResponseBody은 무엇일까?
    • [Spring]Failed to load resource: the server responded with a status of 404 () 오류 해결 방법
    sanhaa
    sanhaa
    sanha history book

    티스토리툴바