Computer Science/CS 지식

[CS 지식] 동기 - 비동기

웅지니어링 2025. 2. 7. 14:40

* 동기(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 호출
    • 여러 개의 독립적인 작업을 동시에 실행해야 할 때