본문으로 건너뛰기
개인 4개 대학병원 자동 스크래핑 · 매시간 배치

병원 채용공고 알림 프로젝트

2024-08-02 — 2024-08-14

4개 대학병원 채용공고를 자동 수집하고 키워드 기반 이메일 알림을 제공하는 서버리스 백엔드 서비스

병원 채용공고 알림 프로젝트 project cover image

문제 해결 과정

1

4개 대학병원 채용 사이트를 매일 수동 확인해야 하는 구직자 불편

해결 과정

병원별 Strategy 패턴 — API 방식(세브란스, 이대, 중앙대) + Puppeteer 자동화(중앙대 흑석), 매시간 자동 스크래핑

결과

4개 병원 채용공고 자동 수집 + 키워드 매칭 이메일 알림

2

이메일 알림 발송 실패 시 공고를 놓칠 위험

해결 과정

비관적 락 기반 알림 큐 관리, 배치 처리(10건), 실패 시 최대 3회 재시도

결과

외부 ID 기반 중복 필터링 + 안정적 알림 전달 보장

프로젝트 설명

의료계 취업 준비생이 여러 대학병원 채용 사이트를 일일이 확인해야 하는 불편함을 해소하기 위해 개발한 프로젝트이다. 세브란스, 이대, 중앙대 등 4개 대학병원의 채용공고를 매시간 자동으로 스크래핑하고, 구독자가 등록한 키워드와 매칭되는 신규 공고를 이메일로 알려준다. 병원별로 상이한 채용 사이트 구조에 대응하기 위해 Strategy 패턴을 적용하여 API 기반 스크래핑과 Puppeteer 브라우저 자동화를 병원별로 분리 구현했으며, 알림 큐에 비관적 락과 재시도 로직을 적용하여 이메일 발송의 신뢰성을 확보했다.

주요 내용

  • 4개 대학병원 채용공고 매시간 자동 수집, Strategy 패턴 적용
  • 비관적 락 기반 알림 큐로 동시 처리 시 중복 발송 방지
  • Docker EC2 + Serverless Lambda 이중 배포 구성
  • GitHub Actions CI/CD 구축 및 배포 후 헬스체크 자동 검증

성과 지표

성과 지표 이전 이후
스크래핑 대상 수동 확인 4개 병원 매시간 자동 (자동화)
알림 신뢰성 단건 발송 배치 10건 + 3회 재시도 (비관적 락)

기술 선택 근거

  • Strategy 패턴: 병원별 상이한 사이트 구조에 대응 — API 방식(세브란스·이대·중앙대)과 Puppeteer 자동화(중앙대 흑석) 분리 구현
  • 비관적 락 알림 큐: 동시 배치 실행 시 동일 알림 중복 발송 방지, 배치 10건 단위 + 실패 시 최대 3회 재시도로 이메일 발송 신뢰성 보장

깨달은 점

  • 병원별 상이한 사이트 구조에 Strategy 패턴을 적용하여 스크래핑 로직의 확장성과 유지보수성 확보
  • Strategy 패턴의 런타임 알고리즘 전환으로 새로운 병원 추가 시 기존 코드 수정 없이 확장 가능한 구조 설계
  • EC2 상시 서버와 Lambda 서버리스를 이중 배포하여 비용 효율과 안정성을 동시에 확보하는 아키텍처 경험
  • GitHub Actions CI/CD 파이프라인 구축과 배포 후 헬스체크 자동화로 무중단 배포 신뢰성 확보

기술 스택

NestJS TypeScript PostgreSQL TypeORM Puppeteer Cheerio Nodemailer Docker AWS EC2 AWS RDS AWS Lambda Serverless Framework

프로젝트 이미지