티스토리 뷰
창천향로님의 블로그를 보며 내가 이해한 것을 기반으로 aop를 그려보았다.
실제로는 아직 구현해본 적이 없으므로 미리 작성된 코드를 봤고, 학원 동기와의 토론을 통해 이해한 것이다.
Aop?
과거 MSA 기반으로 모듈 설계를 한 적이 있다.
큰 기능을 중점으로 모듈을 나눴는데 예를 들면 한 api에서 캘린더 기능과 TodoList의 기능이 있다고 한다면
캘린더, todoList 그리고 중앙의 연결고리를 해줄 common까지 3개의 모듈로 나뉘게 된다.
즉 하나의 인프라를 기반을 둔 api의 기능을 나누는 것인데
aop는 비즈니스 로직을 기반으로 둔 기능을 나누는 것이다.
말하자면 로그인 기능을 매번 모든 Controller에서 로직으로 처리해야 할 때 이 로그인 기능을 aop로 만들어 분리하는 것으로
코드의 중복 제거라는 좋은 효과도 얻어낼 수 있다.
타겟 (Target)
부가기능을 지정하는 것을 타겟이라 하는데
여기서 부가기능이란 위의 예시와 같이 코드에서 분리할 특정 기능이다.
애스펙트 (Aspect)
우리는 흔히 코드를 작성할 때 큰 단위로 패키지를 만든다.
이처럼 타겟의 기능을 모아 모듈로 만드는 것을 애스펙트라 한다.
어드바이스 (Advice)
애스펙트를 패키지라는 느낌으로 생각한다면
어드바이스는 실질적인 비즈니스 로직으로 애스펙트 안에 존재한다.
포인트컷 (PointCut)
어디의 어떤 부분에 타겟으로 지정된 기능을 적용할지 지정해주는 부분이다.
조인포인트 (JoinPoint)
어드바이스가 적용될 수 있는 위치를 선정해주는 것이라는데 사실 포인트컷과 아직 잘 구분이 안 돼서
이 부분에 대한 것은 실제로 구현해보며 이해해야 할 것 같다.
프록시 (Proxy)
이 프록시라는 객체는 인터셉터와 비슷한 녀석인데
타겟이 실행될 때 전처리 혹은 후처리를 해주는 녀석이다.
더 자세한 건 아직 이해하지 못 했다.
인트로덕션 (Introduction)
기존 애스펙트의 코드 변화가 없이 다른 로직이나 기능을 추가하는 것이다.
이 부분도 구현해보며 이해해야 할 부분이다.
위빙 (Weaving)
지정된 위치에 애스펙트를 적용해서 프록시를 만드는 과정이라고 한다.
<자세한건 잘 모르겠지만 프록시를 만드는 것으로 이해함>
더 자세한 내용이 궁금하다면 아래 블로그에 들어가 읽어보길 바란다.
'읽고 쓰고 씹고 즐기고 > Spring-boot' 카테고리의 다른 글
@TransactionalEventListener 적용기 (0) | 2020.11.02 |
---|---|
flyway 설정하기 (0) | 2020.01.31 |
내가 느낀 QueryDsl의 장단점과 후기 (0) | 2020.01.29 |
Spring boot와 jsp 그리고 Mybatis와 Hibernate (1) | 2019.12.18 |
Oauth2를 이용한 google API 사용 과정 (0) | 2019.06.06 |
- Total
- Today
- Yesterday
- Spring
- 프로그래머스
- MySQL
- HTTP
- 개발일지
- homebrew
- header
- Java
- 스터디 회고
- 자바스크립트
- springboot
- Request Handler
- mapping
- body
- Gradle
- JAR
- Spring Boot
- 멀티모듈
- graphQL
- 일지
- 개발
- JavaScript
- web
- RequestHandler
- 인텔리J
- 회고
- 한 입 크기로 잘라먹는 리액트
- @Autowired
- spring-boot
- 모듈
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |