launchd 자동 트리거
macOS launchd가 메인 스크립트를 실행한다. cron보다 안정적이며, 절전 모드에서도 깨워서 실행할 수 있다.
두 관리자 시스템에서 오늘의 수업·예약 데이터를 모아, 매일 아침 8시에 한 통의 메일로 받아본다. 온스튜디오 신청자는 바디코디에 자동으로 예약 등록된다.
macOS launchd가 메인 스크립트를 실행한다. cron보다 안정적이며, 절전 모드에서도 깨워서 실행할 수 있다.
Playwright로 바디코디와 온스튜디오에 각각 로그인하여 오늘 날짜의 수업 일정과 예약자 명단을 수집한다.
온스튜디오 신청자를 바디코디 동일 시간 수업에 예약 등록한다. 이름이 있으면 그대로, 없으면 오붓 1, 오붓 2… 형식으로 표기. 이미 등록한 예약은 state.json으로 추적해 중복 방지.
두 시스템 결과를 시간순 하나의 타임라인으로 병합하고 자동 동기화 결과 섹션을 함께 구성한다.
midbar_@naver.com로 한 통의 메일을 발송한다. 앱 비밀번호 기반 SMTP 인증.
한 수업 당 두 시스템 신청자를 묶어 보여주고, 총인원과 자동 동기화 결과를 한 줄로 명시한다. 시간순 정렬.
# 📅 2026-05-04 (월) 오늘의 수업 수업 3개 · 총 12명 · 동기화 2건 완료 ───────────────────────────────────── 🕖 07:00 · 모닝요가 / 강사 김XX 바디코디 (3명) — 이경수, 이미림, 이차린 온스튜디오 (2명) — 이정, 미연 ▸ 총 5명 ✅ 온스튜디오 2명(이정·미연) 바디코디 등록 완료 ───────────────────────────────────── 🕘 09:00 · 그룹PT / 강사 이ZZ 바디코디 (4명) — 정수정, 최한솔, 강예린, 김도윤 온스튜디오 (0명) — 없음 ▸ 총 4명 ───────────────────────────────────── 🕙 10:30 · 필라테스 / 강사 박YY 바디코디 (1명) — 김도윤 온스튜디오 (2명) — 오붓1, 오붓2 # 이름 미수집 ▸ 총 3명 ❌ 온스튜디오 2명 바디코디 등록 실패 (정원 초과)
오붓1, 오붓2… 순번 표기없음으로 표시 (행 자체는 유지)| 파일 | 역할 | 주요 책임 |
|---|---|---|
bodycody_client.py |
바디코디 어댑터 | 로그인 · 오늘 수업 조회 · 예약 등록 |
onstudio_client.py |
온스튜디오 어댑터 | 로그인 · 오늘 수업 조회 |
sync.py |
크로스 시스템 동기화 | 온스튜디오→바디코디 예약 추가, 중복 방지 |
report.py |
리포트 생성기 | 통합 데이터 → HTML 메일 본문 |
mailer.py |
메일 발송 | 네이버 SMTP 인증 · 발송 |
main.py |
오케스트레이션 | 전체 파이프라인 실행 · 예외 라우팅 |
.env |
자격증명 | 양쪽 ID/PW · 메일 앱비밀번호 (gitignore) |
state.json |
중복 방지 추적 | 이미 등록한 예약 기록 |
첫 1주일은 자동 등록 없이 미리보기만 메일로 받아 검증한다. 실 등록은 충분히 안정 확인 후 활성화.
state.json에 이미 등록한 예약을 기록. 재실행되어도 같은 사람이 두 번 등록되지 않는다.
자동 등록 전후 모든 액션을 로그 파일에 기록. 문제 발생 시 추적·롤백 근거가 된다.
매일 메일에 "자동 동기화 결과"가 포함되므로 이상 발생 시 당일 발견 가능.
전체 자동화 비전은 큰 프로젝트라, 위험도와 가치 순으로 3단계로 분할한다. 본 스펙은 1단계만 다룬다.
승인 시 스펙 문서를 markdown으로 정리해 저장 후, 구현 계획(plan) 작성 단계로 넘어간다. 첫 구현 산출물은 두 시스템 로그인 검증부터 시작.