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

Service

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

My

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

Policy

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

© 2026 그알것 · What Still Matters

질문 목록JavaScript
JavaScript

주어진 Promise/Timeout 코드의 실행 순서는 왜 그렇게 되나요?

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

면접관의 질문 의도

정답 출력 순서를 외웠는지가 아니라, 큐 종류와 등록 시점을 근거로 들고 결과를 논리적으로 풀어내는지 가르려는 질문이다.

큐레이션 답변

학습 자료

먼저 동기 코드가 끝까지 흐르며 console.log('9')가 찍히고, 그 사이에 만난 Promise.then 콜백은 마이크로태스크 큐로 들어간다. 현재 콜 스택이 비면 마이크로태스크 큐를 다 비울 때까지 실행해 5, 8, 7이 차례로 나온다. 그다음 매크로태스크 큐의 첫 setTimeout 콜백이 돌면서 1, 4를 출력하고, 그 안에서 등록된 Promise 마이크로태스크가 곧바로 따라붙어 3이 나온다. 이후 앞서 큐에 있던 다른 setTimeout이 실행되어 6, 마지막으로 그 안에서 다시 등록된 setTimeout이 실행되어 2가 나온다.

좋은 답변 구조

  1. 01동기 코드가 끝까지 흐르는 구간을 먼저 정리한다
  2. 02마이크로태스크 큐가 한 턴 안에서 어떻게 비워지는지 설명한다
  3. 03각 setTimeout 콜백이 들어간 매크로태스크 큐 순서를 짚는다
  4. 04콜백 내부에서 새로 등록된 태스크의 자리까지 포함해 최종 순서를 근거와 함께 제시한다

자주 실수하는 포인트

setTimeout이 Promise보다 먼저 실행될 수 있다고 본다
콜백 안에서 새로 등록된 마이크로·매크로 태스크가 어디에 들어가는지 헷갈린다
큐 종류를 구분하지 않고 출력 결과만 외워 비슷한 변형 문제에서 무너진다

실무 맥락

  • 비동기 상태 업데이트가 화면에 반영되는 순서를 의심해야 하는 UI 디버깅
  • Promise 체인과 setTimeout이 섞인 비즈니스 로직을 손봐야 하는 코드
  • fake timer와 microtask flush를 함께 다뤄야 하는 비동기 테스트 환경

본인 경험에 녹이는 힌트

비동기 코드가 의도와 다른 순서로 찍혀 버그가 났던 경험이 있다면 마이크로·매크로 큐로 사후 추적한 과정과 연결할 수 있다

테스트에서 fake timer와 microtask flush를 같이 사용해 본 적이 있다면 큐 우선순위 이해를 검증 도구로 엮을 수 있다

비동기 흐름이 복잡해진 코드를 단순화한 리팩터링 경험이 있다면 실행 순서 예측이 쉬워지는 방향으로 설명할 수 있다

커뮤니티 인기 답변

전체 0개

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

관련 꼬리 질문

Q1queueMicrotask와 Promise.then의 차이는 무엇인가요
Q2setImmediate나 MessageChannel은 어디에 위치하나요
Q3렌더링 타이밍은 이벤트 루프와 어떻게 상호작용하나요
아직 답을 쓰지 않았어요.
큐레이션 답변과 다른 사람 답변을 보고, 자기 언어로 답을 정리해보면 학습 효과가 가장 큽니다.
목차
  • 01면접관의 질문 의도
  • 02큐레이션 답변
  • 03좋은 답변 구조
  • 04자주 실수하는 포인트
  • 05실무 맥락
  • 06본인 경험에 녹이는 힌트
  • 07커뮤니티 인기 답변준비중
  • 08관련 꼬리 질문