프로젝트를 진행하면서 테스트 코드를 통해서 사전에 에러를 잡을 수 있다는 것을 최근에 알게 되었는데
예를 들어 웹사이트를 구동하는데 어느 한 부분에 문제가 있거나 비효율적인 코드로 인해
사이트 전체 구동에 문제가 생기거나 병목현상이 생겼다고 가정해보자
상사가 나에게 와서 "00씨 오늘 중으로 전체 메서드 구동시간좀 측정해서 알려줘요" 라고 했다면?
만약 사용된 메서드가 2000개라면 오늘 퇴근은 포기해야한다
그렇게 하나하나 스타트 엔드로 시간을 측정해서 다음날 출근해서 보고를 했는데
상사가 이번에는 "00씨 그거 초 단위로 하니까 좀 찾기 힘드네 ms로 다시 해줘요" 라고 하면?
까라면 까야하지만 진짜 생각만해도 지옥같은 시간이다.
그럴 때 우리는 AOP라는 것을 이용해서 공통된 문제를 해결 할 수 있다
위 코드를 보면 @Around라고 작성되어 있는데 어느 지점까지 내가 뽑을 것이냐를 측정하는 범위선택인데
패키지안에 작성된 모든 것을 보겠다고 가정하고 구동을 하게 되면
해당 범위 내에서 작동하는 모든 메서드들의 구동시간을 확인 할 수 있다
이렇게 시작과 끝을 통해서 각각 소요되는 시간을 확인 할 수 있다
2000번 써야할 것을 한 방에 해결하는 마법같은 상황인데
이것을 통해서 어느 지점에서 병목현상이 생기는지 확실하게 파악해서 문제를 보다 정확하고 신속하게 처리할 수 있게 되는 것이다
기존 방식은 위 이미지처럼 컨트롤러가 멤버 서비스를 호출하는 것이 일반적인데 반면에 AOP를 적용하게 되면
컨트롤러에서 서비스로 가기 전에 프록시라는 것이 생성되어서
실제 서비스가 올라오기전에 임의로 생성된 프록시 서비스를 먼저 올려보낸다
말만 그런 것이 아니라 실질적으로 어떻게 올라오는지 확인하기 위해서 실제로 .getClass()를 찍어둔 다음 서버를 재실행해보면
이렇게 EnhancerBySpring으로 끝나는 것이 아니라 뒤에 알수 없는 문자와숫자가 같이 출력된다
조금더 이해하기 쉽게 그림을 보면
프록시를 앞세워주고 그 다음 실제 컨트롤러 -> 서비스 -> 리포지토리 가 올라오는 것이다
이런것을 프록시방식 AOP라고 한다
아직 많이 부족하지만 이런 것이 있다라는 것을 알고 나중에 비슷한 문제가 생겼을 때 이번에 배운 것을 응용해서 문제를 해결 할 수 있는
보람된 순간이 오길 기대해본다
'BackEnd' 카테고리의 다른 글
자료형의 구조 무조건 이해하게 정리(기본자료형, 참조자료형)Reference (0) | 2023.01.20 |
---|---|
JAVA random 출력 예제를 통한 복습 (0) | 2023.01.18 |
MVC 패턴 (0) | 2023.01.01 |
redirect와 forward (0) | 2022.12.22 |
@GetMapping 과 @PostMapping (0) | 2022.12.22 |