AI 보이는 추론 실험실 · 실행 순서

AI가 ‘0밀리초 뒤’를 ‘즉시 실행’으로 읽어도 되나요?

지금 실행하는 코드와 타이머에 맡긴 작업을 구분하고, 기록이 화면에 나타나는 순서를 직접 확인합니다.

탐구게시 2026-10-23읽기·실험 약 12분확인 문제 2개규칙 기반 실행한국논리학협회 자체 제작제작·검수 LTCT 편집부

밝은 프로그래밍 학습실에서 두 사람이 색상 작업 카드를 배열하고 작은 갈색 안경 올리가 몸을 앞으로 기울여 날개로 카드를 미는 모습
주제 이해를 돕는 AI 생성 연출 사진 · 주제 이해를 돕기 위한 AI 생성 이미지 · LTCT 자체 제작
오늘의 질문

‘시작’을 기록하고 0밀리초 타이머에 ‘예약’을 맡긴 뒤 곧바로 ‘끝’을 기록하면, 어떤 말이 먼저 나타나나요?

현재 코드가 시작과 끝을 기록한 뒤 선택한 마이크로태스크와 타이머를 처리하는 순서
현재 코드가 시작과 끝을 기록한 뒤 선택한 마이크로태스크와 타이머를 처리하는 순서 · 한국논리학협회 자체 제작
그림 크게 보기 ↗
01

0밀리초 타이머를 걸면 코드가 바로 멈추나요?

자바스크립트에서 setTimeout은 지정한 시간이 지난 뒤 실행할 함수를 등록합니다. 여기서 함수는 나중에 수행할 일을 묶어 둔 코드입니다. setTimeout에 함수를 맡겼다고 해서 지금 실행하던 코드가 중간에 멈추고 그 함수부터 실행되는 것은 아닙니다. 대기 시간을 0밀리초로 지정해도 이 점은 같습니다.

세 줄을 차례로 읽어 보세요. 먼저 ‘시작’을 기록합니다. 다음 줄은 ‘예약’을 기록할 함수를 setTimeout에 등록합니다. 마지막 줄은 ‘끝’을 기록합니다. 지금 실행하는 세 줄이 끝나면 타이머에 맡긴 일을 실행할 수 있으므로, 이 예의 기록 순서는 ‘시작 → 끝 → 예약’입니다. 등록한 위치와 실제로 실행되는 순서를 구분해야 합니다.

참고 · WHATWG — WHATWG HTML Living Standard §8.7 Timers ↗

02

‘뒤에 할 일’ 가운데 먼저 처리되는 것도 있나요?

현재 코드가 끝난 뒤에는 짧은 후속 작업을 처리하는 마이크로태스크 확인 단계가 있습니다. queueMicrotask는 이 단계에서 실행할 함수를 등록하는 방법입니다. 이 활동에서는 타이머와 비교할 후속 작업 한 개만 등록하겠습니다. 타이머를 먼저 등록했더라도 같은 코드 실행 중 등록한 마이크로태스크는 그 타이머 함수보다 먼저 처리됩니다.

‘짧은 후속 작업 추가’를 선택하면 타이머를 등록한 다음 queueMicrotask에 ‘후속’을 기록하도록 맡깁니다. 마지막 줄은 여전히 ‘끝’을 기록합니다. 이때 순서는 ‘시작 → 끝 → 후속 → 예약’입니다. 모든 프로그램이 이 네 단계로만 움직인다는 뜻은 아닙니다. 지금 화면에 적힌 짧은 코드의 두 대기 방식만 비교한 결과입니다.

참고 · WHATWG — WHATWG HTML Living Standard §8.8 Microtask queuing ↗

03

대기 시간을 바꾸면 기록 순서도 달라지나요?

타이머의 대기 시간을 0·50·200밀리초로 바꾸어 실행해 보세요. 마지막의 ‘예약’ 기록이 나타나기까지 기다리는 시간은 달라지지만, 이 예에서 ‘끝’보다 먼저 나타나지는 않습니다. 실행 버튼을 누를 때마다 기록을 비우고 새 묶음을 시작하므로 이전 실행 결과와 섞이지 않습니다.

표시한 대기 시간은 정확한 실행 시각을 보장하지 않습니다. 브라우저가 다른 일을 처리하거나 탭이 뒤로 가 있으면 더 늦게 실행될 수 있습니다. 이 활동은 밀리초 단위의 성능 측정을 하지 않고 기록의 선후관계를 확인합니다. 외부 AI 호출이나 서버 작업은 실행하지 않습니다.

참고 · MDN Web Docs — MDN Window.setTimeout ↗

04

AI가 예측한 순서를 어떻게 확인하나요?

AI에게 ‘0밀리초이니 즉시 실행된다’는 설명을 받았다면, 함수가 바로 호출되는지 나중에 실행하도록 등록되는지 코드를 살펴보세요. 오늘의 세 줄은 ‘0밀리초 뒤’와 ‘지금 호출’의 차이를 보여 주는 반례입니다. 한 사례를 실행해 얻은 순서와 모든 비동기 작업에 관한 일반 규칙은 구별해야 합니다.

‘타이머 등록 취소’를 선택하면 같은 코드 실행 안에서 clearTimeout을 호출합니다. 그러면 ‘예약’은 기록되지 않고, 선택한 마이크로태스크는 그대로 처리됩니다. 먼저 예상 순서를 적고 실제 기록과 비교한 뒤 어떤 호출이 결과를 바꾸었는지 설명해 보세요.

참고 · MDN Web Docs — MDN Window.setTimeout ↗

직접 확인하기 · 규칙 기반 실행

등록 순서와 실행 순서 비교하기

현재 브라우저에서 정해진 짧은 코드를 실행해 기록 순서를 비교합니다. 시간의 정밀도나 AI의 실제 성능을 측정하지 않습니다.

등록 순서와 실행 순서 비교

기록("시작");
const timer = setTimeout(() => 기록("예약"), 0);
기록("끝");

    예상 순서를 생각한 뒤 실행하세요.

    현재 브라우저에서 정해진 코드를 실행합니다. ‘기록’은 아래 목록에 항목을 추가한다는 뜻입니다. 대기 시간은 정확한 호출 시각을 보장하지 않으며, 설정을 바꾸거나 초기화하면 이전 타이머를 정리합니다.

    관계를 읽고, 다른 상황에 적용하기

    두 문제로 생각 확인

    1‘시작’을 기록하고 0밀리초 타이머로 ‘예약’을 등록한 뒤 ‘끝’을 기록하면, 이 예의 순서는 무엇인가요?
    2현재 코드에서 타이머와 마이크로태스크를 등록하고 타이머만 취소하면 어떻게 되나요?

    두 문제의 답을 모두 선택하면 해설을 볼 수 있습니다.

    나의 설명으로 마무리

    오늘 발견한 관계

    저장 위치를 확인하고 있습니다…

    출처와 제작 안내

    원문을 참고해 설명·도표·문항·실험을 새로 작성했습니다. 별도 표시가 없는 사례와 수치는 학습을 위한 가상 예시입니다. 원문 번역이나 실제 모델의 성능 평가 자료가 아닙니다.

    1. WHATWG HTML Living Standard §8.7 Timers ↗WHATWGWHATWG HTML Living Standard §8.7 Timers

      타이머의 등록·취소와 정시 실행을 보장하지 않는다는 명세 · 2026-10-22 원문 확인. 설명·수치·활동·문항은 자체 제작.

    2. WHATWG HTML Living Standard §8.8 Microtask queuing ↗WHATWGWHATWG HTML Living Standard §8.8 Microtask queuing

      queueMicrotask의 등록과 현재 실행 이후 처리 · 2026-10-22 원문 확인. 설명·수치·활동·문항은 자체 제작.

    3. MDN Window.setTimeout ↗MDN Web DocsMDN Window.setTimeout

      0밀리초여도 현재 실행이 끝난 뒤 호출되는 예 · 2026-10-22 원문 확인. 설명·수치·활동·문항은 자체 제작.