본문 바로가기
C.W.K.
Stream
Lesson 02 of 08 · published

polling: 가장 단순한 답

~12 min · foundations, polling

Level 0Poller
0 XP0/60 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

가장 단순하게, 주기적으로 물어봐

polling 은 갱신을 받는 가장 단순한 방법이야. 타이머를 맞추고 요청을 보낸 뒤 응답을 확인하고, 잠깐 쉬었다가 다시 묻지. 실시간 통신의 유치원 버전처럼 보여도 많은 문제에서는 여전히 가장 좋은 답이야.

언제 낭비가 될까

새 소식 하나를 얻는 동안 빈 응답을 수십 번 받을 수 있어. 그때마다 대역폭과 서버 CPU 를 쓰고, 모바일 기기라면 통신 장치까지 깨워. 갱신은 드문데 자주 물으면 대부분의 요청이 헛일이야. 반대로 새 자료가 분당 한 번쯤 생기고 30초 늦어도 괜찮다면 polling 보다 단순한 해법은 없어. 그럴 땐 거리낌 없이 써.

조금 더 영리하게 묻기

마지막으로 받은 시각(since)이나 순번을 함께 보내면 서버는 그 뒤에 생긴 자료만 돌려줄 수 있어. 새 소식이 없는 왕복도 짧고 싸게 끝나.

Code

단순한 setInterval polling — 대시보드에는 충분해·javascript
// Refresh a dashboard every 30 seconds
async function refresh() {
  try {
    const res = await fetch('/api/dashboard');
    const data = await res.json();
    renderDashboard(data);
  } catch (err) {
    console.warn('Refresh failed, will retry next tick', err);
  }
}

setInterval(refresh, 30_000);
refresh(); // also do an immediate one
워터마크를 둔 영리한 polling·javascript
let lastSeq = 0;

async function pollOnce() {
  const res = await fetch(`/api/messages?since=${lastSeq}`);
  if (!res.ok) return;
  const { messages, latestSeq } = await res.json();
  if (messages.length) {
    lastSeq = latestSeq;
    renderMessages(messages);
  }
}

// Poll, then schedule the next one — never overlap requests
async function loop() {
  await pollOnce();
  setTimeout(loop, 3_000);
}
loop();

External links

Exercise

아무 HTTP API 나 골라. https://api.github.com/repos/anthropics/claude-code 같은 공개 API 도 좋아. 30초마다 가져와서 *달라진 것만* 기록하는 20줄짜리 polling 반복문을 쓰고 5분 동안 돌려봐. 빈손으로 돌아온 횟수가 바로 비용이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.