javascript 이벤트 루프이벤트 루프란이벤트루프 면접이벤트 루프 태스크 큐이벤트 루프 비동기

JavaScript 비동기 처리 완전 정복: 이벤트 루프와 콜 스택 이해하기

KUKJIN LEE
KUKJIN LEE
2024년 6월 27일
154

 

JavaScript 개발자라면 꼭 알아야 할 개념 중 하나가 바로 이벤트 루프와 콜 스택입니다. 이 두 가지를 이해하면 JavaScript의 비동기 동작과 성능 최적화에 큰 도움이 됩니다.

 

이벤트 루프와 콜 스택: 핵심 개념

  1. 콜 스택(Call Stack)

콜 스택은 함수 호출을 관리하는 LIFO(Last In, First Out) 구조입니다. 함수가 호출되면 스택에 쌓이고, 실행이 완료되면 스택에서 제거됩니다.

 

  1. 이벤트 루프(Event Loop)

이벤트 루프는 콜 스택태스크 큐(Task Queue)를 모니터링하여 비동기 작업을 처리합니다. 콜 스택이 비어 있으면, 이벤트 루프는 태스크 큐에서 작업을 꺼내어 콜 스택에 넣습니다.

 

비동기 동작의 이해

JavaScript는 단일 스레드 언어로, 동시에 하나의 작업만 처리할 수 있습니다. 그러나 비동기 처리를 통해 동시에 여러 작업이 실행되는 것처럼 보이게 합니다. 이는 주로 이벤트 루프와 콜 스택 덕분입니다.

 

console.log('Start');

setTimeout(() => {
  console.log('Timeout');
}, 1000);

console.log('End');

// Start
// End
// Timeout

 

이 코드의 실행 순서를 살펴보겠습니다.

(콜 스택이 비어 있을 때 이벤트 루프가 태스크 큐에서 작업을 가져와 실행한다)

  1. console.log('Start')콜 스택에 추가되고 실행됩니다. 결과적으로 "Start"가 출력됩니다.

  2. setTimeout 함수가 호출되며, 1초 후 실행될 콜백 함수가 태스크 큐에 추가됩니다.

  3. console.log('End')콜 스택에 추가되고 실행됩니다. 결과적으로 "End"가 출력됩니다.

  4. 콜 스택이 비어 있으면, 1초 후에 태스크 큐에서 콜백 함수가 콜 스택으로 이동하여 실행됩니다. 결과적으로 "Timeout"이 출력됩니다.

관련 글

TypeScript any 린트 에러(no-explicit-any) 근본적으로 해결하기

TypeScript 프로젝트에서 @typescript-eslint/no-explicit-any 린트 에러는 단순 규칙 비활성화로 해결할 문제가 아닙니다. 눈 앞 문제는 해결할 수 있지만, TypeScript를 사용하는 가장 중요한 이유를 위배하게 됩니다. any 타입은...

2025년 7월 23일269

JSP 주석, 아직도 `` 쓰시나요? 올바른 사용법

코드를 작성하다 보면 주석을 남기는 경우가 많습니다. 하지만 JSP 환경에서 어떤 주석을 사용하냐에 따라 보안 수준과 성능 이 크게 달라집니다. 표준 주석: 서버 사이드 주석 <%-- --%> JSP 페이지 내 개발 관련 주석은 <%-- --%> 를 사용하는게 좋습니다...

2025년 7월 9일144

쉽게 만드는 React Tab 라이브러리 react-tabs

개발자가 커스텀 스타일을 쉽게 적용할 수 있도록 최소한의 스타일만 제공하여 유연한 스타일링 이 가능한 라이브러리입니다. 상태 관리가 내장되어 있어 탭 선택 및 패널 표시 로직을 직접 구현할 필요 없이 간편하게 사용할 수 있습니다. 기본 사용법 먼저, 라이브러리를 설치합...

2025년 6월 17일173

Next.js 환경 변수 NEXT_PUBLIC 접두사 역할

NEXT_PUBLIC 접두사를 붙이면 변수의 접근 범위가 완전히 달라집니다. 이 차이점을 이해하는 것이 안전하고 효율적인 Next.js 애플리케이션을 구축하는 데 중요합니다. NEXT_PUBLIC 접두사가 없는 환경 변수 (서버 전용) NEXT_PUBLIC 접두사 없이...

2025년 6월 13일156