Backend study/Backend theory
비동기(Asynchronous)와 동기(Synchronous)
adulty22
2024. 9. 11. 21:52
동기(Synchronous)와 비동기(Asynchronous)에 대한 이해 동기와 비동기는 프로그램의 작업 처리 방식을 설명하는 개념으로, 특히 입출력(I/O)이나 멀티태스킹에서 많이 언급됩니다. 이 두 개념은 작업을 어떻게 처리하고, 작업 완료를 기다리는 방식에서 큰 차이를 보인다.
1. 동기(Synchronous)
동작 원리:
- 동기 방식에서는 하나의 작업이 완료될 때까지 기다린 후 다음 작업을 진행한다. 즉, 작업을 순차적으로 실행하며, 이전 작업이 끝나기 전에는 다음 작업으로 넘어가지 않는다.
비유:
- 예를 들어, 식당에서 음식을 주문한 후 그 음식이 나올 때까지 아무것도 하지 않고 기다리는 상황이다. 이 경우에는 음식이 준비되기 전까지는 다른 일을 할 수 없다.
실생활 예:
- 은행에서 업무 처리를 생각해보면, 한 사람의 업무가 끝날 때까지 다른 사람이 처리되지 않는 상황이다. 줄을 서서 기다리고, 앞 사람이 끝나면 그다음 사람이 처리되는 방식이다.
동기 방식의 특징:
- 작업 완료까지 대기: 하나의 작업이 끝날 때까지 다른 작업을 진행하지 않기 때문에, 응답을 받을 때까지 프로그램이 멈춘 것처럼 보일 수 있다.
- 예측 가능: 순차적으로 진행되기 때문에 코드의 흐름이 단순하고 직관적이다.
2. 비동기(Asynchronous)
동작 원리:
- 비동기 방식에서는 작업을 요청한 후 결과를 기다리지 않고 다른 작업을 동시에 처리할 수 있다. 작업이 완료되면 그때 결과를 받아 처리하는 방식이다.
비유:
- 이번에는 음식점에서 음식을 주문한 후, 음식이 나올 때까지 기다리지 않고 다른 일을 할 수 있는 상황이다. 예를 들어, 그동안 책을 읽거나 대화를 나누는 등의 일을 할 수 있다. 음식이 준비되면 직원이 불러주고, 그때 가서 음식을 받는다. 즉, 결과가 나올 때까지 기다리지 않고 다른 작업을 계속 진행하는 것이 비동기 방식이다.
실생활 예:
- 배달 음식을 주문하는 상황을 생각해보면 된다. 음식을 주문한 후, 배달이 완료될 때까지 기다리지 않고 그동안 다른 일(예: 집안일)을 할 수 있다. 배달이 완료되면 알림을 받고 그때 가서 음식을 받는다.
비동기 방식의 특징:
- 병렬 처리: 여러 작업을 동시에 진행할 수 있기 때문에, 효율적으로 자원을 활용할 수 있다. 특히 네트워크 요청이나 파일 입출력(IO) 등 대기 시간이 긴 작업을 처리할 때 유리하다.
- 비결정적 순서: 결과가 나오는 시간이 불규칙적이기 때문에, 어떤 작업이 먼저 완료될지 알 수 없다. 따라서 작업 순서가 코드 순서와 다를 수 있다.
동기와 비동기의 차이
비교 항목 | 동기(Synchronous) | 비동기(Asynchronous) |
작업 처리 방식 | 하나의 작업이 완료될 때까지 기다린다. | 작업을 요청한 후 기다리지 않고 다른 작업을 동시에 진행한다. |
작업 순서 | 순차적으로 작업이 처리된다. | 작업이 병렬로 처리되며, 완료 순서는 예측할 수 없다. |
사용 예시 | 파일 읽기, 데이터베이스 쿼리 처리 (작업 대기 필요) | 네트워크 요청, API 호출 (대기 시간이 긴 작업) |
자원 사용 | CPU 자원을 효율적으로 사용하지 못한다. | CPU 자원을 효율적으로 사용할 수 있다. |
코드의 복잡도 | 직관적이고 간단하다. | 코드가 복잡해질 수 있으며, 결과 처리를 위한 콜백이나 이벤트 처리가 필요할 수 있다. |
언제 동기와 비동기를 선택할까?
- 동기 방식은 작업이 짧고 간단할 때, 또는 작업의 순서가 매우 중요할 때 유용하다. 예를 들어, 파일에서 데이터를 읽고 즉시 처리해야 하는 상황에서는 동기 방식이 적합하다.
- 비동기 방식은 대기 시간이 긴 작업(예: 네트워크 요청, 대용량 파일 처리, 데이터베이스 입출력 등)을 처리할 때 유리하다. 이러한 작업을 비동기 방식으로 처리하면 대기 시간 동안 다른 작업을 할 수 있기 때문에 시스템의 효율성을 높일 수 있다.
결론
- 동기(Synchronous)는 순차적으로 작업이 처리되며, 하나의 작업이 끝날 때까지 다른 작업을 하지 않고 기다리는 방식이다.
- 비동기(Asynchronous)는 병렬적으로 여러 작업을 동시에 처리하며, 작업의 완료를 기다리지 않고 다른 작업을 할 수 있는 방식이다.
비동기 방식은 주로 네트워크 작업이나 대기 시간이 발생하는 작업에 적합하며, 동기 방식은 간단한 작업이나 순서가 중요한 작업에 적합하다.
728x90