충북교구레드플레그/효관 자동수집 코드리뷰: 두 판 사이의 차이
둘러보기로 이동
검색으로 이동
효관 자동수집 코드리뷰와 설명 문서 등록 |
효관 자동수집 코드리뷰와 설명 문서 등록 |
||
| 14번째 줄: | 14번째 줄: | ||
| 설정 파일 || <code>/home/ruyjin/.openclaw/workspace/cbred_admin/cbred_settings.json</code> | | 설정 파일 || <code>/home/ruyjin/.openclaw/workspace/cbred_admin/cbred_settings.json</code> | ||
|- | |- | ||
| 관리자 화면 || <code>http://172.30.1.36/cbred</code> | | 관리자 화면 || <code>http://172.30.1.36/Inner/cbred</code> | ||
|- | |- | ||
| 내부 홈페이지 코드 || <code>/home/ruyjin/.openclaw/workspace/church_homepage/app.py</code> | | 내부 홈페이지 코드 || <code>/home/ruyjin/.openclaw/workspace/church_homepage/app.py</code> | ||
| 65번째 줄: | 65번째 줄: | ||
== 관리자 화면 == | == 관리자 화면 == | ||
내부 | 내부 홈페이지 앱에는 <code>/cbred</code> 관리자 화면을 추가했다. nginx 공개 경로에서는 <code>/Inner/cbred</code>로 접근한다. 이 화면에서는 계정 파일 경로, 로그인 URL, 출석 경로, 다운로드 폴더, 로그 폴더, 운영 일정을 수정할 수 있다. 실제 ID/PW 원문은 화면에 표시하지 않는다. | ||
관리자 화면 접근은 기존 내부 홈페이지 관리자 쿠키를 사용한다. 미로그인 사용자는 | 관리자 화면 접근은 기존 내부 홈페이지 관리자 쿠키를 사용한다. 미로그인 사용자는 관리자 로그인 화면으로 이동한다. | ||
== 보안 검토 == | == 보안 검토 == | ||
| 95번째 줄: | 95번째 줄: | ||
* <code>--dry-run</code> 옵션으로 다운로드 버튼을 누르기 전에 로그인과 화면 상태를 확인할 수 있다. | * <code>--dry-run</code> 옵션으로 다운로드 버튼을 누르기 전에 로그인과 화면 상태를 확인할 수 있다. | ||
* 내부 홈페이지 <code>/cbred</code>에서 운영자가 설정을 수정할 수 있다. | * 내부 홈페이지 <code>/cbred</code>에서 운영자가 설정을 수정할 수 있다. | ||
* 실제 공개 확인 주소는 <code>http://172.30.1.36/Inner/cbred</code>이다. | |||
=== 주의할 점 === | === 주의할 점 === | ||
| 103번째 줄: | 104번째 줄: | ||
* 로그에는 화면 HTML과 screenshot이 저장될 수 있으므로 운영 후 로그 보존 기간과 접근 권한을 정해야 한다. | * 로그에는 화면 HTML과 screenshot이 저장될 수 있으므로 운영 후 로그 보존 기간과 접근 권한을 정해야 한다. | ||
* 수요일 20:10 스케줄 등록은 아직 시스템 타이머/cron으로 연결하지 않았다. | * 수요일 20:10 스케줄 등록은 아직 시스템 타이머/cron으로 연결하지 않았다. | ||
* 현이 요청한 루트 경로 <code>http://172.30.1.36/cbred</code>는 현재 nginx가 MediaWiki 루트로 사용 중이라 바로 연결되지 않는다. 루트 경로가 꼭 필요하면 nginx에 별도 <code>location /cbred</code> 프록시를 추가해야 한다. | |||
== 남은 작업 == | == 남은 작업 == | ||
| 112번째 줄: | 114번째 줄: | ||
# 수요일 20:10 자동 실행 스케줄을 등록한다. | # 수요일 20:10 자동 실행 스케줄을 등록한다. | ||
# 실패 시 사무장/관리자에게 알림을 보내는 작업을 붙인다. | # 실패 시 사무장/관리자에게 알림을 보내는 작업을 붙인다. | ||
# 필요 시 nginx 설정에 <code>/cbred</code> 단독 프록시를 추가해 <code>/Inner/cbred</code>와 같은 화면을 루트 경로에서도 열리게 한다. | |||
== 수동 실행 명령 == | == 수동 실행 명령 == | ||
2026년 6월 23일 (화) 13:15 기준 최신판
충북교구레드플레그/효관 자동수집 코드리뷰
이 문서는 2026년 6월 23일 작성한 효관 출석자료 자동수집 코드의 설명과 코드리뷰 기록이다. 계정 ID와 비밀번호 원문은 문서에 기록하지 않는다.
대상 코드
| 항목 | 위치 |
|---|---|
| 자동수집기 | /home/ruyjin/.openclaw/workspace/cbred_admin/hyogwan_collect.py
|
| 설정 파일 | /home/ruyjin/.openclaw/workspace/cbred_admin/cbred_settings.json
|
| 관리자 화면 | http://172.30.1.36/Inner/cbred
|
| 내부 홈페이지 코드 | /home/ruyjin/.openclaw/workspace/church_homepage/app.py
|
| 계정 파일 | /home/ruyjin/ffwpu.txt
|
구현 요약
자동수집기는 Python 스크립트에서 agent-browser CLI를 호출해 효관 로그인, 출석조회 화면 이동, 엑셀/다운로드 버튼 탐색을 수행한다. 효관 계정은 코드에 직접 저장하지 않고 ffwpu.txt 형식의 외부 파일에서 읽는다.
기본 흐름은 다음과 같다.
cbred_settings.json에서 로그인 URL, 출석 경로, 다운로드 폴더, 로그 폴더를 읽는다.ffwpu.txt에서ID:,PW:값을 읽는다.agent-browser세션을 열고 효관 로그인 화면에 접속한다.- 여러 후보 selector로 아이디/비밀번호 입력칸을 찾아 값을 입력한다.
- 로그인 버튼을 누르거나 Enter 키로 로그인한다.
- 출석조회 경로로 이동한다.
엑셀,Excel,다운로드버튼을 찾아 파일 다운로드를 시도한다.- 실패 시 현재 URL, 접근성 snapshot, body HTML, screenshot을 로그 폴더에 저장한다.
설정 구조
cbred_settings.json의 핵심 필드는 다음과 같다.
| 필드 | 의미 |
|---|---|
enabled |
자동수집 사용 여부 |
credential_file |
효관 계정 파일 경로 |
login_url |
효관 로그인 URL |
attendance_path |
출석조회 상대경로 또는 전체 URL |
download_dir |
다운로드 원자료 저장 폴더 |
log_dir |
실행 로그와 실패 진단 자료 저장 폴더 |
church_scope |
수집 범위 메모 |
lookback_weeks |
레드플레그 판별 주차 |
browser_session |
agent-browser 세션명 |
관리자 화면
내부 홈페이지 앱에는 /cbred 관리자 화면을 추가했다. nginx 공개 경로에서는 /Inner/cbred로 접근한다. 이 화면에서는 계정 파일 경로, 로그인 URL, 출석 경로, 다운로드 폴더, 로그 폴더, 운영 일정을 수정할 수 있다. 실제 ID/PW 원문은 화면에 표시하지 않는다.
관리자 화면 접근은 기존 내부 홈페이지 관리자 쿠키를 사용한다. 미로그인 사용자는 관리자 로그인 화면으로 이동한다.
보안 검토
| 항목 | 검토 결과 |
|---|---|
| 계정 하드코딩 | 코드에 ID/PW를 직접 넣지 않았다. |
| 계정 파일 권한 | /home/ruyjin/ffwpu.txt 권한을 600으로 낮췄다.
|
| 관리자 화면 노출 | 화면에는 계정 파일 경로만 표시하고 원문 비밀번호는 표시하지 않는다. |
| 로그 민감정보 | 현재 로그에는 명령 결과와 화면 진단이 남을 수 있으므로 효관 화면에 개인정보가 보이면 로그 폴더 접근을 제한해야 한다. |
| 외부 발송 | 자동수집 코드는 문자/메일/카카오 발송을 수행하지 않는다. |
코드리뷰 결과
좋은 점
- 계정 정보를 코드에 직접 넣지 않고 외부 파일에서 읽도록 분리했다.
- 수집 실패 시 진단 파일을 남기므로 효관 화면 변경에 대응할 수 있다.
- 다운로드 폴더와 로그 폴더를 설정으로 분리했다.
--dry-run옵션으로 다운로드 버튼을 누르기 전에 로그인과 화면 상태를 확인할 수 있다.- 내부 홈페이지
/cbred에서 운영자가 설정을 수정할 수 있다. - 실제 공개 확인 주소는
http://172.30.1.36/Inner/cbred이다.
주의할 점
- 효관 화면의 실제 input name, 로그인 버튼, 엑셀 버튼이 현재 추정과 다르면 dry-run 후 selector 보정이 필요하다.
agent-browserCLI가 서버에 설치되어 있어야 한다.- 자동수집 성공 후 내려받은 엑셀 구조를 파싱하는 코드는 아직 별도 구현이 필요하다.
- 로그에는 화면 HTML과 screenshot이 저장될 수 있으므로 운영 후 로그 보존 기간과 접근 권한을 정해야 한다.
- 수요일 20:10 스케줄 등록은 아직 시스템 타이머/cron으로 연결하지 않았다.
- 현이 요청한 루트 경로
http://172.30.1.36/cbred는 현재 nginx가 MediaWiki 루트로 사용 중이라 바로 연결되지 않는다. 루트 경로가 꼭 필요하면 nginx에 별도location /cbred프록시를 추가해야 한다.
남은 작업
- 효관 실제 로그인 dry-run을 실행해 로그인 selector와 출석조회 경로를 확인한다.
- 실제 다운로드 파일이 생성되는지 확인한다.
- 다운로드한 엑셀/CSV 컬럼 구조를 분석한다.
- 4주 연속 미출석 판별 파서를 작성한다.
- 수요일 20:10 자동 실행 스케줄을 등록한다.
- 실패 시 사무장/관리자에게 알림을 보내는 작업을 붙인다.
- 필요 시 nginx 설정에
/cbred단독 프록시를 추가해/Inner/cbred와 같은 화면을 루트 경로에서도 열리게 한다.
수동 실행 명령
python3 /home/ruyjin/.openclaw/workspace/cbred_admin/hyogwan_collect.py --dry-run python3 /home/ruyjin/.openclaw/workspace/cbred_admin/hyogwan_collect.py
결론
현재 코드는 자동수집 MVP의 첫 단계로 볼 수 있다. 로그인, 화면 이동, 다운로드 시도, 실패 진단 저장까지는 준비됐지만, 실제 효관 화면 검증과 다운로드 파일 파싱은 아직 남아 있다. 따라서 운영 투입 전에는 반드시 dry-run과 실제 다운로드 테스트를 거쳐야 한다.