충북교구레드플레그/효관 자동수집 코드리뷰: 두 판 사이의 차이

현 아카이브
둘러보기로 이동 검색으로 이동
(토론 | 기여)
효관 자동수집 코드리뷰와 설명 문서 등록
 
(토론 | 기여)
효관 자동수집 코드리뷰와 설명 문서 등록
 
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> 관리자 화면을 추가했다. 이 화면에서는 계정 파일 경로, 로그인 URL, 출석 경로, 다운로드 폴더, 로그 폴더, 운영 일정을 수정할 수 있다. 실제 ID/PW 원문은 화면에 표시하지 않는다.
내부 홈페이지 앱에는 <code>/cbred</code> 관리자 화면을 추가했다. nginx 공개 경로에서는 <code>/Inner/cbred</code>로 접근한다. 이 화면에서는 계정 파일 경로, 로그인 URL, 출석 경로, 다운로드 폴더, 로그 폴더, 운영 일정을 수정할 수 있다. 실제 ID/PW 원문은 화면에 표시하지 않는다.


관리자 화면 접근은 기존 내부 홈페이지 관리자 쿠키를 사용한다. 미로그인 사용자는 <code>/admin-login?next=/cbred</code>로 이동한다.
관리자 화면 접근은 기존 내부 홈페이지 관리자 쿠키를 사용한다. 미로그인 사용자는 관리자 로그인 화면으로 이동한다.


== 보안 검토 ==
== 보안 검토 ==
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 형식의 외부 파일에서 읽는다.

기본 흐름은 다음과 같다.

  1. cbred_settings.json에서 로그인 URL, 출석 경로, 다운로드 폴더, 로그 폴더를 읽는다.
  2. ffwpu.txt에서 ID:, PW: 값을 읽는다.
  3. agent-browser 세션을 열고 효관 로그인 화면에 접속한다.
  4. 여러 후보 selector로 아이디/비밀번호 입력칸을 찾아 값을 입력한다.
  5. 로그인 버튼을 누르거나 Enter 키로 로그인한다.
  6. 출석조회 경로로 이동한다.
  7. 엑셀, Excel, 다운로드 버튼을 찾아 파일 다운로드를 시도한다.
  8. 실패 시 현재 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-browser CLI가 서버에 설치되어 있어야 한다.
  • 자동수집 성공 후 내려받은 엑셀 구조를 파싱하는 코드는 아직 별도 구현이 필요하다.
  • 로그에는 화면 HTML과 screenshot이 저장될 수 있으므로 운영 후 로그 보존 기간과 접근 권한을 정해야 한다.
  • 수요일 20:10 스케줄 등록은 아직 시스템 타이머/cron으로 연결하지 않았다.
  • 현이 요청한 루트 경로 http://172.30.1.36/cbred는 현재 nginx가 MediaWiki 루트로 사용 중이라 바로 연결되지 않는다. 루트 경로가 꼭 필요하면 nginx에 별도 location /cbred 프록시를 추가해야 한다.

남은 작업

  1. 효관 실제 로그인 dry-run을 실행해 로그인 selector와 출석조회 경로를 확인한다.
  2. 실제 다운로드 파일이 생성되는지 확인한다.
  3. 다운로드한 엑셀/CSV 컬럼 구조를 분석한다.
  4. 4주 연속 미출석 판별 파서를 작성한다.
  5. 수요일 20:10 자동 실행 스케줄을 등록한다.
  6. 실패 시 사무장/관리자에게 알림을 보내는 작업을 붙인다.
  7. 필요 시 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과 실제 다운로드 테스트를 거쳐야 한다.