전체 글

나와 더불어 성장할 개발새발 블로그
Spring

[Spring] @Async를 통해 비동기로 작업 처리하기

개요Spring의 @Async 어노테이션은 메서드를 비동기적으로 실행할 수 있게 해주는 강력한 기능이다.스레드를 통해 비동기 방식으로 로직을 처리하여, 시간이 오래 걸리는 작업을 백그라운드에서 수행할 수 있다. @Async 사용 이점ThreadPoolExecutor를 직접 사용하지 않고 @Async를 사용할 때 얻을 수 있는 이점은 정말 많지만 가장 큰 이점을 뽑자면 코드의 간결성이다. //1. ThreadPoolExecutor 사용public void sendEmail(String email) { executor.execute(() -> { try { // 비동기로 실행할 로직 } catch (Exception e) { log.er..

Language/Java

[Java] Virtual Thread 부셔보기

개요 - 기존 스레드의 한계Java의 전통적인 동시성 모델은 Thread per Request 모델로 요청에 대해 하나의 스레드를 할당한다. 해당 요청 처리가 끝날 때 까지 스레드가 점유된다. 문제는 JVM의 스레드(Platform Thread)는 OS 스레드와 1:1로 매핑되며, 스레드 당 메모리를 1~2MB 점유하므로 비용이 비싸다.서버의 자원은 한정되어 있기에 요청이 늘어난다고 해도, 수천 개 이상의 스레드를 생성하기에는 한계가 있다.또한 JVM의 스레드는 I/O 블로킹이 발생하면, 작업이 완료될 때까지 다른 요청을 처리할 수 없다. 동시 요청이 스레드 풀 크기를 초과하게 되면 나머지 요청은 대기할 수 밖에 없고 병목이 될 수 있다. Virtual Thread는 이러한 한계를 극복하고 처리량을 늘릴..

Language/Java

[Java] Callable과 Future & CompletableFuture

개요자바는 스레드를 통해 작업들을 병렬적으로 처리할 수 있다.하지만 Runnable 인터페이스를 통해 작업을 제출하게 되면, 반환값을 받을 수 없다는 단점이 있다.Executor 프레임워크는 이러한 문제를 해결하기 위해 Callable과 Future라는 인터페이스를 도입했다. 이전 글에 이어지는 내용이다. Runnable vs Callablepublic interface Runnable { void run();}Runnable 인터페이스는 반환 값이 없으며, 예외를 던질 수도 없다. public interface Callable { V call() throws Exception;}Callable 인터페이스는 값을 반환할 수 있으며, 예외를 던질 수 있다. Callable과 Future 사용class ..

kkang._.h00n
깡훈인뎁쇼