* 동기(Synchronous) vs 비동기(Asynchronous)
- 동기(Synchronous)
- 하나의 작업이 끝나야 다음 작업이 실행됨 (순차적 실행)
- 요청을 보내면 응답이 올 때까지 대기
- 단순하지만, 응답 시간이 길면 전체적인 성능 저하 가능
- 비동기(Asynchronous)
- 요청을 보내고 응답을 기다리지 않고 다음 작업을 수행
- 응답이 오면 별도로 처리
- 멀티스레딩을 활용하여 여러 작업을 병렬로 처리 가능
* 동기 코드 예제(Java)
public class SyncTest {
public static void main(String[] args) {
System.out.println("1");
printA();
System.out.println("2");
System.out.println("3");
System.out.println("4");
}
public static void printA() {
try {
Thread.sleep(3000);
System.out.println("A");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
위의 코드의 실행 순서는 다음과 같다.
printA() 메서드가 끝날 때까지 다른 작업들은 실행되지 못하고 대기하는 것을 알 수 있다.
* 비동기 코드 예제(Java)
public class AsyncTest {
public static void main(String[] args) {
System.out.println("1");
Thread thread = new Thread(AsyncTest::printA);
thread.start();
System.out.println("2");
System.out.println("3");
System.out.println("4");
}
public static void printA() {
try {
Thread.sleep(3000);
System.out.println("A");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
위의 코드의 실행 순서는 다음과 같다.
이를 통해 printA() 메서드가 실행되는 동안 다른 작업도 동시에 실행 가능하다는 것을 알 수 있다.
* 동기 vs 비동기를 언제 선택해야 하는가?
- 동기(Synchronous)
- 순차적으로 실행이 중요한 경우 (예: 데이터베이스 트랜잭션)
- 단순한 작업 (예: 작은 규모의 계산, 로컬 파일 읽기)
- 비동기(Asynchronous)
- 네트워크 요청, 파일 I/O, 대량 데이터 처리, API 호출
- 여러 개의 독립적인 작업을 동시에 실행해야 할 때