SH380 Logo
2025-03-31

비동기 처리와 Future 활용

#CS

csgal-logo

1. 이론

2. 활용

ExecutorService executor = Executors.newFixedThreadPool(2);
​
Future<Integer> future = executor.submit(() -> {
    Thread.sleep(1000);
    return 10;
});
​
System.out.println("작업 실행 중...");
// get() 호출 시 결과 대기
Integer result = future.get();
System.out.println("결과: " + result);

3. 심화

future-graph
completable-future-graph

4. 면접 대비 핵심 포인트

5. 면접 연습

Q1. 비동기 처리란 무엇이고 왜 필요한가요?
A: 요청 결과를 기다리지 않고 다른 작업을 동시에 수행하는 방식입니다. 자원 활용도를 극대화하고, I/O 대기 시간 동안 CPU 낭비를 줄여 성능을 개선할 수 있습니다.

Q2. Future의 한계는 무엇인가요?
A: \`get()\` 호출 시 Blocking이 발생하고, 다수 Future를 조합하기 불편합니다. 예외 처리나 Non-Blocking 체이닝에도 제약이 있습니다.

Q3. CompletableFuture가 Future보다 좋은 점은?
A: 콜백 기반 Non-Blocking 지원, 체이닝, 예외 처리(\`exceptionally\`), Future 조합(\`allOf\`, \`anyOf\`) 기능을 제공합니다.

Q4. 비동기 처리가 항상 성능을 높이나요?
A: 아닙니다. CPU Bound 작업에선 스레드 전환 비용이 오히려 성능을 떨어뜨릴 수 있습니다. I/O Bound 작업에서 효과가 더 큽니다.

Q5. 서버 성능 개선 관점에서 주의할 점은?
A: 스레드 풀 크기를 적절히 조절해야 하며, 불필요한 비동기화는 오히려 성능 저하를 유발합니다. 예외 처리를 반드시 고려해야 합니다.

6. 마무리

목록으로 돌아가기