매일 도는 실제 포털 점검
포털은 예고 없이 바뀝니다. 사용자의 불만으로 알게 되지 않도록, 저장소의 PROJECT-SEJONG-LIVE-CHECK 워크플로우가 매일 두 가지를 점검합니다. 아래는 워크플로우와 스크립트가 실제로 하는 일만 적은 것입니다.
- 매일 09:00 KST (cron
0 0 * * *, UTC 기준)에 실행됩니다. 수동 실행도 가능합니다. - 점검 두 개는 별도 작업이라 서로의 결과에 영향을 주지 않습니다.
1. 실제 로그인 점검
섹션 제목: “1. 실제 로그인 점검”scripts/live-check.sh가 하는 일은 다음과 같습니다.
- Java, Python, Node.js가 각각 맞는 비밀번호로 통합 인증을 한 번씩 수행하고, 필드별 값을 해시로 요약합니다.
- 세 요약을 비교합니다. 세 언어 모두 성공해야 하고, 결과에 필드가 있어야 하며, null인 필드가 없어야 합니다 (SIS 조회가 조용히 실패한 경우를 잡기 위해서입니다). 그리고 모든 필드의 해시가 세 언어에서 같아야 합니다.
- 출력은 필드 이름과
same/DIFFERENT/NULL상태뿐입니다. 개인정보 값은 출력하지 않습니다.
계정 잠금 방지 장치가 있습니다.
- 틀린 비밀번호를 시도하지 않습니다. 언어당 포털 로그인은 한 번입니다.
- 점검 실패 이슈가 열려 있는 동안에는 정기 실행이 로그인하지 않고 건너뜁니다. 원인을 고친 뒤 수동 실행으로 확인합니다.
- 테스트 계정 정보가 저장소에 설정되어 있지 않으면 이 점검은 건너뜁니다.
실패하면 저장소에 이슈가 하나 자동으로 열립니다 (이미 열려 있으면 새로 만들지 않습니다).
2. 로그인 없는 형태 점검
섹션 제목: “2. 로그인 없는 형태 점검”계정이 필요 없어 잠금 위험이 없고, 위 로그인 점검의 이슈 상태와 무관하게 매일 실행됩니다.
scripts/probe-reference-data.py: 학과·학기 코드 API 3곳에 요청 3건(1초 간격)을 보내 데이터셋 키와 필수 필드가 그대로인지 확인합니다.scripts/probe-public-data.py: 개설강좌, 학과 교육과정, 학사일정, 기숙사 식단·공지, 학식, 캠퍼스맵, 비교과 같은 공개 데이터 소스의 응답 모양을 확인합니다.- 출력은 건수와 누락된 필드 이름뿐입니다.
- 네트워크 오류나 시간 초과는
SKIP으로 출력하고 실패로 보지 않습니다. 라이브러리가 실패를 격리하므로, 잡으려는 것은 모양이 바뀐 경우뿐입니다. - 모양이 바뀐 것이 감지되면 이슈가 하나 열립니다 (같은 제목의 이슈가 열려 있으면 만들지 않습니다).
무엇을 보장하지 않나
섹션 제목: “무엇을 보장하지 않나”- 점검 계정은 하나라서, 다른 신분(대학원생 등)에서의 동작은 이 점검으로 보장되지 않습니다.
- 형태 점검은 필드가 있는지를 보며, 값이 맞는지는 판단하지 않습니다.
- 매일 한 번이므로 그 사이의 변경은 다음 점검까지 모릅니다. 수정 시점에 대한 약속(SLA)은 없습니다 (API 안정성).
