왜 비동기적 프로그래밍이 필요한가?

2023. 2. 3. 09:42개발자 블로깅/Question

자바스크립트를 공부하면 항상 나오는 비동기!

왜 비동기 프로그래밍을 해야 하는 것일까? 궁금해서 구글링을 통해 참고해 글을 써보았다.

 

이해하기 위해 알아야 하는 단어

비동기 프로그래밍: 작업이 완료될 때까지 기다리지 않고 잠재적으로 오래 실행되는 작업을 시작하여 해당 작업이 실행되는 동안에도 다른 이벤트에 응답할 수 있게 하는 기술이다. 작업이 완료되면 프로그램이 결과를 제공한다.

 

스레드 : 프로세스 내에서 실행되는 흐름의 단위
            CPU-하드웨어적 스레드, 하나의 코어가 동시에 처리하는 명령어 단위

            프로그램- 소프트웨어적 스레드, 하나의 프로그램에서 독립적으로 실행되는 단위
            

싱글스레드 : 하나의 프로세스가 한번에 하나의 일만 처리하는 것

블락킹 Blocking: 동기적으로 무거운 작업이 수행되어 이후의 작업들이 실행되지 않는 것

 

자바스크립트는 싱글 스레드 언어이다.

자바스크립트는 한번에 한 가지 작업밖에 수행하지 못한다. 그래서 코드를 구동하면 순차적으로 일어나게 된다.

 

쉬운 예로, 사람이 많은 카페에서 주문을 1명씩 차례대로  받는다고 생각해보자. 이렇게 한명씩 계산하고 커피를 받아가는 과정이 자바스크립트가 작업을 수행하는 방식이다. 이번에 단체손님이 각 다른 음료 10가지를 주문한다고 가정했을 때, 주문은 끊임없이 밀릴 수 밖에 없다. 

 

이 상황은 싱글 스레드 언어가 가지는 치명적인 단점이다. 

 

자바스크립트가 무거운 작업을 수행중일 때 그 뒤의 어떤 직업도 진행되지 않는다면? 빈 화면을 10초동안 보게 된다면? 이처럼 화면 로딩, 통신 연결 등의 비효율이 높아지고 사용성 또한 급격하게 떨어진다. 오늘날같이 많은 이미지와 데이터를 갖고 있는 웹페이지를 실행시킬때 이러한 단점이 더욱 부각된다. 

 

여기서! 해답은 "비동기 프로그래밍"이다.

위에 예시의 카페에 키오스크가 있다면? 음료 나오는 시간이 빨라지고 진동벨이 있다면? 버튼만 눌러놓고 또 다른 음료를 만들 수 있다. 직원이 한명 더 있다면? 배달까지 할 수 있어진다. 동시다발적으로 일어나는 일을 수행할 수 있다.

이처럼 내가 비동기적으로 프로그래밍을 한다면?  더 효율적으로 일을 수행할 수 있다! 

 

결론은 엄청난 용량의 정보를 가지고 있는 웹페이지를 보다 효율적이고 끊임없이 움직이게 하기 위해서는 "비동기적 프로그래밍이 필요하다"는 것이다. 

 

참고

https://developer.mozilla.org/ko/docs/Learn/JavaScript/Asynchronous/Introducing

https://velog.io/@hjkdw95/%EC%99%9C-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%A0%81-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%84-%ED%95%B4%EC%95%BC%ED%95%98%EB%8A%94%EA%B0%80