최근에 리액트를 배우면서 비동기라는 단어를 접하게 되었는데 한번 정리해 보고자 한다.
나의 경우에는 프로그래밍 언어 중에 파이썬을 가장 먼저 배웠는데, 알고보니 파이썬은 동기적 코드 실행의 대표주자 였다. 파이썬의 경우 코드는 위에서 아래로 가면서 결과값이 나와야 다음 코드를 실행하는 방식이다. 처음에는 이것을 왜 동기(synchronous)라고 하지 생각했었는데, 호출과 결과가 동기적인 것으로 해석하니 이해가 갔다. 반면 node.js의 경우 오픈 소스 JavaScript 엔진인 크롬 V8에 비동기 이벤트 처리 라이브러리인 libuv를 결합한 플랫폼으로서 비동기 방식의 코드 진행을 한다.
동기
- 장점: 설계가 간단하고 직관적이다.
- 단점: 결과가 주어질 때까지 대기해야 한다.
비동기
- 장점: 결과 계산에 시간이 오래 걸리는 코드가 있더라도 그 시간 동안 다른 작업을 할 수 있으므로 효율적이다.
- 단점: 설계가 비교적 복잡하다.
비동기 방식을 코드 진행이 효율적이지만 어떤 코드가 호출되고 끝났는지 알기 힘들어 코드 설계에 있어 보다 노력을 요한다.
이런 비동기 방식에서 동기와 같이 단계적인 코드실행이 필요한 경우 연쇄적으로 .then을 사용하거나 async-await 방식을 통해 함수 내부의 코드들을 동기적으로 진행시킬 수 있다.