티스토리 뷰

창천향로님의 블로그를 보며 내가 이해한 것을 기반으로 aop를 그려보았다.

참고한 스승님의 코드는 추가 예정이다.

실제로는 아직 구현해본 적이 없으므로 미리 작성된 코드를 봤고, 학원 동기와의 토론을 통해 이해한 것이다.

 

Aop?

과거 MSA 기반으로 모듈 설계를 한 적이 있다.

큰 기능을 중점으로 모듈을 나눴는데 예를 들면 한 api에서 캘린더 기능과 TodoList의 기능이 있다고 한다면

캘린더, todoList 그리고 중앙의 연결고리를 해줄 common까지 3개의 모듈로 나뉘게 된다.

 

즉 하나의 인프라를 기반을 둔 api의 기능을 나누는 것인데

aop는 비즈니스 로직을 기반으로 둔 기능을 나누는 것이다.

 

말하자면 로그인 기능을 매번 모든 Controller에서 로직으로 처리해야 할 때 이 로그인 기능을 aop로 만들어 분리하는 것으로

코드의 중복 제거라는 좋은 효과도 얻어낼 수 있다.

 

타겟 (Target) 

부가기능을 지정하는 것을 타겟이라 하는데

여기서 부가기능이란 위의 예시와 같이 코드에서 분리할 특정 기능이다.

 

애스펙트 (Aspect)

우리는 흔히 코드를 작성할 때 큰 단위로 패키지를 만든다.

이처럼 타겟의 기능을 모아 모듈로 만드는 것을 애스펙트라 한다.

 

어드바이스 (Advice)

애스펙트를 패키지라는 느낌으로 생각한다면

어드바이스는 실질적인 비즈니스 로직으로 애스펙트 안에 존재한다.

 

포인트컷 (PointCut)

어디의 어떤 부분에 타겟으로 지정된 기능을 적용할지 지정해주는 부분이다.

 

조인포인트 (JoinPoint)

어드바이스가 적용될 수 있는 위치를 선정해주는 것이라는데 사실 포인트컷과 아직 잘 구분이 안 돼서

이 부분에 대한 것은 실제로 구현해보며 이해해야 할 것 같다.

 

프록시 (Proxy)

이 프록시라는 객체는 인터셉터와 비슷한 녀석인데

타겟이 실행될 때 전처리 혹은 후처리를 해주는 녀석이다.

더 자세한 건 아직 이해하지 못 했다.

 

인트로덕션 (Introduction)

기존 애스펙트의 코드 변화가 없이 다른 로직이나 기능을 추가하는 것이다.

이 부분도 구현해보며 이해해야 할 부분이다.

 

위빙 (Weaving)

지정된 위치에 애스펙트를 적용해서 프록시를 만드는 과정이라고 한다.

<자세한건 잘 모르겠지만 프록시를 만드는 것으로 이해함>

 

더 자세한 내용이 궁금하다면 아래 블로그에 들어가 읽어보길 바란다.

https://jojoldu.tistory.com/71

 

AOP 정리 (3)

AOP란? Spring의 핵심 개념중 하나인 DI가 애플리케이션 모듈들 간의 결합도를 낮춰준다면, AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것입니다. AOP (Aspect-Oriented Programming)..

jojoldu.tistory.com

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함