본문 바로가기

토비의봄13

6. 비동기 RestTemplate, 비동기 MVC/Servlet Callable 리턴값이 있음 예외를 던질 수 있음 Runnable 리턴값이 없음 예외를 던질 수 없음 1. RestTemplate 가정 localhost:8081 쪽의 작업은 오래걸린다. 나에게 많은 요청이 온다. 아래의 코드는 block 방식이므로 작업시간 * 요청수 만큼의 시간이 걸림 @RestController public static class MyController { RestTemplate rt = new RestTemplate(); @GetMapping("/rest") public String rest(int idx) { String res = rt.getForObject("http://localhost:8081/service?req={req}", String.class, "hello " .. 2021. 3. 6.
5. 자바와 스프링의 비동기 개발기술 1. Java Future Future 비동기적인 연산에 대한 결과를 가지고있는 것 다른쓰레드에서 사용한 결과를 가져오는 가장 기본이되는 인터페이스이다. // 쓰레드풀 쓰레드를 생성하고 없애는데에는 CPU 사용이 많다. 이를 없애지않고, 반납한 뒤에 재활용하여 비용이 많이 들어가는 것을 최소화하기위해 사용 @Slf4j public class FutureEx { public static void main(String[] args) throws Exception { ExecutorService es = Executors.newCachedThreadPool(); // Runnable 인터페이스를 받음 Future f = es.submit(() -> { Thread.sleep(2000); log.info("As.. 2021. 3. 5.
4.3. Reactive Streams 1. Single Thread 아래의 코드는 하나의 쓰레드(main)에서 publisher 과 subscriber 가 모두 수행된다. 옵저버 패턴을 쓸 때의 장점은 이벤트 발생은 백그라운드에서 실행하는 부분은 이벤트 발생시 (non-blocking) 수행 하지만 아래의 코드에서는 해당 장점을 찾을 수 없다. @Slf4j public class SchedulerEx { public static void main(String[] args) { Publisher pub = sub -> { sub.onSubscribe(new Subscription() { @Override public void request(long n) { sub.onNext(1); sub.onNext(2); sub.onNext(3); sub.. 2021. 3. 3.
4.2. Reactive Streams 1. Operator Reactive Streams 의 현재까지의 구조는 아래와 같다. Publisher 가 데이터를 만들어 Subscriber 에게 전달 Publisher -> Data -> Subscriber Operator들을 사용해서 데이터를 가공하는 플로우를 만든뒤에 Publisher.subscribe(Subscriber) 하여 플로우를 정의한다. Publisher -> [Data1] -> Operator1 -> [Data2] -> Operator2 -> [Data3] -> Subscriber Delegate 하는 클래스를 기반으로 재호출하는 방식으로 Operator 을 만들 수 있다. private static Publisher reducePub(Publisher publisher, R ini.. 2021. 2. 28.