분류 전체보기 (127) 썸네일형 리스트형 Scheduler Reactor의 Scheduler비동기 프로그래밍을 위해 사용되는 스레드, 즉 Reactor Sequence에서 사용되는 스레드를 관리해 주는 관리자 역할을 합니다. Reactor의 Scheduler는 관리자의 역할로서 어떤 스레드에서 무엇을 처리할지 제어합니다. 자바에서 멀티 스레드를 관리하는 것은 까다롭습니다. 스레드 간의 경쟁 조건 등을 신중하게 고려해서 코드를 작성해야 하는데 이를 통해 예상치 못한 오류 발생할 가능성 높습니다.Reactor의 Scheduler를 통해서 이런 문제를 최소화할 수 있습니다. 우선, Reactor의 Scheduler를 사용하면 코드 자체가 매우 간결해집니다. 그리고, Scheduler가 스레드의 제어를 대신해 주기 때문에 개발자가 직접 스레드를 제어해야 하는 부담이 적.. Cold sequence와 Hot sequence Cold와 HotCold sequence와 Hot sequence를 알기 전에 Cold와 Hot의 의미를 아래와 같이 정리하고 시작합시다. Cold는 무언가를 새로 시작하고, Hot은 무언가를 새로 시작하지 않는다. SequenceSequence란, Publisher가 emit 하는 데이터의 연속적인 흐름을 정의해 놓은 것으로, 코드로 표현하면 Operator 체인 형태로 정의됩니다.즉, Cold를 Sequence에 적용해 보면 Sequence가 새로 시작된다 로 생각해 볼 수 있고, Hot을 Sequence에 적용해 보면 Sequence가 새로 시작되지 않는다라고 생각할 수 있겠습니다. Cold sequence란?Cold sequence는 Subscriber 가 구독할 때마다 데이터 흐름이 처음부터 다.. Reactor란? Reactor란?Reactor는 RxJava와 함께 Reactive Stream(리액티브 스트림) 사양을 구현한 Reactive 라이브러리입니다. 공식문서: https://projectreactor.io/ Reactive Stream 관련 내용은 아래 블로그에서도 설명이 잘되어 있어서 참고하시면 되겠습니다. https://velog.io/@korea3611/%EB%A6%AC%EC%95%A1%ED%8B%B0%EB%B8%8C-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Reactive-Streams%EB%9E%80 리액티브 스트림즈(Reactive Streams)란?이 글은 인프런의 Kevin의 알기 쉬운 RXJava 1부를 참고합니다.데이터를 생성해서 내보는 쪽 : 생산자생산자가 데이.. 스프링 AOP의 내부호출 문제 및 해결법 내부 호출스프링은 프록시 방식의 AOP를 사용합니다. 따라서, AOP를 적용하려면 항상 프록시를 통해서 대상 객체(Target)를 호출해야 합니다. 프록시를 거치지 않고 대상 객체를 직접 호출하면, AOP가 적용되지 않고 Advice도 호출되지 않습니다.즉, 대상 객체의 내부에서 메서드 호출이 발생하면 프록시를 거치지 않게 됩니다. 코드를 통해 확인해 보겠습니다.package hello.aop.internalcall;@Slf4j@Componentpublic class CallServiceV0 { public void external() { log.info("call external"); internal(); //내부 메서드 호출(this.internal()) } .. Spring AOP - 포인트컷(pointcut) 지시자(@annotation, this, target) 해당 포스팅에 이어 @annotation, bean 지시자도 알아보겠습니다.@annotation: 특정 애너테이션이 적용된 메소드에 대해 포인트컷을 설정합니다. 즉, 메서드에 특정 애너테이션이 붙어 있을 때 그 메서드를 가로챌 수 있습니다.[참고] @annotation: 메서드 수준의 애너테이션을 타겟으로 함.@target: 클래스 수준의 애너테이션을 타겟으로 함. @annotation@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface MyCustomAnnotation {}public class MyService { @MyCustomAnnotation public void myAnnotatedMethod.. Spring AOP - 포인트컷(pointcut) 지시자(@target, @within) 해당 포스팅에 이어서 @target, @within 지시자도 알아보겠습니다.@target : 특정 애너테이션이 적용된 타깃 객체의 메서드에 대해 포인트컷을 설정합니다. 즉, 메서드가 호출되는 클래스의 인스턴스가 특정 애너테이션을 가지고 있을 때 해당 메서드를 가로챌 수 있습니다. 부모 클래스의 메서드까지 어드바이스를 적용할 수 있습니다.@within : 특정 애너테이션이 적용된 타입 내의 모든 조인 포인트를 지정합니다. 이는 애너테이션이 붙은 클래스의 메서드뿐만 아니라 그 하위 클래스의 메서드도 포함합니다. 부모 클래스의 메서드까지 어드바이스를 적용할 수 없습니다.즉, @target과 @within 은 타입에 있는 애노테이션으로 AOP 적용 여부를 판단합니다. @target // 애너테이션 정의@Rete.. Spring AOP - 포인트컷(pointcut) 지시자(within, args) 해당 포스팅에 이어서 포인트컷 지시자에 대해서 작성하였습니다. within within 지시자는 특정 타입 내의 조인 포인트들로 매칭을 제한합니다. 즉, 해당 타입이 매칭되면 그 안의 메서드(조인 포인트)들이 자동으로 매칭됩니다.문법은 execution에서 타입 부분만 사용한다고 보면 됩니다. 참고로 execution 문법은 아래와 같았습니다.execution([접근제어자?] [메서드 반환타입] [선언 타입?][메서드 이름]([파라미터]) [예외?]) 즉, 여기에서 [선언 타입?] 부분을 사용합니다. 즉, within(패키지명..*) 지난 ExecutionTest 에 이어서 WithinTest 코드를 작성해 보겠습니다.public class WithinTest { AspectJExpressionP.. Spring AOP - 포인트컷(pointcut) 지시자(execution) @Aspect를 사용해서 스프링 AOP를 구현할 때, 아래와 같이 표현식을 사용합니다.@Pointcut("execution(hello.aop...*.*(..)") 포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작합니다.(일명 PCD) Spring AOP에서 포인트컷(Pointcut) 지시자는 Aspect(관점)에서 어떤 JoinPoint를 적용할지 정의하는 역할을 합니다. 이런 포인트컷 지시자의 종류에는 아래의 것들이 있습니다.execution(): 메소드 실행 시점을 포인트컷으로 지정합니다. 메서드 이름, 매개변수, 반환 타입 등을 기반으로 필터링할 수 있습니다. 가장 많이 사용합니다.@Pointcut("execution(* com.example... 이전 1 2 3 4 5 ··· 16 다음