728x90
반응형

1. 이벤트 루프 (Event Loop)에 대해 설명해보세요.

더보기

이벤트루프는 자바스크립트의 비동기 작업을 가능하게 해줍니다
자바스크립트의 비동기 작업이 일어날경우 (I/O, setTimeOut) 콜스택에서 실행되면,

라이브러리를 통하여 테크스큐에 쌓이게된다.
이벤트루프는 지속적으로 자바스크립트의 콜스택을 바라보며 비어질때까지 기다린다.
이후 자바스크립트의 콜스택이 비게되면, 테스크큐의 작업을 하나씩 콜스택에 밀어넣어주게된다.
이로서 자바스크립트가 싱글스레드임에도 비동기처리가 가능한 이유입니다.

이벤트 루프는 작업이 들어오길 기다렸다가 작업이 들어오면 이를 처리하고,

처리할 작업이 없는 경우엔 잠드는, 끊임없이 돌아가는 자바스크립트 내 루프입니다.

 

총 6개의 페이즈로 구성되어 있으며 한 페이즈에서 다음 페이즈로 넘어가는 것을 틱이라고 합니다.

각 페이즈는 자신만의 큐를 관리합니다.

 

이벤트 루프의 6개의 페이즈는 다음과 같습니다:
timers: setTimeout(), setInterval()에 의해 스케줄된 콜백들이 수행됩니다.
pending callbacks: 다음 loop로 미뤄진 I/O 콜백이 수행됩니다.
idle, prepare: 내부적으로 사용됩니다.
poll: 새로운 I/O 이벤트를 가져와서 I/O와 관련된 콜백을 수행합니다.
check: setImmediate()에 의해 스케줄된 콜백들이 수행됩니다.
close callbacks: socket.on('close', ...)와 같이 close와 관련된 콜백이 수행됩니다.


각각의 phase는 FIFO queue를 갖고있는데, 현재 loop에 실행되어야 할 callback들이 callback의 종류에 

따라 각 phase에 맞는 곳에 들어가게 됩니다. 각 phase 별로 queue에 callback들을 모두 소진하거나 

callback size가 최대를 초과하게 되면, 다음 차례의 phase의 queue에 있는 callback이 실행됩니다 .

 

개발자 90%가 모르는 자바스크립트 동작원리 (Stack, Queue, event loop) - 코딩애플

힙 : 객체는 힙에 할당됩니다. 힙은 단순히 메모리의 큰 (그리고 대부분 구조화되지 않은) 영역을 지칭하는 용어입니다.

스택 : 코드를 실행해주는 곳으로 특징은 한개 뿐이다. 한번에 코드 1줄만 실행하는 싱글스레드.

큐 : JavaScript 런타임은 메시지 큐, 즉 처리할 메시지의 대기열을 사용합니다.

      각각의 메시지에는 메시지를 처리하기 위한 함수가 연결돼있습니다.

 

피터의 이벤트루프 - 우아한테크톡

 

 

참고사이트 : https://ko.javascript.info/event-loop

https://developer.mozilla.org/ko/docs/Web/JavaScript/Event_loop

 

2. 콜백 함수 (Callback Function)가 무엇인지, 어떻게 사용되는지 설명해보세요.

콜백 함수는 다른 코드의 인수로서 전달되어 나중에 호출되는 함수입니다. 콜백 함수는 비동기 작업을 처리할 때 주로 사용됩니다. 예를 들어, 파일을 읽거나 웹 API에서 데이터를 가져오는 작업은 시간이 걸리기 때문에 비동기적으로 처리됩니다. 이러한 작업이 완료되면 콜백 함수가 호출되어 결과를 처리합니다.

 

const fs = require('fs');

fs.readFile('example.txt', 'utf8', function (err, data) {
  if (err) throw err;
  console.log(data);
});

3번째 인수로 전달된 함수가 콜백함수입니다. 파일을 읽는 작업이 완료되면 콜백함수를 호출하고,

err, data 두개 인수를 전달합니다. 에러 발생시엔 에러 객체가 전달되고, data 인수에는 파일 내용이 전달됩니다.

 

기본적인 콜백함수

정의 : 함수에 파라미터로 들어가는 함수(다른 함수의 인자로 넘겨지는 함수)

용도 : 순차적으로 실행하고 싶을 때 씀

피터의 이벤트루프 - 우아한테크톡

 

콜백함수를 중첩해서 사용하다보면 콜백지옥에 빠질 수 있습니다.

콜백 지옥이란 콜백 함수가 중첩되어 코드의 가독성이 떨어지고, 에러 처리가 어려워지는 현상을 말합니다. 

콜백 지옥은 비동기 작업을 순차적으로 처리해야 할 때 발생하는 경우가 많습니다.

콜백함수가 뭔지 한국어로 쉽게 설명하는 영상 - 코딩애플

 

콜백 지옥의 대안으로는 프로미스(Promise)와 async/await가 있습니다. 

프로미스는 비동기 작업의 최종 완료 또는 실패를 나타내는 객체입니다. 

프로미스를 사용하면 콜백 함수를 사용하는 것보다 가독성이 높고, 에러 처리가 쉬워집니다. 

async/await는 프로미스를 사용하는 비동기 코드를 동기적인 방식으로 작성할 수 있게 해주는 문법입니다.

728x90
반응형

+ Recent posts