동기와 비동기

Romy·2023년 6월 19일

✅ 동기와 비동기

동기와 비동기는 컴퓨터 프로그래밍에서 중요한 개념입니다. 동기와 비동기는 프로그램이 작업을 어떻게 처리하는지에 대한 방식에서 차이가 존재합니다. 동기는 추구하는 행위와 목적이 동시에 이루어지고, 비동기는 추구하는 행위와 목적이 다를 수도 있고 동시에 이루어지지도 않습니다.


동기 Synchronous

  • 동시에 일어나는 것
  • 순서가 있는 작업

요청과 그 결과가 동시에 일어나야 한다는 약속입니다. 요청을 하면 시간이 얼마나 걸리던 간에 요청한 자리에서 결과가 주어져야 합니다. 만약 사용자가 데이터를 서버에 요청한다면 그 서버가 데이터 요청에 따른 응답을 다시 사용자에게 리턴해주기 전까지 사용자는 다른 활동을 할 수 없습니다. 작업 요청을 했을 때 요청의 결과값(return)을 직접 받습니다. 즉, 순서를 보장하는 방식입니다. 요청이 온 순서대로 결과 값도 순서대로 출력합니다.

동기는 설계가 매우 간단하고 직관적이라는 장점이 있습니다. 하지만 결과가 주어질 때 까지 대기해야한다는 단점이 있습니다.

동기에 예시로는 입력 메소드가 있습니다. C언어의 scanf()와 Java의 Scanner 객체의 next()메서드 같이 사용자의 입력을 받는 함수 등, 일반적으로 사용하는 함수들은 대부분 동기적 방식입니다.

예시를 한 번 들어볼까요? 카페에서 손님들에게 주문을 받는다고 가정해봅시다. 첫 번째 손님이 아메리카노를 주문했습니다. 직원은 주문을 받고 결제를 하고 아메리카노를 만들고 다시 손님에게 아메리카노를 돌려주고 나서 두 번째 손님의 주문을 받습니다. 이렇게 하면 주문한 순서대로 음료가 순서대로 나가지만 앞에 손님의 음료가 다 만들어질 때 까지 다른 손님들은 기다리느라 아무 다른 일도 할 수 없습니다.



비동기 Asynchronous

  • 동시에 일어나지 않는 것
  • 순서를 보장하지 않음

요청과 그 결과가 동시에 일어나지 않을 거라는 약속입니다. 서버에게 데이터를 요청한 후 요청에 따른 응답을 계속 기다리지 않고 다른 액션을 취하거나 서버에게 다른 요청사항을 보내는 것도 가능합니다.

비동기는 요청의 결과가 반환되는 시간동안 다른 작업을 수행할 수 있다는 장점이 있습니다. 하지만 동기식보다 설계가 복잡하다는 단점이 있습니다

비동기 예시로는 JQuery의 ajax가 있습니다. 화면에 표시할 이미지나 데이터를 서버에서 불러와 표시할 때, ajax 라는 네트워크 통신 기술로 클라이언트가 요청한 데이터를 서버로부터 가져옵니다.

비동기도 한번 예시를 들어봅시다. 직원은 손님에게 주문을 받고 결제를 하고 진동벨을 줍니다. 그리고 음료를 만들고 음료가 다 만들어지면 진동벨을 울려 손님을 부르고 손님에게 음료를 넘깁니다. 이렇듯 카페에서 주문을 받을 때 비동기 방식으로 처리하면 손님은 주문을 하고 음료가 만들어지는 동안 다른 일을 할 수 있습니다. 즉, 비동기 작업은 여러 작업을 동시에 처리하고 하나의 작업이 완료될 때 까지 다른 작업을 기다릴 필요가 없는 것입니다. 대신 순서를 보장해주지 않습니다. 예를들면 A손님이 먼저 와서 딸기스무디를 주문하고 B손님이 그 다음에 아메리카노를 주문했는데 B손님의 아메리카노가 먼저 나올 수도 있습니다.

비동기 처리를 하는 이유를 생각해봅시다. 사용자가 사이트에서 버튼을 하나 눌렀는데 서버에서 응답이 올 때까지 아무 동작이 안된다면 사용자는 컴퓨터가 망가졌나? 또는 사이트가 이상한데? 라고 생각해 만족도를 떨어트리는 요소가 생길 수 있습니다.

이런 상황을 방지하기 위해서 비동기적인 데이터 처리를 통해 데이터가 로드될 때까지 로딩 함수를 통해 로딩 화면을 띄움으로써 사용자의 이해를 돕게 만들 수 있습니다.




🎤 질문과 대답

Q 동기와 비동기의 차이점은 무엇인가요?


동기와 비동기는 프로그램이 작업을 어떻게 처리하는지에 대한 방식에서 차이가 존재합니다.

동기는 요청과 그 결과가 동시에 일어나는 작업으로 순서를 보장합니다. 사용자가 데이터를 요청한다면 응답이 다시 돌아올 때까지 사용자는 다른 활동을 할 수 없습니다. 설계가 간단하다는 장점이 있으나, 여러 요청이 들어왔을 경우 대기해야한다는 단점이 있습니다.

비동기는 요청과 그 결과가 동시에 일어나지 않는 작업으로 순서를 보장하지 않습니다. 요청에 따른 응답을 즉시 처리하지 않고 대기 시간동안 다른 요청에 대한 처리가 가능합니다. 동기방식보다 복잡하지만 자원을 효율적으로 사용할 수 있다는 장점이 있습니다.



📒 참고

동기와 비동기의 개념과 차이

비동기 통신과 AJAX (동기 비동기의 개념, 차이,장단점, 예시, 콜백함수, 콜백지옥)

profile
👩‍💻 IT Engineering

0개의 댓글