1. 동기 (Synchoronous:동시에 일어나는)

- 동기는 말 그대로 동시에 일어난다는 뜻이다

- 요청과 그 결과가 동시에 일어난다

- 바로 요청을 하면 시간이 얼마가 걸리든 요청한 자리에서 결과가 주어져야 한다

- 순서에 맞춰 진행되는 장점이 있지만, 여러가지 요청을 동시에 처리할 수 없다

- 설계가 매우 간단하고 직관적이다

- 결과가 주어질 때 까지 아무거도 못하고 대기해야 한다

-  A 노드 B노드 사이의 작업 처리 단위 (transaction)을 동시에 맞추겠다

 

2. 비동기 (Asynchronous: 동시에 일어나지 않는)

- 비동기는 동시에 일어나지 않는다를 의미한다

- 요청과 결과가 동시에 일어나지 않을 거라는 약속이다

- 하나의 요청에 따른 응답을 즉시 처리하지 않아도 , 그 대기 시간 동안 또 다른 요청에 대해 처리 가능한 방식이다

- 여러 개의 요청을 동시에 처리할 수 있지만, 동기 방식보다 속도가 떨어질 수 있다

- 동기보다 복잡하지만 결과가 주어지는데 시간이 걸리더라도 그 시간동안 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다

- 학생이 시험지를 선생에게 건넨 후 가만히 앉아 끝나 시험지를 돌려받기만을 기다린다면 학생은 블록상태이다

- 하지만 학생이 시험지를 건넨 후 선생에게 채점이 완료되었다는 전송을 받기 전까지 다른 과목을 공부한다거나 게임을 한다거나 다른 일을 하게 되면 학생의 상태는 논 블록 상태이다

- A노드와 B노드 사이 작업 처리 단위를 동시에 맞추지 않아도 된다

 

동기는 추구하는 같은 행위(목적)가 동시에 이루어지며
비동기는 추구하는 행위(목적)가 다를 수 도 있고 동시에 이루어지지 않는다

 

비동기적 처리의 이유

- 제이쿼리의 ajax 통신과 같은 원하는 데이터를 서버로부터 받아오는 방식을 취하는 어플리케이션을 만들었다고 가정해본다. 서버로부터 데이터를 받아와서 해당 데이터를 처리해야 하므로, 데이터를 받아오는 코드는 전체 코드 중의 최상단에 위치해야 한다. 그런데 만약 비동기적 처리를 하지 않고 동기적 처리를 하는 어플리케이션이라면?

- 서버로부터 데이터를 받아오는 코드의 실행이 완전히 끝난 뒤 이후 코드를 처리할텐데 받아오는 데이터의 크기나 갯수가 적다면 상관없지만 데이터의 크기가 크고 많다면 문제를 초래한다.

- 모든 데이터의 수신을 완료한 다음 나머지 코드를 실행할 수 있으므로, 데이터를 받아오는 동안에 프로그램은 사실 멈춰있는 것과 다름없다. 언제 끝날지도 모르는 요청 때문에 나머지 코드를 실행시키지 못하고 사용자를 기다리게 하는 아주 불친절한 프로그램이 된다.

- 이러한 사용자의 불편을 없애기 위해 데이터의 수신과 기다려야 하는 코드를 비동기적으로 처리한다

- AJAX를 사용하는 이유도 단순히 WEB 화면에서 무언가를 부르거나 데이터를 조회하고 싶을 경우 페이지 전체를 새로고침 하지 않기 위해 사용한다고 볼 수 있다. 

- AJAX의 경우 html 페이지 전체가 아닌 일부분만 갱신할 수 있도록 XMLHttpRequest 객체를 통해 서버에 request한다. 이 경우 JSON이나 XML 형태로 필요한 데이터만 받아 갱신하기 때문에 그만큼의 자원과 시간을 아낄 수 있다

'FE' 카테고리의 다른 글

HTTP  (0) 2023.02.26

+ Recent posts