Skip to content

Latest commit

 

History

History
118 lines (100 loc) · 4.15 KB

README.md

File metadata and controls

118 lines (100 loc) · 4.15 KB

Job Trend

개발자 채용공고 데이터 추출 파이프라인 구축 및 응용 프로젝트 (https://job-trend.streamlit.app/)

Background

🤔 데이터 엔지니어 직무는 어떤 기술스택이 필요할까?
🧐 Python을 다룰 줄 알면 어떤 직무에서 일할 수 있을까?

Job Trend 프로젝트는 이러한 궁금증에서 시작하게 되었습니다.
각 채용공고 사이트 정보를 통해 개발자 직무별/기술스택별 유의미한 정보를 추출하여
성장을 꿈꾸는 개발자들에게 도움이 되고자 합니다 🚀

Getting Started

Prerequisites

  • Python 3.8
  • Google Cloud Platform console - BigQuery
  • dbt(data build tool)
  • Streamlit (or Redash)

Setup

./initialize.sh

Run

./run.sh

Architecture

Architecture

Data Sources

Extract

  • Selenium을 이용하여 동적 크롤링을 진행합니다.
  • 직무별 채용공고 url을 추출한 뒤, 각 url에 접근하여 page source를 추출합니다.

Load

  • 추출된 데이터를 Data Warehouse에 저장합니다.
  • Data Warehouse로는 Google BigQuery를 이용합니다.
  • 저장되는 스키마는 각 사이트별로 상이하며, 대체적으로 아래와 같은 필드를 지니고 있습니다.
    • 공고 제목
    • 회사명
    • 직무
    • 기술스택
    • 마감일
    • 복지 및 혜택
    • ...

Transform

  • dbt(data build tool)을 이용하여 아래와 같은 프로세스로 각 사이트 채용공고별 정보를 통합시킵니다.
flowchart LR
jumpit --> job_jumpit
wanted --> job_wanted
jobplanet --> job_jobplanet
job_jumpit --> job
job_wanted --> job
job_jobplanet --> job
job --> content_jumpit
job --> content_wanted
job --> content_jobplanet

jumpit --> content_jumpit
wanted --> content_wanted
jobplanet --> content_jobplanet
content_jumpit --> content
content_wanted --> content
content_jobplanet --> content

jumpit --> company_jumpit
wanted --> company_wanted
jobplanet --> company_jobplanet
company_jumpit --> company
company_wanted --> company
company_jobplanet --> company
company --> content_jumpit
company --> content_wanted
company --> content_jobplanet
Loading

Batch Processing

  • Airflow를 통해 기반으로 일별 batch processing을 통해 데이터를 업데이트 합니다.
    • Airflow DAG 구성 방식
      flowchart LR
      wanted.get_url_list --> wanted.get_recruit_content_info --> wanted.postprocess
      jumpit.get_url_list --> jumpit.get_recruit_content_info --> jumpit.postprocess
      jobplanet.get_url_list --> jobplanet.get_recruit_content_info --> jobplanet.postprocess
      wanted.postprocess --> upload_to_bigquery
      jumpit.postprocess --> upload_to_bigquery
      jobplanet.postprocess --> upload_to_bigquery
      upload_to_bigquery --> run_dbt
      
      Loading
  • TerraformAnsible을 이용하여 k8s 기반의 환경에서 Airflow를 구동시킵니다.

Chatbot with LLM

  • Gemini를 기반으로 추출된 채용공고 내용을 LLM에 학습시킨 뒤, 개발자 채용과 관련된 내용을 답할 수 있는 챗봇을 생성합니다.

Visualization

  • Streamlit을 기반으로 직무별 채용공고 및 상위 기술스택, 기술스택별 상위 직무를 시각화합니다.
  • 필터링을 기반으로 원하는 직무 및 기술스택, 공고 마감기한에 대한 정보를 얻을 수 있습니다. Dashboard
Redash (deprecated)
  • Redash를 통해 SQL문을 기반으로 대시보드를 생성합니다.
  • 직무별 상위 기술스택 및 기술스택별 상위 직무 등의 정보를 Bar 및 Pie chart 뿐만 아니라, Sankey 및 Sunburst Sequence chart 등을 통해 제공합니다.
  • 직무(JOB), 기술스택(TECH STACK), 마감일(DEADLINE) parameter를 통해 동적으로 반응하는 대시보드를 구현합니다. Redash Dashboard