분류 전체보기89 8. CompletableFuture 1. CompletableFuture Future (java) 비동기적인 결과를 담고있는 오브젝트 ListenableFuture (spring) Future + Callbacks CompletableFuture 간단하게 비동기적인 결과를 가져올 수 있음 Block 방식 CompletableFuture.get() 을 이용해서 결과값을 가져오는 방식 public static void main(String[] args) throws ExecutionException, InterruptedException { CompletableFuture f = new CompletableFuture(); f.complete(2); f.completeExceptionally(new RuntimeException()); Sys.. 2021. 3. 9. 7. AsyncTemplate 의 콜백헬, 중복작업 문제 1. 콜백헬 예시와 해결 코드의 근본적인 문제 ListenableFuture 를 리턴하고 콜백을 추가하기 때문에 아래와 같은 콜백헬 문제가 생김 에러를 처리하는 부분이 계속 중복이 된다. @GetMapping("/rest") public DeferredResult rest(int idx) { DeferredResult dr = new DeferredResult(); ListenableFuture f1 = rt.getForEntity("http://localhost:8081/service?req={req}", String.class, "hello " + idx); f1.addCallback(s -> { ListenableFuture f2 = rt.getForEntity("http://localhost:80.. 2021. 3. 8. 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. 이전 1 ··· 6 7 8 9 10 11 12 ··· 23 다음