Auto Refresh

어떻게 동작하나

현재 Chrome 웹 스토어에 올라와 있는 버전을 기준으로 작성했습니다.

권한, 그리고 왜 이렇게 조금만 요구하는가

타이머로 탭을 새로고침하는 데에는 그 사이트에 대한 접근 권한이 전혀 필요 없습니다. 확장 프로그램은 브라우저에 새로고침을 요청할 뿐, 페이지를 들여다보지 않습니다. 설치할 때 흔한 '모든 웹사이트의 모든 데이터를 읽고 변경' 경고가 뜨지 않는 이유가 그것입니다.

페이지를 읽어야 하는 기능은 딱 두 가지입니다. 페이지 위에 그리는 카운트다운과 키워드 감시입니다. 이 둘은 해당 사이트에서 처음 쓸 때 한 사이트씩 접근을 요청합니다. 허용한 항목은 모두 옵션 페이지에 나열되고 사이트별로 취소할 수 있습니다.

패키지에는 선언적 콘텐츠 스크립트가 없습니다. 페이지 코드는 chrome.scripting을 써서 허용한 탭에만 주입됩니다 — 허용하지 않은 사이트에서는 우리 코드가 한 줄도 실행되지 않습니다.

간격, 예약, 정확한 시각

고정은 N초마다 반복합니다. 무작위는 매 주기마다 범위 안에서 새 값을 뽑는데, 요청 패턴이 리듬까지 똑같아지는 게 곤란할 때 유용합니다. 사용자 지정은 시·분·초를 받습니다.

예약은 규칙을 선택한 요일과 시작–종료 구간으로 제한합니다. 종료가 시작보다 이른 구간은 자정을 넘는 것으로 처리하므로 22:00 → 02:00은 생각한 대로 동작합니다.

정확한 시각은 간격을 완전히 대체합니다. 09:30과 14:00을 적어 두면 그 순간에 페이지가 새로고침되고, 이미 지난 시각은 다음 날로 넘어갑니다.

페이지 위에 그려지는 카운트다운

확장 프로그램은 페이지 자체에 작은 카운트다운을 그릴 수 있어, 툴바 팝업을 열지 않고도 얼마나 남았는지 볼 수 있습니다. 원하는 곳으로 끌어다 놓으세요. 위치는 뷰포트 대비 비율로 규칙마다 기억되므로 창 크기를 바꿔도 제자리에 있습니다.

사이트 읽기 권한이 필요한 편의 기능은 이것 하나뿐입니다. 꺼 두면 아무 권한 없이도 시간 기반 새로고침은 계속 동작합니다 — 이것이 전역 스위치가 아니라 규칙별 옵션으로 둔 이유입니다.

간단 모드는 문구를 빼고 숫자만 남깁니다. 방 건너편 벽걸이 화면으로 지켜보는 페이지를 위한 모드입니다.

식 문법

일반 텍스트는 보이는 텍스트 어디에서든 대소문자를 구분하지 않고 일치합니다.

정규식은 슬래시 사이에 쓰고 플래그를 붙일 수 있습니다: /\$\d+(\.\d{2})?/i. 다른 곳에서 규칙을 붙여넣을 때를 위해 $를 앞에 붙인 맨 패턴도 받아들입니다.

CSS 선택자와 XPath는 단어가 아니라 요소를 찾습니다. XPath는 // 또는 점으로 시작합니다.

불리언 식은 나머지를 조합합니다: (In Stock OR Available) AND NOT Sold Out. 구절에 이 키워드가 들어 있을 때만 따옴표로 감싸세요.

한 감시에 여러 식을 넣으면 OR로 묶입니다. AND가 필요하면 암묵적인 규칙에 기대지 말고 하나의 불리언 식으로 쓰세요.

미리 만들어 둔 규칙

바로 쓸 수 있는 템플릿이 이 도구가 실제로 쓰이는 상황을 덮습니다. 품절 상품의 재입고, 가격 변동, 새 채용 공고, 빌드 완료, 사내 대시보드가 500을 뱉기 시작하는 순간.

하나를 고르면 식과 함께 합리적인 간격까지 채워집니다 — 재입고는 30초, 채용 페이지는 10분 — 적절한 간격은 어떤 단어를 쓰느냐만큼이나 레시피의 일부이기 때문입니다. 고른 뒤에도 전부 수정할 수 있습니다.

템플릿은 내려받는 대신 확장 프로그램 안에 함께 들어 있습니다. 필요할 때 내려받게 하면 누가 언제 무엇을 지켜보는지 우리가 볼 수 있게 되는데, 그건 정확히 우리가 알지 않겠다고 약속한 것입니다.

선택자를 쓰는 대신 요소를 고르기

피커는 페이지 위를 지나갈 때 요소를 강조하고, 클릭하면 선택자를 대신 써 줍니다. CSS 선택자를 요구하는 모든 곳에서 쓸 수 있습니다 — 감시할 영역, 클릭 대상, 추출할 값.

div:nth-child(3) > span 같은 위치 기반 경로보다 id나 data-testid 같은 안정적인 앵커를 선호합니다. 위치 기반 경로는 사이트가 배너 하나만 추가해도 깨지지만, 속성 앵커는 보통 개편을 견딥니다.

그래도 선택자가 깨지면 AI 수리가 옛 선택자와 새 페이지의 조각을 받아 대체안을 제안합니다. 받아들이기 전에 판단할 수 있도록 신뢰도 점수도 함께 나옵니다.

나타남, 사라짐, 무엇이든 바뀜

'나타남'은 일치가 등장할 때 발동합니다. '사라짐'은 모든 식이 더 이상 일치하지 않을 때 발동합니다 — '품절'이나 점검 안내가 사라지길 기다릴 때 좋습니다.

'무엇이든 바뀜'은 키워드가 필요 없습니다. 보이는 텍스트의 지문을 떠서, 지문이 움직이면 알립니다. 첫 스캔은 기준선을 잡을 뿐이라 갓 만든 규칙이 곧바로 발동하는 일은 없습니다.

지문은 원시 HTML을 일부러 무시합니다. nonce, 타임스탬프, 인라인 스크립트는 거의 매번 로드할 때마다 바뀌기 때문에, 마크업을 해시하면 끊임없이 알림이 울립니다.

스캔 옵션

스캔 전 대기는 동적 페이지에 렌더링할 시간을 줍니다. 분명히 일치하는 사이트인데 감시가 전혀 발동하지 않는다면 거의 항상 이 때문입니다.

CSS 선택자로 감시를 특정 영역에 한정하면 페이지의 온갖 부속물이 대상에서 빠집니다. 오탐을 줄이는 가장 효과적인 방법입니다.

보이는 텍스트 대신 HTML 소스를 스캔하면 숨겨진 마크업까지 일치합니다. 개발자용 옵션이며, 아무도 볼 수 없는 것에도 일치하게 됩니다.

페이지 상호작용

상호작용 대상은 CSS 선택자이며 XPath 대체를 선택적으로 붙일 수 있습니다. 팝업이나 쿠키 배너 닫기, 접힌 영역 펼치기, 원하는 탭으로 전환하기 같은 일에 씁니다. 새로고침할 때마다 또는 감시가 발동할 때만 실행되도록 고를 수 있고, 여러 대상은 순서대로 실행됩니다.

선택자를 손으로 쓰지 말고 피커를 쓰세요 — 위치 기반 경로보다 id와 data-testid를 선호해서 사이트 개편을 훨씬 잘 견딥니다.

캡차가 감지되면 규칙을 멈추고 알려줍니다. 확장 프로그램은 챌린지를 풀거나 우회하거나 무력화하려 시도하지 않습니다.

키오스크 순환

규칙에 URL 목록을 한 줄에 하나씩 주면, 탭은 같은 페이지를 다시 부르는 대신 타이머에 맞춰 그 목록을 돌아갑니다. 벽걸이 화면이나, 여러 대시보드를 번갈아 띄우는 여분 모니터에 쓰고 싶은 모드입니다.

순환 커서는 규칙의 런타임 상태와 함께 보관되므로, 브라우저를 다시 켜거나 service worker가 멈췄다 돌아와도 목록을 처음부터가 아니라 올바른 URL에서 이어갑니다.

순환 중에도 감시는 그대로 적용됩니다. 즉 규칙 하나로 대시보드 네 개를 돌리면서, 그중 무엇이든 오류를 띄우기 시작하면 알림을 받을 수 있습니다.

값을 시간에 따라 추출하기

가격, 재고 수, 순위를 지정하면 확인할 때마다 그때의 값을 기록합니다. 숫자는 주변에서 뽑아내며 통화 기호와 천 단위 구분자는 제거되므로, 1 299,00 €는 그래프로 그리고 비교할 수 있는 수가 됩니다.

임계값을 넣으면 이 계열이 알림이 됩니다. 어떤 값 아래, 어떤 값 위, 또는 직전 표본 대비 변동률. 임계값이 없으면 계열은 조용히 기록되다가 들여다볼 때만 모습을 드러냅니다.

전부 CSV로 내보낼 수 있습니다. 패널의 그래프는 축 없는 한 줄로 일부러 남겼습니다 — 패널 폭이 320px이고, 정확히 읽는 일은 내보내기가 맡습니다.

변경 기록

감시가 발동할 때마다 시각, 페이지, 일치한 텍스트가 기록됩니다. 자리를 비운 채 감시를 계속 켜 둘 만한 이유가 바로 이것입니다. 몇 시간 뒤에 놓친 알림을 발견하는 대신, 무엇이 언제 일어났는지 정확히 볼 수 있습니다.

스냅샷은 발동한 순간의 주변 텍스트를 보관하므로, 뭔가 움직였다는 사실만 아는 대신 전후를 비교할 수 있습니다.

로컬 기록은 옵션에서 크기를 정하는 링 버퍼입니다. 새 항목이 들어오면 가장 오래된 것이 밀려납니다. 더 긴 보관은 계정 쪽에 있고, 클라우드 동기화를 켠 경우에만 해당됩니다.

AI는 무엇에 쓰이나

규칙 생성은 한 문장을 받아 — '재입고되고 200달러 아래면 알려줘' — 식과 모드, 그리고 권장 간격을 돌려줍니다. 정규식을 평생 배우지 않을, 또 배울 필요도 없는 사람에게 문법을 건너뛰는 가장 빠른 길입니다.

변경 요약은 발동 전후의 텍스트를 받아 실제로 무엇이 바뀌었는지 한 줄로 말해 줍니다. 쓸모 있는 차이가 타임스탬프와 돌아가는 광고 사이에 묻혀 있는 페이지에서 특히 중요합니다.

변경 분류는 차이가 의미 있는 것인지 잡음인지 판단하고, 선택자 수리는 사이트 개편으로 깨진 선택자의 대체안을 제안합니다. 이 네 가지는 모두 우리 서버에서 실행됩니다. 확장 프로그램 패키지 어디에도 모델 키는 없고, 요청이 싣고 가는 것은 분석 대상 조각이지 브라우징 기록이 아닙니다.

알림

브라우저 안에서는 알림, 소리, 페이지에서 일치 지점 강조, 또는 탭을 앞으로 가져오기.

브라우저 밖으로는 이메일, 웹훅, Telegram, Discord, Slack. 대시보드에서 설정하며, 계정과 Pro 플랜이 필요합니다.

알림은 재시도하지 않습니다. 10분 늦게 도착한 재입고 소식은 없느니만 못하므로, 전송 실패는 큐에 쌓지 않고 그대로 보고합니다.

아래 각 채널은 대시보드에 자체 설정이 있고, 대시보드는 이 문단들로 곧장 연결됩니다.

이메일

대시보드에서 주소를 추가하면 그 주소로 확인 메일을 한 통 보냅니다. 안의 링크가 열리기 전까지 채널은 침묵합니다. 링크는 한 번만 동작하고 24시간 뒤 만료됩니다.

이 이중 확인은 형식이 아닙니다. 이것이 없으면 계정을 가진 누구든 낯선 사람의 주소를 입력해 우리 도메인이 원하는 문구를 그리로 배달하게 만들 수 있습니다 — 열린 메일 릴레이의 모습이자, 발송 평판을 잃는 가장 빠른 길입니다. 그래서 테스트 버튼으로는 주소를 확인할 수 없고, 이미 확인된 주소만 테스트할 수 있습니다.

이메일은 일일 허용량을 소모하는 유일한 채널입니다. 우리가 비용을 내는 유일한 채널이기 때문입니다. 확인 메일은 허용량에 포함되지 않지만, 재발송에는 빈도 제한이 있습니다.

웹훅

직접 관리하는 https:// 엔드포인트를 붙여 넣으세요. { source, title, body, url, at } 형태의 application/json을 POST합니다. 발동의 제목과 본문, 그 일이 일어난 페이지, 그리고 ISO 타임스탬프입니다.

한 번 시도, 8초 타임아웃, 재시도 없음. 그쪽에서 인증 토큰이 필요하면 커스텀 헤더를 채널과 함께 저장할 수 있습니다.

URL은 https여야 하고, 사설 대역이나 링크로컬 대역으로 해석되는 호스트는 채널을 추가할 때 거부됩니다 — 클라우드 메타데이터 주소도 포함입니다. 이 검사는 이 폼이 누군가를 대신해 우리 서버로 내부망을 훑게 하는 수단이 되지 않도록 존재합니다.

Telegram

Telegram에는 두 값이 필요하고 대시보드는 둘 다 묻습니다. bot token과 chat id입니다. @BotFather에게 메시지를 보내 /newbot을 전송하고 돌려받은 token을 복사하세요. 그다음 새 봇에게 아무 메시지나 보내고 — 봇이 먼저 대화를 열 수는 없습니다 — https://api.telegram.org/bot<token>/getUpdates 에서 chat.id를 읽으세요.

당신의 token으로 Telegram Bot API의 sendMessage를 호출합니다. token은 당신의 계정에 보관되고 다른 용도로 쓰이지 않으며 확장 프로그램에 넘어가는 일도 없습니다. BotFather에서 취소하면 전송이 즉시 끊깁니다.

Discord

서버 설정 → 연동 → 웹후크 → 새 웹후크, 올릴 채널을 고른 뒤 웹후크 URL 복사를 눌러 대시보드에 붙여 넣으세요.

제목, 일치한 텍스트, 페이지 링크를 담은 Discord embed를 POST합니다. 이 URL 자체가 자격 증명이라 — 가진 사람은 누구나 그 채널에 글을 올릴 수 있으므로 — 비밀로 다루세요. Discord에서 웹후크를 삭제하면 즉시 취소되고, 우리 쪽에서 바꿀 것은 없습니다.

Slack

Slack 앱의 Incoming Webhooks에서 기능을 켜고, 워크스페이스에 하나 추가한 뒤 채널을 고르고 hooks.slack.com URL을 복사하세요.

제목, 일치한 텍스트, 페이지 URL을 담은 { text }를 POST합니다. 이 웹훅은 고른 채널 하나에 묶여 있으며 그 자체가 자격 증명입니다. 전송을 멈추려면 Slack에서 취소하세요.

Chrome이 백그라운드 탭을 얼릴 때

Chrome의 메모리 절약 기능은 쉬고 있다고 판단한 탭을 버리고, 그러면 새로고침 주기가 멈춥니다. 확장 프로그램은 버려진 탭을 알아채고 다시 불러와 되살립니다.

창을 보이는 상태로 두면 아예 겪지 않습니다. 옵션의 '컴퓨터를 깨어 있게 유지'는 시스템 절전이 밤사이 같은 결과를 내는 것을 막아 줍니다.

동기화, 기기, 그리고 무엇이 내 컴퓨터를 떠나는가

계정이 없으면 브라우저 밖으로 나가는 것은 아무것도 없습니다.

클라우드 동기화를 켜면 당신이 쓴 규칙과 그 규칙이 만든 발동 기록을 저장합니다. 당신이 방문한 사이트 목록은 저장하지 않고, 관심도 없습니다.

병합은 기기에서 규칙 단위로, 마지막 수정 시각을 기준으로 이루어집니다 — 노트북에서 편집해도 데스크톱에서 만들어 둔 것을 덮어쓰지 않습니다. 탭에 묶인 규칙은 절대 동기화되지 않습니다. tab id는 다른 기기에서 아무 의미가 없기 때문입니다.

체험 기간, 그리고 무료 등급이 지키는 것

체험은 모든 기능이 풀린 7일이며 시간은 로컬에서 셉니다. 계정도 카드도 필요 없고 취소할 것도 없습니다 — 끝나면 Pro 기능은 사라지는 대신 읽기 전용이 되므로 설정한 것은 하나도 잃지 않습니다.

무료 등급은 데모가 아니라 진짜 쓸 만한 것을 목표로 합니다. 무제한 새로고침 규칙, 새로고침 계층의 모든 옵션, 그리고 일반 텍스트 감시 3개. 무작위 간격, 소리, 알림은 사용량을 재지 않습니다. 알림 건당 과금이야말로 경쟁 확장 프로그램을 쓰기 불편하게 만드는 바로 그것이기 때문입니다.

Pro가 더하는 것은 규모와 클라우드입니다. 무제한 감시, 고급 식, 예약, 페이지 상호작용, 값 추출, 기록, AI, 그리고 브라우저 밖으로 나가는 알림. 평생 플랜은 기능 구성이 같고 AI 허용량이 매달이 아니라 매년 초기화됩니다 — 결제는 한 번이어도 추론 비용은 계속 발생하니까요.