Page 18 -
P. 18

●     백그라운드: setTimeout 같은 타이머나 이벤트 리스너들이 대기하는 곳입니다. 자바스크립
                    트가 아닌 다른 언어로 작성된 프로그램이라고 봐도 됩니다. 여러 작업이 동시에 실행될 수
                    있습니다.

                 ●     태스크 큐: 이벤트 발생 후, 백그라운드에서는 태스크 큐로 타이머나 이벤트 리스너의 콜백
                    함수를 보냅니다. 정해진 순서대로 콜백들이 줄을 서 있으므로 콜백 큐라고도 부릅니다. 콜
                    백들은 보통 완료된 순서대로 줄을 서 있지만 특정한 경우에는 순서가 바뀌기도 합니다.

               그림 1-6은 코드가 실행되는 내부 과정을 묘사한 그림입니다.


                  그림 1-6 이벤트 루프 1
                                     2. setTimeout
                           호출 스택                     백그라운드
                                        실행 시 콜백 run은
                                        백그라운드로 보냄
                                                    타이머 run 3초
                          setTimeout()
               1. 호출 스택에
                  쌓임       anonymous


                      이벤트                3. 백그라운드에서 3초 후 태스크 큐로 보냄
                       루프
                                 run                  태스크 큐



               먼저 전역 컨텍스트인 anonymous가 호출 스택에 들어갑니다. 그 뒤 setTimeout이 호출 스택에 들
               어갑니다.

               호출 스택에 들어간 순서와 반대로 실행되므로, setTimeout이 먼저 실행됩니다. setTimeout이 실
               행되면 타이머와 함께 run 콜백을 백그라운드로 보내고, setTimeout은 호출 스택에서 빠집니다.
               그다음으로 anonymous가 호출 스택에서 빠집니다. 백그라운드에서는 3초를 센 후 run 함수를 태
               스크 큐로 보냅니다. 3초를 세었다는 것은 백그라운드에 맡겨진 작업이 완료된 것으로 이해해도

               됩니다.

               그림에서는 태스크 큐가 하나의 큐처럼 보이지만 실제로는 여러 개의 큐로 이루어져 있습니다. 이
               벤트 루프는 정해진 규칙에 따라 콜백 함수들을 호출 스택으로 부릅니다. 더 자세히 공부하고 싶
               다면 1.5절의 이벤트 루프 설명을 참조하세요.

               그림 1-7은 호출 스택에서 anonymous까지 실행이 완료되어 호출 스택이 비어 있는 상황을 보여줍
               니다. 이벤트 루프는 호출 스택이 비어 있으면 태스크 큐에서 함수를 하나씩 가져와 호출 스택에
               넣고 실행합니다.


         30





     node_06.indd   30                                                                      2020-07-14   오전 11:01:52
   13   14   15   16   17   18   19   20   21   22   23