ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바스크립트 비동기 처리
    웹개발공부 2020. 5. 8. 16:26

    웹이란 환경은 무수히 많은 클라이언트와 서버들이 정보를 요청하고 응답을 하는 장소이다. 그러하다 보니 평소에 접하는 간단한 프로그래밍(개인 컴퓨터에서 어떤 통신도 없이 데이터를 계산하고 처리하는 프로그램)과는 많이 다르다. 지금까지 동기식으로 코딩을 해왔고 그것 밖에는 몰랐었다. 그래서 비동기 처리 문법을 공부하기에 앞서서 개념적 이해를 해야 할 것 같다.

     

    동기식 처리

    작업을 순차적으로 처리

     

    비동기식 처리

    비동기화된 작업이 끝날 때까지 기다리지 않고 다음 코드를 진행

     

    • 자바스크립트는 어떻게 동작 하나?

     

    자바스크립트는 기본적으로 싱글 스레드로 동작을 한다. 웹 환경에서는 동시적인 작업 처리가 필수인데 왜 싱글 스레드인가 약간 의아스럽긴 하였다. 단순하게 생각해서 5가지 일을 동시에 처리하려면 5명의 일꾼이 있어야 한다. 그런데 자바스크립트는 왜 일꾼을 한 명만 채택을 하는 것일까?

     

    작업 한 개마다 각각 스레드를 배치하면 그만큼 메모리를 많이 사용하게 되고 프로그램이 무거워진다. 그러니까 일꾼이 많으면 그만큼 식사량도 많아지게 되는 것과 같은 느낌으로 생각하면 된다. 자바스크립트는 어떻게 일꾼 한 명으로 동시에 여러 일을 처리하는 것일까?

    어서 일을 해라~ 일!!

    • 이벤트 루프

     

    자바스크립트 코드 자체는 동기식으로 처리된다고 볼 수 있는데 다만 '이벤트 루프'라는 것 덕분에 외부 I/O 처리를 비동기적으로 처리할 수 있게 되었다. 이벤트 루프를 이해하기 전에 node.js 아키텍처가 어떻게 구성되어 있는지를 먼저 살펴보자. (node.js는 자바스크립트 언어로 짜인 프로그램이 실행할 수 있도록 실행환경을 제공해주는 프로그램이다.)

    https://stackoverflow.com/questions/10680601/nodejs-event-loop

    스택오버플로우에 좋은 도식이 있어서 가져왔다. 크롬 V8은 자바스크립트 엔진이라고 하는데 일단 이 것까지 알려면 한도 끝도 없으니 지금은 넘어가야겠다. 그리고 LIBUV는 비동기 처리를 위한 라이브러리(코드 모음집)이다. 간단한 수준으로만 알고 넘어가자.

     

    이 이벤트 루프가 한 개의 스레드로 프로그램이 돌아가는 중에 반복되며, 비동기 작업이 발생(이벤트 발생)하면 다른 워커 스레드에 넘기는 작업을 하는 것이다. 자바스크립트는 직접 고용한 일꾼은 1명이지만 이 일꾼이 필요한 작업을 외주를 줌으로 동시성을 유지하는 것이다.

     

    프로세스 입장에서 I/O 처리는 느리고 골칫덩이인데 이런 파트를 벡엔드에 넘겨버리고 쉬운 것만 자바스크립트가 처리하여 프로그램을 가볍게 돌아가도록 하는 것 같다.

    '웹개발공부' 카테고리의 다른 글

    자바스크립트 함수  (0) 2020.05.09
    자바스크립트 변수 타입  (0) 2020.05.09
    자바스크립트 정적 메서드  (0) 2020.05.07
    자바스크립트 공부  (0) 2020.05.06
    웹 부스트코스 프로젝트  (0) 2020.05.05

    댓글

Designed by Tistory.