프로젝트 소개

## 개요 Hospital-Recruit-QA-Bot은 국내 42개 주요 병원의 채용공고를 매일 아침 자동으로 수집하고, 수집 데이터의 무결성을 검증하는 QA 관점의 자동화 파이프라인입니다. 단순 크롤링에 그치지 않고, 검증 게이트웨이를 두어 신뢰할 수 있는 데이터만 결과물에 포함시키는 구조를 지향합니다. ## 핵심 기능 ### 1. RaiT 검증 게이트웨이 - 수집된 로우 데이터의 결측치와 형식 오류를 RaiT(Responsible AI Testing) 프레임워크 기반으로 실시간 검증합니다. - 검증을 통과(PASS)한 공고만 최종 결과물에 포함하고 `seen_posts`에 등록하여, 부적합한 데이터가 결과물에 섞이는 것을 차단합니다. ### 2. CI/CD 파이프라인 (GitHub Actions) - 매일 오전 9시(KST) Ubuntu 가상 환경에서 자동 실행됩니다. - 크롤링 후 갱신된 `seen_posts.csv`를 봇이 스스로 커밋/푸시하여 중복 수집을 지속적으로 방지합니다. ### 3. 중복 데이터 필터링 - 로컬과 클라우드 환경이 동일한 히스토리 DB(`seen_posts.csv`)를 공유하여, 이미 확인한 공고는 제외하고 신규 공고만 선별해 리포트합니다. ## QA 검증 시나리오 README에 정리된 테스트 케이스는 다음과 같습니다. | ID | 테스트 항목 | 기대 결과 | 상태 | |---|---|---|---| | TC-01 | RaiT 데이터 유효성 검증 | `verify_rait_compliance` 로직으로 결측치 및 형식 오류 자동 판별 | Pass | | TC-02 | 데이터 무결성 가드 | PASS 판정을 받은 신규 데이터만 중복 방지 목록에 반영 | Pass | | TC-03 | 통합 리포트 분기 저장 | 전체/신규/RaiT_FAIL 데이터를 개별 시트로 분리해 엑셀 생성 | Pass | | TC-04 | 42개 병원 타겟 접속 | 보안 차단 사이트 제외, 타겟 사이트 정상 접속 및 데이터 파싱 확인 | Pass | ## 워크플로 1. **트리거:** 매일 오전 9시(KST) GitHub Actions 스케줄러 자동 실행 2. **수집:** Selenium 기반으로 병원별 채용 페이지의 동적 데이터 수집 3. **QA 검증:** RaiT 로직을 통한 데이터 무결성 검사 4. **중복 제거:** `seen_posts.csv` 대조를 통한 중복 공고 필터링 5. **자동 갱신:** 검증된 신규 데이터를 저장소에 자동 커밋 및 푸시 6. **리포트:** 최종 엑셀 결과물과 에러 로그를 GitHub Artifacts로 보관 ## 기술 스택 - **언어:** Python 3.10 - **라이브러리:** Selenium, Pandas, Openpyxl, Webdriver-manager - **자동화:** GitHub Actions (CI/CD) - **저장:** CSV(`seen_posts.csv`) 및 Excel 산출물 ## 프로젝트 구조 ```text .github/workflows/ # CI/CD 파이프라인 설정 (crawler.yml) top-hospitals/ ├── qa/ # 병원별 크롤링 로직 및 RaiT 검증 모듈 ├── main.py # 메인 실행 엔진 (QA 게이트웨이 및 데이터 핸들링) └── seen_posts.csv # 중복 방지용 히스토리 DB (자동 갱신) ``` ## 문제 해결 기록 - **환경 간 경로 이식성:** 로컬과 GitHub Actions 가상 서버의 경로 차이로 실행 오류가 발생했고, `os.path` 기반 상대 경로 동적 생성으로 환경에 무관한 실행 구조를 만들었다고 설명합니다. - **데이터 정합성 및 중복 관리:** 반복 수집 시의 중복 문제를 `seen_posts.csv` 히스토리 관리와 GitHub Actions 자동 커밋 연동으로 해결했다고 밝히고 있습니다. - **환경 격리:** `.gitignore`를 정교화해 소스 코드와 데이터 산출물을 분리했습니다. ## 알려진 제약 - 삼성창원병원은 강화된 보안 정책으로 GitHub Actions(Ubuntu/해외 IP) 환경에서 접근이 차단됩니다. 해당 병원 데이터가 필요하면 로컬 환경에서 직접 실행하는 것이 권장되며, CI/CD 파이프라인에서는 안정성을 위해 해당 타겟을 자동 스킵하도록 설정되어 있습니다. ## 향후 계획 - Pytest 도입을 통한 유닛/통합 테스트 자동화 - 문맥적 오류와 텍스트 정합성을 판별하는 다차원 검증 로직 고도화 - Slack/Email 알림 연동을 통한 결과 및 RaiT FAIL 리포트 자동 송출 ## 라이선스 및 유의사항 MIT License를 따릅니다. README는 본 프로젝트가 개인 기술 역량 향상 및 포트폴리오 목적임을 밝히고 있으며, 수집 정보의 상업적 이용을 금지하고 있습니다. 채용 정보의 저작권은 각 병원에 있고, 원저작권자 요청 시 저장소가 비공개로 전환될 수 있다고 명시합니다. 서버 부하 최소화를 위한 지연 시간 적용과 RaiT 게이트웨이를 통한 유해 데이터 차단을 언급하고 있습니다.