그알것 — 그럼에도 알아야 할 것들
홈질문커뮤니티
로그인
그알것 — 그럼에도 알아야 할 것들

Service

  • 홈
  • 소개
  • 질문
  • 커뮤니티

My

  • 내 워크스페이스
  • 저장한 질문
  • 작성한 답변

Policy

  • 이용약관
  • 개인정보처리방침
  • 문의

© 2026 그알것 · What Still Matters

질문 목록JavaScript
JavaScript

자바스크립트는 싱글 스레드 언어인데, 어떻게 동시에 여러 작업들을 수행하나요?

실무4/5
설계3/5
인간3/5
기초4/5

면접관의 질문 의도

"이벤트 루프"라는 단어를 들어본 사람인지, _마이크로태스크와 매크로태스크 우선순위_까지 잡고 UI 프리징/콜백 순서를 설명하는 사람인지를 가른다.

큐레이션 답변

학습 자료

자바스크립트 실행 자체는 단일 콜 스택에서 일어나지만, 타이머·I/O 같은 작업은 런타임(브라우저 Web API, Node의 libuv)이 비동기로 처리하고 완료 콜백을 _큐_에 넣는다. 이벤트 루프는 스택이 비면 큐에서 작업을 꺼내 실행하며, Promise/queueMicrotask 같은 _마이크로태스크_가 setTimeout 같은 _매크로태스크_보다 먼저 비워진다. 그래서 "싱글 스레드인데 동시성처럼 보이는" 동작이 가능하다. CPU 집약 작업은 여전히 메인 스레드를 막으므로 Web Worker/Worker Threads로 분리해야 한다.

좋은 답변 구조

  1. 01콜 스택·Web API/libuv·태스크 큐·이벤트 루프 구성 요소를 정의한다
  2. 02동기 코드 실행 → 비동기 작업 위임 → 큐로 복귀 → 스택 빈 시점 실행의 단계 흐름을 설명한다
  3. 03마이크로태스크가 매크로태스크보다 먼저 비워지는 _분기 동작_과 그로 인한 순서 차이를 짚는다
  4. 04긴 동기 작업·Worker 분리·setTimeout 0의 의미 같은 디버깅 포인트로 마무리한다

자주 실수하는 포인트

콜 스택과 태스크 큐의 차이를 빠뜨리고 "비동기는 그냥 동시"라고 설명한다
마이크로태스크/매크로태스크 우선순위를 모른 채 setTimeout 0이 즉시 실행된다고 본다
긴 동기 작업이 이벤트 루프 자체를 막는다는 사실을 놓친다
Node의 libuv와 브라우저의 Web API를 같은 메커니즘으로 묶는다

실무 맥락

  • API 호출 결과 처리 순서가 의도와 어긋나 race condition이 생기는 디버깅
  • 큰 JSON 파싱·정렬로 메인 스레드가 멈춰 입력이 끊기는 화면
  • setTimeout 0과 Promise.resolve().then의 실행 순서가 헷갈리는 코드 리뷰

본인 경험에 녹이는 힌트

Promise 체인의 micro task와 setTimeout 매크로 task 순서를 직접 그려본 적이 있다면 우선순위 이야기를 그대로 답변 후크로 쓸 수 있다

긴 동기 작업을 Web Worker로 분리해 UI 프리징을 잡은 경험이 있다면 메인 스레드 부담 설명으로 연결할 수 있다

AbortController로 늦게 온 응답을 무시해 race condition을 해결한 경험이 있다면 깊이 있는 답이 된다

커뮤니티 인기 답변

전체 0개

아직 공개된 답변이 없어요. 첫 공개 답변을 남겨보세요.

관련 꼬리 질문

Q1마이크로태스크가 매크로태스크보다 먼저 실행되는 이유는 무엇인가요
Q2Node.js의 libuv 역할은 브라우저 Web API와 어떻게 다른가요
Q3긴 동기 작업이 이벤트 루프에 주는 영향은 무엇인가요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문