[Network] 동기와 비동기

KWANWOO·2022년 1월 17일
2
post-thumbnail

동기(Synchronous)와 비동기(Asynchronous)

소프트웨어를 개발할 때 동기 또는 비동기적으로 코드를 작성하는 일은 매우 중요하다. 용도나 방식에 따라서 올바른 방식을 적절히 선택해야하는데 이러한 동기와 비동기에 대해 개념을 정리해 보고자 한다.

1. 동기식(Synchronous) 통신의 정의


동기식 통신 및 동기식 프로그래밍이란 Synchronous란 뜻대로 동시에 일어난다는 뜻이다.

동시에 일어난 다는 것은 Request를 보내게 된다면 얼마나 시간이 걸리든 그 자리에서 Response를 받는다는 말이다. 즉, 두 서버 사이의 Transaction 을 맞추겠다는 의미이다.

Synchronous(동기식) 에서는 Request를 보내면 Response를 기다리기 때문에 Request를 보낸 Thread는 Response가 도착하기 전까지는 아무것도 하지 못하는 Block 상태가 됨을 의미한다.

2. 비동기식(Asynchronous) 통신의 정의


비동기식 통신 및 비동기식 프로그래밍이란 ASynchronous란 뜻대로 동시에 수행하지 않는다는 뜻이다.

동기식과는 반대로 Request를 보내더라도 Response를 언제 받아도 상관이 없다는 말이다. 즉, Request를 보내고 Response를 상관하지 않는 상태가 되는 것이다.

비동기식에서는 동기식과는 반대로 Response를 기다리지 않고 있으니 Request를 보낸 Thread는 다른 일을 할 수 있다. Request를 보내고 Response를 기다리지 않고 다른 일을 하는 이러한 상태를 Non Block 상태라고 한다.

비동기식은 비동기식 처리를 요청할 때 할일 이 끝난 후 처리결과를 알려주는 콜백이라는 함수를 함께 알려준다. 호출받은 함수는 처리가 끝나면 요청한 함수를 호출하여 처리 결과를 전달하게 된다. 이러한 함수 호출의 흐름은 사용자가 아닌 일을 마친 시스템이 호출하는 형태이기 때문에 콜백이라고 불린다.

  • ajax에서는 success, error, complete 을 콜백함수라고 할 수 있다.

비동기 방식은 DOS같은 단일 운영체제에서는 불가능하며 windows 같은 multitask 환경에서만 가능하다.

3. 동기식 통신의 장단점

1) 장점

  • Thread는 Request를 보내고 Response를 받고 Request를 다시 보내는 작업을 수행하게 되기 때문에 요청과 응답값의 순서를 보장하게 된다.
  • 또한 보낸 Request에 대한 처리 결과 값을 보장 받을 수 있다.

2) 단점

  • Response가 지연되게 된다면 Request를 보낸 Thread는 해당 Response를 계속 기다리는 상태가 된다는 단점이 있다.
  • 순차적으로 Response를 받고 Request를 받는 구조로 Response가 계속 지연되게 된다면 뒤에 들어오는 요청들은 Connection 가능한 Thread가 없어 연결을 맺지 못 해 성능이 떨어질 수 있다.

4. 비동기식 통신의 장단점

1) 장점

  • Response를 기다리지 않고 Non Block 상태로 계속 자기일을 하는 Async(비동기식) 방식은 Sync(동기식) 방식에 비해 성능이 좋다.
  • 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다.

2) 단점

  • Thread가 Response를 받지 않고 여러가지 요청 보냈을때 뒤에 보낸 요청이 먼저 처리가 되었다면 뒤에 요청값에 대한 응답값이 먼저 올 수도 있다. 즉, 순서를 보장하지 않는다.
  • Response에 대한 처리 결과를 보장받고 처리해야 되는 서비스에는 적합하지 않다.

동기와 비동기에 대한 간단한 정리였음..

동기와 비동기에 대해 정말 간단하게 개념과 장단점만 살펴보았다. 웹에서는 Ajax 등을 사용하여 비동기적인 통신을 구현할 수 있는데 현재 내가 공부중인 안드로이드에서는 코루틴을 사용한다. 코루틴에 대한 내용은 동기와 비동기의 포스팅에 넣기보다 안드로이드 태그로 따로 정리하는게 좋을꺼 같아서 포함하지는 않았다. 이 글에서는 간단히 동기와 비동기가 무엇인지와 둘의 차이 정도만 집고 넘어가면 좋을거 같다!!!!

📄 Reference

profile
관우로그

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

와! 코딩을 전혀 모르는 저희 동생도 알아 들을만큼 쉽고 명쾌한 설명! 감사합니다.

답글 달기