날아라쩡글이의 블로그입니다.
AOP(Aspect Oriented Programming) 본문
중앙 HTA (2106기) story/spring java framwork story
AOP(Aspect Oriented Programming)
날아라쩡글이 2022. 1. 11. 13:49728x90
반응형
관점지향 프로그래밍
- 객체-객체-메소드 -값전달
- 객체지향 프로그래밍은 메소드로 대화하고 하나의 설계도로 여러개를 만들고 다양한 속성이 존재한다.
- 관점지향프로그래밍은 소스코드를 크게 2가지로 바라본다.
- 코드를 핵심기능과 공통기능으로 바라보는 시각이 존재한다.
- 핵심기능 - 학사관리, 교직원 관리에 특별하게 존재하는 기능
- 공통기능 - 로그출력, 인증/권한체크, 트랜잭션기능
- 반복적인 업무를 수행하는 것은 공통기능으로, 특별한 기능은 핵심기능으로 정의한다.
- 모든 class는 공통기능과 핵심기능으로 조합이 되어 있다.
- 업무로직메소드에서 핵심기능은 다르지만, 공통기능은 비슷하다
- 공통기능은 중복이 엄청많고, 핵심과 공통기능이 섞여서 구분이 어렵다.
공통과 핵심기능이 섞여있으면 공통기능변경을 하거나 추가를 할 때 반복적인 소스를 추가하게 된다. - 공통기능을 분리할 수 있다. -> 그럼 호출기능만 남게 된다.
- spring에서는 관점지향으로 핵심과 공통기능으로 구분해서 바라본다.
- 기존코드의 문제
- 핵심기능코드와 공통기능코드가 메소드 안에 섞여있다.
- 핵심기능코드를 변경/파악하기 어렵다.
- 새로운 공통기능을 추가하기 어렵다.
- 전체적으로 공통기능을 추가해야한다.
- 기존 모듈기능을 변경하기 어렵다.
- 핵심 + 공통기능이 섞인 메소드이다.
- 현재 수업을 듣는 우리는 느낄 수 없지만 실제 업무에서는 많은 것을 확인할 수 있다. 코드가 많으면 유지보수가 어렵다. AOP로 해낼 수 있다.
메소드를 공통기능안에 설정하는 것이다.
내가 아닌 공통서버를 받도록 만든다.
- 메소드 안에 핵심기능만 구현하고, 필요한 공통기능은 핵심기능이 실현될 때 함께 실행되게 하는 방식이다.
- 핵심기능실행에 필요한 공통기능을 메소드안에 직접작성하는 것이 아닌
실행할 공통기능을 모듈로 분리하여, 핵심기능이 실행될 때 같이 실행되게 한다. - AOP를 적용하면 핵심기능만 존재하는 업무로직 메소드를 구현할 수 있다.
- AOP의 주요 구성 요소
- Target
- 전체적인 공통기능을 추가한다.
- 핵심기능을 포함하는 메소드를 포함하고 있는 객체
- 공통기능 적용대상 객체이다.
- 현재까지 우리가 생성한 것이 target객체이다.
- Advice
- 핵심기능이 실행시 같이 실행될 공통기능이 구현된 객체이다.
- when + what정보를 포함하고 있다. (언제, 무엇을)
- 핵심로직실행전(when)로그를 출력하는(what)공통기능
- 핵심로직실행중 예외가 발생했을 때 다른 예외로 변경해서 던지는 공통기능
- 핵심로직실행전후로 실행시점을 계산해서 총 실행시간을 출력하는 공통기능
- 만들어야한다.
- joinPoint
- 공통기능이 적용될 지점
- spring은 메소드의 실행시점에 joinpoint를 지원한다.
- 다른 joinpoint는 라이브러리를 이용한다.
- target의 메소드가 조인포인트라고 생각하면된다.
- Pointcut
- 공통기능을 적용한 규칙
- where정보를 포함하고 있다.
- Aspect
- AOP적용을 위한 패키지로 Advice와 pointCut를 합친 것이다.
- 어디에 언제 어떻게 적용할 것인지에 대한 것이 포함되어 있다.
- 무조건 만들어야한다.
- weaving
- target에 aspect를 적용시켜서 proxy의 객체를 생성시키는 것이다.
- 배틀짜는 것을 의미하는 단어이다. 연결해주다.
- proxy
- 핵심기능과 공통기능이 같이 포함되어 있는 객체이다.
- Target
spring이 위빙해서 proxy의 객체를 생성한다.
context-root에서 txManager가 공통기능이 정의된 객체이다.
반응형
'중앙 HTA (2106기) story > spring java framwork story' 카테고리의 다른 글
springboot사용, 설정하기 (0) | 2022.01.13 |
---|---|
AOP만들기 (0) | 2022.01.12 |
트랜잭션 @transactional (0) | 2022.01.11 |
inteceptor로 로그인 처리하기 (0) | 2022.01.11 |
@어노테이션만들기 ArgumentResolve (0) | 2022.01.10 |
Comments