코딩을 시작한 지 얼마 안 되었을 때, 실생활의 불편함을 해결하려고 처음으로 만들었던 간단한 프로그램이다. 2023년 이후로 수정하지 않아 지금은 작동하지 않을 가능성이 크지만, 코딩의 재미를 느끼게 해준 의미 있는 작업이라 정리해둔다.
1. 제작 동기
시각 장애인용 e북 제작을 위한 워드 입력 자원봉사에 참여했었다. 당시 itlo라는 사이트에 새 책이 올라오면 선착순으로 클릭해서 작업을 진행하는 방식인데, 언제 책이 올라올지 몰라 매번 사이트에 들어가서 확인해야 했다.
타이밍을 놓쳐 작업을 못 하거나, 하루 종일 책이 올라와 있었는데도 모르고 지나치는 일이 많았다. 이 번거로움을 해결하기 위해 새 책이 올라오면 자동으로 알려주는 스크립트를 만들었다.
2. 주요 기능 및 작동 원리
Python의 BeautifulSoup와 ToastNotifier를 사용한 아주 간단한 구조다.
- 스크래핑: 30분 간격으로 사이트에 접속해 도서 목록을 가져온다.
- 상태 비교: 직전에 가져온 목록과 현재 목록을 비교하여 변화(새 책)가 있는지 확인한다.
- 알림: 새 책이 감지되면 윈도우 우측 하단에 알림 창(Toast)을 띄운다.
- 자동 연결: 알림 창에 링크를 삽입하여 클릭하면 즉시 해당 사이트 브라우저가 열리도록 구성했다.
3. 코드 전문
import sys
from bs4 import BeautifulSoup
import urllib.request
import requests
import time
from win10toast_click import ToastNotifier
import webbrowser
import datetime
def open_url():
webbrowser.open_new(site)
print('Opening URL...')
sys.exit()
def refresh():
last_font = None # 이전 상태 저장용
while True:
try:
req = urllib.request.Request(site)
data = urllib.request.urlopen(req).read()
page = BeautifulSoup(data.decode("utf-8"), 'html.parser')
# 마감 여부 확인 로직
end = page.find_all("div", "col-xs-4", limit=2)
if len(end) > 1 and "마감" in end[1].text:
print("현재 등록된 책이 모두 마감되었습니다.")
# 새 책 감지 로직
current_font = page.find("font")
if current_font and current_font != last_font:
print(f"New Book detected!")
print(datetime.datetime.now())
ToastNotifier().show_toast(
title="새 책이 올라왔습니다!",
msg="클릭하여 사이트로 이동",
callback_on_click=open_url
)
last_font = current_font
else:
print(f"변동 없음: {datetime.datetime.now()}")
except Exception as e:
print(f"에러 발생: {e}")
# 30분(1800초) 간격으로 실행
time.sleep(1800)
if __name__ == "__main__":
site = "https://books.itlo.org/booking"
print("모니터링 시작: " + site)
ToastNotifier().show_toast(title="새 책 알리미 시작!")
refresh()4. 스크래핑 제약 및 매너
당시 프로그램을 만들며 나름대로 지키려 했던 원칙들이다.
- 접근성: 해당 사이트는
robots.txt에 별도의 차단 설정이 없었고, 스크래핑하는 페이지는 로그인 없이 누구나 접근 했다. - 서버 부하 최소화: 실시간이 아니라 30분에 한 번이라는 여유 있는 간격으로 요청을 보내서 서버에 부하를 주지 않도록 배려했다.
- 개인적 용도: 자원봉사를 더 원활하게 하기 위한 개인 알림용으로만 사용했다.
5. 마치며
지금 보면 코드 구조도 투박하고 예외 처리도 부족하지만, 내가 느낀 불편함을 기술로 직접 해결했다는 점에서 뿌듯함이 컸던 프로젝트다. 비록 지금은 사이트 링크와 구조가 바뀌어 작동하지 않더라도, ‘자동화’가 주는 편리함이 무엇인지 제대로 체감하게 해준 소중한 경험이었다.