HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🐣
프론트엔드 데브코스 3기 교육생
/
📚
3기 스터디 가이드
/
📒
CS 학습 스터디
/
🎱
이벤트 루프
🎱

이벤트 루프

이벤트 루프(Event Loop)란?

  1. JavaScript: 싱글스레드 언어다. 왜? 만들기가 쉬웠다 한다.
  1. JavaScript의 런타임 모델은 코드의 실행, 이벤트의 수집과 처리, 큐에 대기 중인 하위 작업을 처리하는 이벤트 루프에 기반하고 있으며, C 또는 Java 등 다른 언어가 가진 모델과는 상당히 다릅니다. -MDN- JavaScript 런타임은 JavaScript 코드가 실행되는 환경입니다. 여기에는 JavaScript 엔진, 메모리 힙 및 호출 스택이 포함됩니다.
  1. 자바스크립트 엔진의 동작.
notion image
notion image
function foo(b) { let a = 10 return a + b + 11 } function bar(x) { let y = 3 return foo(x * y) } const baz = bar(7) // 42를 baz에 할당
  1. bar를 호출할 때, bar의 인수와 지역 변수를 포함하는 첫 번째 프레임이 생성됩니다.
  1. bar가 foo를 호출할 때, foo의 인수와 지역 변수를 포함하는 두 번째 프레임이 생성되어 첫 번째 프레임의 위로 푸시됩니다.
  1. foo가 반환하면, 맨 위의 프레임 요소를 스택 밖으로 꺼냅니다. (bar 호출 프레임만 남음)
  1. bar가 반환하면, 스택이 빕니다. 인수와 지역 변수는 스택 바깥에 저장되므로 바깥 함수가 반환한 후에도 계속 존재할 수 있습니다. 중첩 함수에서 지역 변수에 접근할 수 있는 이유가 이것입니다.
4. 힙?
힙은 단순히 메모리의 큰 (그리고 대부분 구조화되지 않은) 영역을 지칭하는 용어입니다.
notion image
notion image
FYI) 여기서 궁금한게 생긴다. Javascript의 배열은 크기를 미리 선언하지 않아도 되는데, 얼마나 커질 줄 알고 heap에 미리 메모리를 잡는걸까?
Javascript배열은 일반적인 밀집 배열이 아니라 희소 배열이다. 메모리 주소가 이어지는 밀집 배열이 아니고 해시 테이블로 구현된 객체의 형태이다. 그래서 탐색은 느릴 수 있어도 삽입, 삭제의 기능은 빠르다.
 
  1. Javascript가 동기적으로 동작한다면?
    1. 작업이 끝날동안 CallStack에 block이 일어나서 아무것도 못하게 될거임.
       
      그래서 비동기로 동작한다. 이때 web API들을 사용해서 효과적으로 동작을 처리할 수 있다.
      notion image
      V8(자바스크립트엔진)소스코드에는 setTimeout, DOM, HTTP 요청 관리 같은 코드들은 없다. 얘들은 다 webAPI 라서 V8엔진 외부에서 다른 언어로 브라우저에서 실행된다.
       
      개발할 때 setTimeout 함수 썻었는데..?
      notion image
      setTimeout의 경우 브라우저 자체의 일부는 아니지만 브라우저가 제공하는 WebAPIs의 일부로, Javascript를 사용하여 구현할 수 있다.
       
      eventloop는 어디에 존재할까?
      notion image
      event 루프는 V8엔진의 일부이다.
       
      그렇다면 callback Queue는?
      notion image
      요약하면 작업 대기열은 V8 JavaScript 엔진의 필수 부분이며 비차단 방식으로 JavaScript 코드 실행을 관리하는 데 사용됩니다.
  1. 그래서 eventloop는 어떻게 동작함?
    1. 코드를 읽는다
      notion image
      callStack에 push 된다.
      WebAPIs 요청이면 요청을 수행한다. (이때 callstack에서 pop된다)
      notion image
      WebAPIs 작업이 끝나면 Callbackqueue에 쌓인다.
      notion image
      callstack이 비어있다면 eventloop에 의해서 callbackqueue에 push 된다.
      notion image
       
  1. 다음 결과를 생각해보자. setTimeout인데 0ms?
console.log('Hi'); setTimeout(function cb() { console.log('there'); }, 0); console.log('JSConfEn');
순서를 제어할 순 있겠군?
 
0ms의 대기시간을 갖는 setTimeout가 10억개라면?
console.log('Hi'); while(10억 -- ) { setTimeout(function cb() { console.log('there'); }, 0); } console.log('JSConfEn');
setTimeout은 최소 딜레이만 보장할 수 있다.
 
매우 많은 양의 이벤트가 발생한다면?
브라우저는 매 16.6ms 마다, 즉 1초에 60프레임을 repaint하는게 젤 이상적이라고 한다. 그런데 stack에 무언가 있으면 이 동작에 영향을 받는다. render queue 역시 stack이 비어있어야 task를 stack에 넣어 줄 수 있기 때문이다.
 
  1. callstack을 잘 관리하는 것이 중요하다.
 
 
 
What the heck is the event loop anyway? | Philip Roberts | JSConf EU
What the heck is the event loop anyway? | Philip Roberts | JSConf EU
https://www.youtube.com/watch?v=8aGhZQkoFbQ
What the heck is the event loop anyway? | Philip Roberts | JSConf EU
[javascript] 콜스택/메모리힙 구조, 데이터 저장/참조 원리
콜 스택, 메모리 힙이란? 자바스크립트 엔진은 Memory Heap 과 Call Stack 으로 구성되어 있습니다. 가장 유명한 것이 구글의 V8 Engine입니다. 자바스크립트는 단일 스레드 (sigle thread) 프로그래밍 언어인데, 이 의미는 Call Stack이 하나 라는 이야기입니다. 즉 멀티가 되지 않고, 하나씩 하나씩 처리한다는 의미입니다. 콜 스택(Call Stack) 원시 타입(숫자 등) 데이터가 저장된다.
[javascript] 콜스택/메모리힙 구조, 데이터 저장/참조 원리
https://charming-kyu.tistory.com/19
[javascript] 콜스택/메모리힙 구조, 데이터 저장/참조 원리
Asynchronous Javascript (Event Loop)
Javascript is a single-threaded language at runtime which means only one thing can happen at a time. That is, the JavaScript engine can only process one statement at a time in a single thread. It also means you can't perform long operations such as network access without blocking the main thread.That's where asynchronous JavaScript comes into play.
Asynchronous Javascript (Event Loop)
https://medium.com/gradeup/asynchronous-javascript-event-loop-1c8de41298dd
Asynchronous Javascript (Event Loop)
[Javascript] 자바스크립트는 어떻게 동작할까?
What the heck is the event loop anyway? 영상을 보고 정리한 글이다. 강연자가 JS를 정의할 때 다음과 같이 설명한다. " 자바스크립트는 싱글 쓰레드 기반이며 논 블로킹 방식의 비동기적인 동시성 언어이며 콜 스택, 이벤트 루프와 콜백 큐 그리고 여러가지 다른 API들을 가지고 있다. " 참 특징이 많은 언어인데 이렇게 보면 도대체 어떤 언어인지 알 수가 없다.
[Javascript] 자바스크립트는 어떻게 동작할까?
https://baeharam.github.io/posts/javascript/jshow-javascript-works/
[Javascript] 자바스크립트는 어떻게 동작할까?