티스토리 뷰
아래 링크를 통해 가입시 바이낸스 코인 거래수수료 25% 평생할인!
25% lifetime discount on Binance Coin transaction fees when you sign up through the link below!
https://accounts.binance.com/en/register?ref=286562663
Log In | Binance
login-description
accounts.binance.com
바이낸스 추천코드로 가입하고 수수료 25% 평생 할인 받으세요! (바이낸스 가입 레퍼럴코드, 추천
바이낸스 추천코드로 가입하고 수수료 25% 평생 할인 받으세요! 바이낸스 가입코드, 레퍼럴코드, 추천코드, 할인코드 : ( 286562663 ) 아래 링크를 통해 가입시 25% 할인 받을 수 있습니다 http
pink24.tistory.com
Spring AOP 4-1 AOP
AOP 개념
OOP를 좀더 OOP 답게... (OOP를 대체하지는 않음)
관심의 분리(Separation of Concerns)
문제 영역을 독립적인 모듈로 분해
핵심관심(Core Concerns)
객체지향 분석/설계 과정을 통해 쉽게 모듈화/추상화가 가능함.
횡단관심(CrossCutting Concerns)
객체지향의 기본 원칙을 지키면서 이를 분리해서 모듈화하는 것이 매우 어려움
횡단관심 모듈들은 여러개의 또는 많은 핵심 관심 모듈들과 긴밀하게 결합되어 있음
따라서 기존 OOP 개념으로는 뾰죽한 답이 나오지 않음.
관점 분리
OOP의 문제점
횡단 관심 : 예) 로깅, 인증, 리소스 풀링, 에러 검사 등
이러한 횡단 관심은 핵심 관심과 다른 형태로 존재함.
아래와 같은 방식은 핵심관심 모듈에 객체생성, 메서드 호출 코드가 모두 포함되어야 함.
public class BeforeAdvice {
public void beforeLog() throws Throwable{
System.out.println("[사전 충고] 메소드가 실행되기 전에 호출됨...");
}
}
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
public void addUser(UserVO vo) {
BeforeAdvice before = new BeforeAdvice();
before.beforeLog();
userDAO = new UserDAO();
userDAO.addUser(vo);
}
}
한계점 정리
중복되는 코드
지저분한 코드
가독성 저하, 실수나 버그 유발, 유지보수에 어려움 가중
생산성 저하
핵심관심과 횡단관심을 함께 구현해야 하므로 개발의 집중력을 떨어뜨리고 결과적으로 생산성 저하를 불러옴
재활용성 저하
변경의 어려움
새로운 요구사항이 많은 부분에 영향을 미치는 경우 적용이 힘들어짐
새로운 관심영역의 등장시에 적용을 어렵게 함.
툴의 도움없이 리팩토링도 어려움
EJB에서의 AOP
현재의 AOP 이전의 방식
두가지 방법
EJB와 같은 컨테이너 또는 서버를 이용한 방법
횡단 관심 기능을 컨테이너 상에서 작동하는 EJB 모듈에 적용
일종의 엔터프라이즈 서비스
POJO 지원하지 않음
Dynamic Proxy를 이용한 인터셉터 체인 방식
JDK1.3 부터 지원
컨테이너 개발자들을 통해 많이 사용된 방식
복잡한 프레임워크 또는 컨테이너의 도움이 필요
AspectJ
Java VM과 호환되는 최초의 AOP 툴
AspectJ과 별도의 컴파일러나 위빙에 의존하지 않고 Spring에 적용됨
위빙(Weaving) : CrossCutting이라고도 함. AOP가 핵심 관심 모듈의 코드를 직접 건드리지 않고 필요한 기능이 작동하도록 함.
AOP 용어
조인포인트(Joinpoint)
횡단 관심 모듈인 Advice가 삽입되어 동작할 수 있는 실행가능한 위치로서 포인트컷(Pointcut) 후보 위치임.
메서드 호출 시점, 메서드가 리턴되는 시점 등이 조인포인트가 될 수 있음
포인트컷(Pointcut)
어떤 클래스의 어느 조인포인트를 사용할 것인지를 결정하는 선택기능
AOP가 항상 모든 모듈의 모든 조인포인트를 사용하는 것이 아니기 때문에, 필요에 따라 사용해야할 모듈의 특정 조인포인트를 지정할 필요가 있음.
<beans xmlns="http://www.springframework.org/schema/beans" ...>
<aop:config>
<aop:pointcut id="testPointcut"
expression="execution(* com.multicampus.biz.user.UserServiceImpl.*(..))"/>
</aop:config>
</beans>
어드바이스(Advice)
각 조인포인트에 삽입되어 동작할 수 있는 코드
주로 메서드 단위로 구성됨
포인트컷에 의해 결정된 모듈의 조인포인트에서 호출되어 사용됨
동작 시점은 AOP 기술마다 조금씩 다름
before, after, after-returning, after-throwing, around
어드바이스 예
<beans xmlns="http://www.springframework.org/schema/beans" ...>
<bean id="aroundAdvice" class="com.multicampus.biz.common.FilterAdvice" />
<aop:config>
<aop:pointcut id="testPointcut"
expression="execution(* com.multicampus.biz.user.UserServiceImpl.*(..))" />
<aop:aspect id="logAspect" ref="aroundAdvice">
<aop:around pointcut-ref="testPointcut" method="filter" />
</aop:aspect>
</aop:config>
</beans>
위빙(Weaving or CrossCutting)
포인트컷에 의해 결정된 조인포인트에 지정된 어드바이스를 삽입하는 과정
AOP의 핵심적인 처리과정
처리방식
Compile-time weaving, Loading- time weaving, Run-time weaving
Spring AOP는 Run-time weaving임.
Aspect 또는 Advisor
Aspect는 포인트컷(where)과 어드바이스(what)을 합쳐놓은 것
어느 조인포인트에 어떤 기능을 삽입할 것인지를 정의하는 것
<beans xmlns="http://www.springframework.org/schema/beans" ...>
<bean id="aroundAdvice" class="com.multicampus.biz.common.FilterAdvice" />
<aop:config>
<aop:pointcut id="testPointcut"
expression="execution(* com.multicampus.biz.user.UserServiceImpl.*(..))" />
<aop:aspect id="logAspect" ref="aroundAdvice">
<aop:around pointcut-ref="testPointcut" method="filter" />
</aop:aspect>
</aop:config>
</beans>
Spring AOP 특징
표준 자바 클래스로 작성
Spring AOP는 완벽히 자바 표준을 따름. 쉽다!!
별도의 컴파일러 필요 없음
Runtime 시점에서의 Advice 적용
프록시를 이용하여 핵심관심을 구현한 객체에 접근하도록 하여 AOP 지원
AOP 연맹 표준 준수
AOP 연맹의 표준과 호환되는 다른 프레임워크에서 재사용 가능
메서드 단위의 조인포인트만 제공
생성자와 관련된 조인포인트는 제공하지 않음.
. Spring에서의 AOP 설정
XML 설정 파일에 Schema 방식으로 적용
<beans xmlns="http://www.springframework.org/schema/beans" ...>
<bean id="logAdvice" class="com.multicampus.biz.common.LoggingAdvice" />
<aop:config>
<aop:pointcut id="testPointcut" expression="..."/>
<aop:aspect id="logAspect" ref="logAdvice">
<aop:before pointcut-ref="testPointcut" method="log"/>
</aop:aspect>
</aop:config>
</beans>
Bean 클래스 내에 Annotation을 사용하여 적용
@Aspect
public class LoggingAdvice {
@Pointcut("execution(* com.multicampus.biz.user.UserService.*(..))")
public void logPointcut(){}
@Before("logPointcut()")
public void beforeLog(){
System.out.println("[ 사전 충고 ] 비즈니스 메소드 호출 전에 수행됨...");
}
}
바이낸스 코인 거래수수료 25% 평생할인받기
바이낸스 추천코드로 가입하고 수수료 25% 평생 할인 받으세요! (바이낸스 가입 레퍼럴코드, 추천
바이낸스 추천코드로 가입하고 수수료 25% 평생 할인 받으세요! 바이낸스 가입코드, 레퍼럴코드, 추천코드, 할인코드 : ( 286562663 ) 아래 링크를 통해 가입시 25% 할인 받을 수 있습니다 http
pink24.tistory.com
비트코인 바이낸스 거래소 선물거래, 마진거래방법 가이드 - 바이낸스 회원가입(계정생성)
비트코인 바이낸스 선물거래, 마진거래 방법 feat.바이낸스 회원가입
바이낸스 거래소 선물 및 마진거래 방법! ------------------------------------------------------------------------ 1. 바이낸스 회원가입 2. 국내코인거래소에서 코인을 구매 후 바이낸스 지갑으로 전송. 3...
pink24.tistory.com
비트코인 바이낸스 마진거래방법, 선물거래방법 - USDT
바이낸스 선물, 마진거래 방법 (USDT)
Usdt 거래에 필요한 기존 단계들은 아래 링크드린 이전 포스팅을 참고해주세요 https://pink24.tistory.com/9 비트코인 바이낸스 선물거래, 마진거래 방법 feat.바이낸스 회원가입 바이낸스 거래소 선물
pink24.tistory.com