초급 개발자를 위한 동기 처리 vs 비동기 처리 개념 이해하기
1. 동기 처리(Synchronous Processing)
개념: 하나의 작업이 끝나야 다음 작업이 실행됨.
예시: 음식 주문 후, 요리가 다 끝날 때까지 기다린 후 음식을 받음.
코드 예제 (Java)
public class SyncExample { public static void main(String[] args) { System.out.println("요리 시작"); // 1 cook(); // 2 (요리하는 동안 멈춰 있음) System.out.println("요리 완료, 서빙 시작"); // 3 } public static void cook() { try { Thread.sleep(3000); // 3초 동안 요리 (대기) System.out.println("요리가 끝남"); } catch (InterruptedException e) { e.printStackTrace(); } } }
실행 흐름:
요리 시작 (3초 대기) 요리가 끝남 요리 완료, 서빙 시작
특징:
- 코드가 위에서 아래로 순차적으로 실행됨.
- 하나의 작업이 끝나야 다음 작업이 실행됨.
- 프로그램이 멈춘 것처럼 보일 수 있음.
2. 비동기 처리(Asynchronous Processing)
개념: 하나의 작업을 실행하는 동안 다른 작업을 동시에 진행 가능.
예시: 음식 주문 후, 다른 손님을 받거나 서빙을 하면서 요리가 완료되길 기다림.
코드 예제 (Java -
CompletableFuture
)import java.util.concurrent.CompletableFuture; public class AsyncExample { public static void main(String[] args) { System.out.println("요리 시작"); // 1 CompletableFuture.runAsync(() -> cook()); // 2 (비동기 실행) System.out.println("서빙 준비 중"); // 3 (요리가 끝나길 기다리지 않음) } public static void cook() { try { Thread.sleep(3000); // 3초 동안 요리 System.out.println("요리가 끝남"); } catch (InterruptedException e) { e.printStackTrace(); } } }
실행 흐름 (결과 예측)
요리 시작 서빙 준비 중 (3초 후) 요리가 끝남
특징:
- 요리가 끝나길 기다리지 않고 바로 "서빙 준비 중"이 출력됨.
- 동시에 여러 작업을 수행 가능 → 효율적.
- 하지만 실행 순서를 보장하지 않기 때문에 결과 순서가 다를 수 있음.
비동기 처리가 중요한 이유
- 속도 향상 → 동기 처리로 하면 하나씩 기다려야 하지만, 비동기 처리하면 여러 개를 동시에 진행할 수 있음.
- 응답성 증가 → 웹 서버, 데이터 처리 등에서 중요한 개념 (예: 서버가 여러 요청을 동시에 처리 가능).
- 리소스 활용 최적화 → CPU가 유휴 상태로 기다리는 것을 방지.
언제 동기/비동기를 사용할까?
상황 | 동기 처리 | 비동기 처리 |
---|---|---|
간단한 작업 | ✅ 적합 | ❌ 불필요 |
사용자 입력 대기 | ✅ 적합 | ❌ 필요 없음 |
서버 요청 (API 호출) | ❌ 느림 | ✅ 적합 |
파일/데이터베이스 처리 | ❌ 지연됨 | ✅ 비동기로 처리 |
요약
- 동기 처리: 한 작업이 끝나야 다음 작업 진행 → 이해하기 쉬우나 느릴 수 있음.
- 비동기 처리: 작업을 병렬로 실행 → 성능 향상, 효율적이지만 복잡할 수 있음.
- Java에서 비동기 처리:
Thread
,CompletableFuture
,ExecutorService
등을 활용.
비동기 처리를 연습하려면?
Thread.sleep()
을 활용하여 동기/비동기 실행 결과 비교.CompletableFuture
를 사용하여 비동기 실행 흐름을 이해하기.- 실제 API 요청(
HttpClient
)을 동기/비동기로 비교해보기.
'자바' 카테고리의 다른 글
매개변수가 없는 메서드와 매개변수가 없는 생성자 비교를 통한 생성자 이해 (0) | 2025.02.08 |
---|---|
final 키워드 특징 (0) | 2025.02.08 |
null이란? (0) | 2025.02.08 |
잘못된 메서드 사용 예시 (0) | 2025.02.08 |
가변인자와 배열인자 (0) | 2025.02.08 |