init
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
# 🐌 damn-my-slow-skt
|
||||
|
||||
**SKT/SK브로드밴드 인터넷 SLA 속도 미달을 자동으로 측정하고 감면 신청을 돕는 CLI 도구.**
|
||||
|
||||
## 이게 뭔데
|
||||
|
||||
SK브로드밴드 유선 인터넷은 공식 Myspeed 사이트에서 인터넷 SLA 속도측정을 제공한다. 이 도구는 그 흐름을 Playwright로 실행하고, 결과를 로컬 DB에 남기며, SLA 미달 시 감면 처리까지 이어가도록 설계된 자동화 CLI다.
|
||||
|
||||
> 현재 SK브로드밴드 Myspeed는 B world/T아이디/간편인증 기반 로그인 화면을 사용한다. 이전 provider의 셀렉터는 제거했고, SK브로드밴드 공식 진입점과 용어로 전환했다. 실제 감면 제출 셀렉터는 live 계정으로 검증해야 한다.
|
||||
|
||||
## 시작하기
|
||||
|
||||
### 1. Node.js 설치
|
||||
|
||||
Node.js 20 이상이 필요합니다.
|
||||
|
||||
```bash
|
||||
node -v
|
||||
npm -v
|
||||
npx -v
|
||||
```
|
||||
|
||||
### 2. 초기 설정
|
||||
|
||||
```bash
|
||||
npx -y damn-my-slow-skt@latest init
|
||||
```
|
||||
|
||||
설정 파일은 `~/.damn-my-slow-isp/config-skt.yaml`에 저장됩니다. 비밀번호는 로컬 YAML 파일에만 저장됩니다.
|
||||
|
||||
초기 설정 중 SKT/SK브로드밴드 공식 이용약관 URL이 표시되며, 명시적으로 동의해야 설정 파일이 저장됩니다. 동의하지 않으면 `init`은 설정 파일을 만들지 않고 종료합니다.
|
||||
|
||||
### 3. 로그인 세션 저장
|
||||
|
||||
SK브로드밴드 Myspeed는 B world/T아이디/간편인증 로그인이 필요합니다. 최초 1회는 브라우저를 열어 직접 인증하고, 세션을 로컬 파일로 저장합니다.
|
||||
|
||||
```bash
|
||||
npx -y damn-my-slow-skt@latest auth login
|
||||
```
|
||||
|
||||
저장 위치는 설정 파일의 `auth_state_path`이며 기본값은 `~/.damn-my-slow-isp/auth-skt.json`입니다. 세션이 만료되면 같은 명령을 다시 실행하세요.
|
||||
|
||||
```bash
|
||||
npx -y damn-my-slow-skt@latest auth status
|
||||
npx -y damn-my-slow-skt@latest auth clear
|
||||
```
|
||||
|
||||
### 4. 실행
|
||||
|
||||
```bash
|
||||
npx -y damn-my-slow-skt@latest run
|
||||
```
|
||||
|
||||
- `--dry-run`: 측정만 하고 감면 신청은 생략
|
||||
- `--force`: 오늘 이미 완료했어도 강제로 다시 실행
|
||||
- `--debug`: 브라우저 창을 띄워 진행 과정을 직접 확인
|
||||
|
||||
## SKT/SK브로드밴드 SLA 기준
|
||||
|
||||
공식 확인 출처:
|
||||
|
||||
- 인터넷 품질 측정: http://myspeed.skbroadband.com/
|
||||
- 인터넷 SLA 속도측정: http://myspeed.skbroadband.com/mesu/internet_sla.asp
|
||||
- SK브로드밴드 이용약관: https://www.bworld.co.kr/footer/terms.do?menu_id=F01010000
|
||||
- 전기통신 서비스 이용약관 PDF: https://cdn.bworld.co.kr/home/fronta/data/download/stip/제31차%20전기통신서비스이용기본약관_260330.pdf
|
||||
|
||||
Myspeed SLA 안내 페이지에서 확인한 기준:
|
||||
|
||||
- **판정**: 30분간 5회 이상 측정하여 측정치의 60% 이상이 최저속도(다운로드 속도)에 미달하면 당일 이용요금 감면
|
||||
- **대상**: PC 1대를 이용한 측정. 무선랜, 공유환경, 상품 제공속도보다 낮은 LAN카드 이용 및 설정 변경 등은 제외될 수 있음
|
||||
- **측정 사이트**: SK브로드밴드 Myspeed 인터넷 SLA 속도측정 메뉴
|
||||
- **후속 조치**: 최저속도 미달 시 품질 점검 및 더 나은 서비스 제공을 위해 TM 및 방문 점검을 실시할 수 있음
|
||||
|
||||
## 설정 바꾸기
|
||||
|
||||
`~/.damn-my-slow-isp/config-skt.yaml` 파일을 직접 편집합니다.
|
||||
|
||||
```yaml
|
||||
terms:
|
||||
provider: "skt"
|
||||
accepted: true
|
||||
accepted_at: "2026-03-30T00:00:00.000Z"
|
||||
version: "2026-03-30"
|
||||
urls:
|
||||
- "https://www.bworld.co.kr/footer/terms.do?menu_id=F01010000"
|
||||
- "https://cdn.bworld.co.kr/home/fronta/data/download/stip/제31차%20전기통신서비스이용기본약관_260330.pdf"
|
||||
|
||||
schedule:
|
||||
max_attempts: 10
|
||||
retry_interval_minutes: 120
|
||||
|
||||
notification:
|
||||
discord_webhook: ""
|
||||
telegram_bot_token: ""
|
||||
|
||||
auth_state_path: "~/.damn-my-slow-isp/auth-skt.json"
|
||||
```
|
||||
|
||||
`run` 명령은 `terms.accepted: true`, 현재 약관 `version`, 그리고 유효한 `accepted_at`이 없으면 실행하지 않습니다. 기존 설정은 대화형 `run` 또는 `init --force`에서 약관 동의를 기록하도록 마이그레이션됩니다.
|
||||
|
||||
설정 변경 후 스케줄 재등록:
|
||||
|
||||
```bash
|
||||
npx -y damn-my-slow-skt@latest schedule install
|
||||
```
|
||||
|
||||
## 요구사항
|
||||
|
||||
- Node.js 20+
|
||||
- SKT/B world 계정 또는 SK브로드밴드 회선 인증 수단
|
||||
- SKT/SK브로드밴드 공식 이용약관 동의
|
||||
- 최초 1회 `auth login`으로 저장한 로그인 세션
|
||||
- 유선(LAN) 연결 권장
|
||||
- Playwright Chromium
|
||||
|
||||
## 개발
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npx playwright install chromium
|
||||
npm run typecheck
|
||||
npm run lint
|
||||
npm run build
|
||||
npm test
|
||||
```
|
||||
|
||||
| Component | Technology |
|
||||
|-----------|------------|
|
||||
| Language | TypeScript (ES2020, CommonJS, strict) |
|
||||
| CLI | Commander + Inquirer + Chalk v4 |
|
||||
| Browser | Playwright Chromium |
|
||||
| Storage | node:sqlite / JSON fallback |
|
||||
| Config | YAML — `~/.damn-my-slow-isp/config-skt.yaml` |
|
||||
Reference in New Issue
Block a user