원문 캡처 · spicermatthews.com
원문 캡처 · spicermatthews.com

아이폰 Duo 재고를 확인하느라 밤마다 애플 스토어를 들여다보던 Spicer Matthews는 재고가 생기면 문자로 알려주는 오픈소스 Go 프로그램 apple-store-watcher를 만들었다. 재고를 확인하고 주문하는 일은 여전히 직접 해야 하며, 이 도구는 재고를 예약하거나 구매하지 않는다.

이 프로그램은 원하는 제품의 Apple 부품 번호와 방문할 매장을 설정하면 주기적으로 매장 픽업 재고를 확인하고, 재고가 감지되면 Twilio를 통해 SMS를 보낸다. 기본 확인 간격은 5분이다. 재고는 확인 사이에 나타났다 사라질 수 있고, 문자 수신도 늦어질 수 있어 즉시 감지나 구매 성공을 보장하지 않는다.

애플의 공식 재고 API가 아니라 웹 스토어에서 사용하는 픽업 조회 엔드포인트(/shop/retail/pickup-message)를 이용한다. 애플은 요청이 너무 잦으면 조회를 차단할 수 있다. Matthews는 1분 간격이 지나치게 잦았으며, HTTP 541, 429, 503 응답을 받으면 5분에서 시작해 최대 30분까지 재시도 간격을 늘리도록 했다고 설명한다. 기본 간격을 유지하는 편이 낫고, 애플이 엔드포인트를 바꿀 수 있다는 점도 유의해야 한다.

설정에는 Git, 저장소의 go.mod와 호환되는 Go(현재 Go 1.27), Make, SMS 발신 번호가 있는 Twilio 계정이 필요하다. 저장소를 내려받은 뒤 예제 설정 파일을 복사하고, config.json에 국제 형식의 수신 전화번호와 검색 ZIP 코드, 매장 번호, 제품 부품 번호를 입력한다. .env에는 본인의 Twilio 계정 SID, 인증 토큰, 발신 번호를 넣어야 한다. Twilio 계정 제한과 메시지 요금이 적용된다.

text
git clone https://github.com/cloudmanic/apple-store-watcher.git cd apple-store-watcher cp config.example.json config.json cp .env.example .env

맥에서는 make run caffeine으로 실행할 수 있다. 이 명령은 프로그램을 빌드하고 macOS의 caffeinate를 사용해 실행 중인 맥이 잠들지 않게 한다. 맥을 켜 둔 채 네트워크에 연결해야 한다. make run은 이 래퍼 없이 실행하며, Ctrl-C로 종료한다. 로그는 터미널과 watcher.log에 기록된다. 자세한 설정은 README에서 확인할 수 있다.

문자는 제품·매장별 재고 알림이 활성화된 동안 반복될 수 있다. 기본값은 수신자별 발신 간격을 최소 3분으로 제한하고, 매장·제품 알림 하나당 문자 수를 30건으로 제한한다. 기본 재고 확인 간격이 5분이므로 보통 알림도 5분마다 반복된다. 여러 제품은 길이 제한 안에서 한 문자로 묶이며, 재고가 사라졌다가 다시 생기면 새 알림으로 처리한다.

조회 실패나 매장 응답 누락이 있어도 기존 알림 상태는 유지될 수 있어, 마지막으로 확인한 재고를 바탕으로 문자가 반복될 수 있다. 따라서 문자를 받으면 애플 스토어에서 재고를 다시 확인해야 한다. 알림이 없더라도 재고가 없다는 뜻만은 아니다. 조회 차단, 프로그램 중단, 메시지 문제일 수도 있으며 Twilio가 문자를 받았다고 해서 휴대전화에 도착한 것이 보장되지는 않는다.

.env, config.json, watcher.log에는 전화번호와 수신자·메시지 정보가 들어갈 수 있다. Git에서 제외되지만 암호화되지는 않으므로 공개 이슈에 붙이거나 인증 정보를 저장소에 올리지 말아야 한다.