setTimeout, setInterval과 타이머 오차
setTimeout과 setInterval로 일회성·반복 작업을 예약하고, 타이머 오차를 줄이는 간단한 기법을 배웁니다.
setTimeout, setInterval과 타이머 오차은(는) CoddyKit의 무료 JavaScript Academy 강의입니다. 이것은 3개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 JavaScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. JavaScript Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
타이머 소개
목표: 작업을 깔끔하게 예약합니다.
- setTimeout: 나중에 한 번 실행
- setInterval: 반복해서 실행
- drift: 타이머가 어긋나는 이유
- 간단한 drift 수정

setTimeout — 일회성 실행
setTimeout(fn, ms)은 지연 시간 후 한 번 실행됩니다(정확한 시간이 아니라 최소 시간입니다).
// setTimeout schedules a one-off callback
console.log("A: start");
setTimeout(function () {
console.log("B: after ~5ms");
}, 5);
console.log("C: scheduled");

setInterval — 반복 실행
setInterval은 자동으로 반복 실행되며, 중지하려면 clearInterval(id)을 사용합니다.
// setInterval repeats; always clear it
let count = 0;
const id = setInterval(function () {
count = count + 1;
console.log("tick", count);
// Stop after 3 ticks to avoid endless logs
if (count >= 3) {
clearInterval(id);
console.log("stopped");
}
}, 5);

drift 확인하기
실제 간격은 달라집니다. 작업, 기기 부하, 이벤트 루프 때문에 drift가 발생합니다.
// Drift demo: expected vs actual timing
const targetMs = 5;
let last = Date.now();
let times = 0;
const driftId = setInterval(function () {
const now = Date.now();
const gap = now - last; // actual gap
last = now;
times = times + 1;
console.log("gap~", gap, "ms");
if (times >= 3) {
clearInterval(driftId);
console.log("done");
}
}, targetMs);

정렬된 예약
변화하는 expected 시간에 맞추세요. 다음 지연 시간을 expected 시간으로부터 계산하면 오류가 누적되는 것을 막을 수 있습니다.
// Simple drift fix: schedule from the expected time
const step = 5;
let expected = Date.now() + step;
let ticks = 0;
function tick() {
ticks = ticks + 1;
const now = Date.now();
const drift = now - expected; // positive if we are late
console.log("drift:", drift, "ms");
// Compute next expected time first
expected = expected + step;
// Next delay = time until the next expected timestamp
const nextDelay = Math.max(0, expected - Date.now());
if (ticks < 3) {
setTimeout(tick, nextDelay);
} else {
console.log("aligned stop");
}
}
setTimeout(tick, step);

팁과 확인 목록
팁:
- 작업이 끝나면 항상 clearInterval을 호출합니다.
- 일정한 주기를 유지하려면 정렬된 setTimeout 반복문을 우선 사용합니다.
- drift를 줄이도록 타이머 콜백을 짧게 유지합니다.

drift 수정 퀴즈
빠른 확인: drift 줄이기입니다.

복습
복습: 한 번만 실행할 때는 setTimeout을, 반복할 때는 setInterval을 사용하고(끝나면 지우는 것을 잊지 마세요), 다음 실행을 expected 시간에 맞춰 drift를 줄입니다.

자주 묻는 질문
“setTimeout, setInterval과 타이머 오차” 강의는 무료인가요?
네 — “setTimeout, setInterval과 타이머 오차” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 JavaScript Academy 강의 전체를 잠금 해제할 수 있습니다. JavaScript Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“setTimeout, setInterval과 타이머 오차”에서 뭘 배우나요?
setTimeout과 setInterval로 일회성·반복 작업을 예약하고, 타이머 오차를 줄이는 간단한 기법을 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 JavaScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
JavaScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 JavaScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 1번째 강의입니다.
“setTimeout, setInterval과 타이머 오차” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 JavaScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 JavaScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- setTimeout, setInterval과 타이머 오차
- 디바운스와 스로틀 — 직접 구현하기
- 애니메이션 타이밍 — 시간 기반 반복문 입문