개요
최근 담당한 API 개발 업무 관련하여 공부를 하다 보니 동기, 비동기 통신 개념을 알아두어야 할 것 같다.
관련하여 적어둔다.
Synchronous
사전적으로 동기란 동시에 일어나다라는 의미인데, 컴퓨터 프로그래밍에서는 작업을 순차적으로, 직렬적으로 진행하는 것을 의미한다.
작업이 시작되면 해당 작업이 완료될 때까지 대기하는 방식으로, 요청(Request)을 보내면 반드시 응답(Response)을 받아야 다음 동작이 이루어진다. 호출한 함수 또는 작업이 반환될 때까지 대기하는 동안에는 실행 흐름이 차단(block)된다.
동기적인 방식은 간단하고 직관적인 코드를 작성할 수 있다는 장점이 있다.
반면 여러 작업이 동시에 실행되어야 하는 경우에는 각 작업이 완료될 때까지 기다려야 하기 때문에 전체 프로세스를 기준으로 보면 좋은 성능을 낸다고 할 수 없다. 특히 하나의 작업이 지연되면 다음 작업도 지연된다는 특징이 있다.
Asynchronous
사전적으로 비동기란 동시에 일어나지 않는다라는 의미이다. 다만 컴퓨터 프로그래밍에서는 작업이 독립적으로 실행되어 작업의 완료 여부를 기다리지 않고 다른 작업을 실행할 수 있는 방식을 말한다.
달리 말하면 요청(Request)을 보낸 후 그 응답(Response)과 상관없이 바로 다음 작업을 수행하기 때문에, I/O 작업이나 네트워크 요청과 같이 시간이 오래 걸리는 작업에 적합하다.
작업을 수행하는 동안 다른 작업을 수행할 수 있기 대문에 자원을 보다 효율적으로 사용할 수 있다는 장점이 있으며, callback, promise, async/await 등의 메커니즘으로 구현된다.
참고 문서
https://won-percent.tistory.com/150
https://jindevelopetravel0919.tistory.com/87
https://80000coding.oopy.io/ed22f6e8-89ea-4164-a86e-a6b92a1f54b4