티스토리 뷰

QR인식 or 이미지 클릭하여 회원가입시(평생 수수료 25%이상 할인)-[25% or more discount on commission]

 

아래 링크를 통해 가입시 바이낸스 코인 거래수수료 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

댓글

QR인식 or 이미지 클릭하여 회원가입시(평생 수수료 20%이상 할인)-[20% or more discount on commission]

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
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
글 보관함